serverless.yml не создает таблицу DynamodB локально
У меня есть настройка докера, которая работает без сервера и DynamodB как в Docker. В моем 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
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'
npm run start
просто бежит sls offline
, Как только я запускаю docker compose, все запускается нормально, но UserTable
не создан.
0 ответов
Если вы используете Docker для управления своей службой DynamoDB, вам необходимо указать serverless-dynamodb-local
плагин для создания таблицы для вас.
Вы можете сделать это, запустив:
serverless dynamodb migrate
Одна из распространенных проблем с Docker-версией DynamoDB local заключается в том, что таблицы видны только клиенту, использующему тот же идентификатор ключа доступа AWS, который использовался для создания таблицы, например, при запуске list-tables
не будет отображать таблицы, даже если вы успешно их создали.
$ aws dynamodb list-tables --endpoint "http://localhost:8000"
{
"TableNames": []
}
Самое простое решение - передать -sharedDb
опция DynamoDB:
docker run -p 8000:8000 -d amazon/dynamodb-local -jar DynamoDBLocal.jar -sharedDb
Затем это дает ожидаемый результат после запуска serverless dynamodb migrate
:
aws dynamodb list-tables --endpoint "http://localhost:8000"
{
"TableNames": [
"SampleDynamoTable-local"
]
}