Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker serverless.yml不在本地创建dynamodb表_Docker_Docker Compose_Amazon Dynamodb_Serverless - Fatal编程技术网

Docker serverless.yml不在本地创建dynamodb表

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设置,在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

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"
{
“表格名称”:[
“采样可测局部”
]
}