Joh*_*ike 3 amazon-dynamodb docker docker-compose 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-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
Run Code Online (Sandbox Code Playgroud)
docker-compose.yml
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'
Run Code Online (Sandbox Code Playgroud)
npm run start只是运行sls offline。一旦我运行 docker compose,一切都会正常启动,但UserTable不会创建。
小智 5
如果您使用 Docker 来管理 DynamoDB 服务,则需要指示插件serverless-dynamodb-local为您创建表。
您可以通过运行以下命令来完成此操作:
serverless dynamodb migrate
Run Code Online (Sandbox Code Playgroud)
Docker 版本的 DynamoDB local 的一个常见问题是,这些表仅对使用用于创建表的相同 AWS 访问密钥 ID 的客户端可见,例如运行时list-tables不会显示任何表,即使您已成功创建了一个表。
$ aws dynamodb list-tables --endpoint "http://localhost:8000"
{
"TableNames": []
}
Run Code Online (Sandbox Code Playgroud)
最简单的解决方案可能是将选项传递-sharedDb给 DynamoDB:
docker run -p 8000:8000 -d amazon/dynamodb-local -jar DynamoDBLocal.jar -sharedDb
Run Code Online (Sandbox Code Playgroud)
运行后会产生预期的输出serverless dynamodb migrate:
aws dynamodb list-tables --endpoint "http://localhost:8000"
{
"TableNames": [
"SampleDynamoTable-local"
]
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1217 次 |
| 最近记录: |