Docker serverless.yml不在本地创建dynamodb表
我有一个docker设置,在docker中运行serverless和dynamodb。在我的serverless.yml中,我定义了创建表的指令,但是当我运行Docker serverless.yml不在本地创建dynamodb表,docker,docker-compose,amazon-dynamodb,serverless,Docker,Docker Compose,Amazon Dynamodb,Serverless,我有一个docker设置,在docker中运行serverless和dynamodb。在我的serverless.yml中,我定义了创建表的指令,但是当我运行docker compose up时,它不会创建表(我通过运行查询来列出表进行了检查) serverless.yml ... provider: name: aws runtime: nodejs8.10 stage: dev region: eu-west-1 plugins: - serverless-dynamo
docker compose up
时,它不会创建表(我通过运行查询来列出表进行了检查)
serverless.yml
...
provider:
name: aws
runtime: nodejs8.10
stage: dev
region: eu-west-1
plugins:
- serverless-dynamodb-local
- serverless-offline
custom:
dynamodb:
inMemory: true
port: 8000
migrate: true # create tables on start
onStart: true
serverless-offline:
babelOptions:
presets: ["es2015"]
resources:
Resources:
UserTable:
Type: "AWS::DynamoDB::Table"
Properties:
TableName: UserTable
AttributeDefinitions:
- AttributeName: userId
AttributeType: S
- AttributeName: fullname
AttributeType: S
KeySchema:
- AttributeName: userId
KeyType: HASH
ProvisionedThroughput:
ReadCapacityUnits: 1
WriteCapacityUnits: 1
version: "3"
services:
serverless:
build: .
restart: always
privileged: true
working_dir: /home/node-app
environment:
- NODE_ENV=development
- DYNAMO_ENDPOINT=http://dynamodb:8000
- AWS_ACCESS_KEY_ID='dev-key-id'
- AWS_SECRET_ACCESS_KEY='dev-key'
- AWS_REGION='eu-west-1'
links:
- "dynamodb:dynamodb"
command: npm run start
....
dynamodb:
image: amazon/dynamodb-local
ports:
- "8000:8000"
environment:
- AWS_ACCESS_KEY_ID='dev-key-id'
- AWS_SECRET_ACCESS_KEY='dev-key'
docker compose.yml
...
provider:
name: aws
runtime: nodejs8.10
stage: dev
region: eu-west-1
plugins:
- serverless-dynamodb-local
- serverless-offline
custom:
dynamodb:
inMemory: true
port: 8000
migrate: true # create tables on start
onStart: true
serverless-offline:
babelOptions:
presets: ["es2015"]
resources:
Resources:
UserTable:
Type: "AWS::DynamoDB::Table"
Properties:
TableName: UserTable
AttributeDefinitions:
- AttributeName: userId
AttributeType: S
- AttributeName: fullname
AttributeType: S
KeySchema:
- AttributeName: userId
KeyType: HASH
ProvisionedThroughput:
ReadCapacityUnits: 1
WriteCapacityUnits: 1
version: "3"
services:
serverless:
build: .
restart: always
privileged: true
working_dir: /home/node-app
environment:
- NODE_ENV=development
- DYNAMO_ENDPOINT=http://dynamodb:8000
- AWS_ACCESS_KEY_ID='dev-key-id'
- AWS_SECRET_ACCESS_KEY='dev-key'
- AWS_REGION='eu-west-1'
links:
- "dynamodb:dynamodb"
command: npm run start
....
dynamodb:
image: amazon/dynamodb-local
ports:
- "8000:8000"
environment:
- AWS_ACCESS_KEY_ID='dev-key-id'
- AWS_SECRET_ACCESS_KEY='dev-key'
npm run start
只需离线运行sls
。运行docker compose后,一切都会正常启动,但不会创建UserTable
如果您使用Docker管理DynamoDB服务,则需要指示
无服务器DynamoDB local
插件为您创建表
您可以通过运行以下命令来执行此操作:
无服务器dynamodb迁移
Docker版本的DynamoDB local的一个常见问题是,只有使用用于创建表的相同AWS访问密钥ID的客户端才能看到表,例如运行list tables
时,即使已成功创建表,也不会显示任何表
$aws dynamodb列表表--端点”http://localhost:8000"
{
“表名”:[]
}
最简单的解决方案可能是将-sharedDb
选项传递给DynamoDB:
docker-run-p8000:8000-d amazon/dynamodb local-jar DynamoDBLocal.jar-sharedDb
然后在运行无服务器dynamodb migrate
后生成预期输出:
aws dynamodb列表表--端点”http://localhost:8000"
{
“表格名称”:[
“采样可测局部”
]
}