Бессерверный запуск без создания локальной базы данных DynamoDB из файла yaml - PullRequest
0 голосов
/ 30 августа 2018

Я новичок в AWS. Насколько я понимаю, для создания таблиц на старте нам нужно migrate: true в custom.dynamodb в файле yaml. Я написал файл serverless.yml следующим образом.

provider:
  name: aws
  runtime: nodejs8.10
  profile: default
  region: us-east-1
  memorySize: 512
  target: 'node' # Below defined environment variables wont be accessible in lambda functions.
  stage: ${opt:stage, 'dev'}
  environment:
    USERS_TABLE: Users_${self:provider.stage}
    DAILYACTIVITY_TABLE: DailyActivity_${self:provider.stage}
  plugins:
    - serverless-dynamodb-local
    - serverless-offline
  custom:
    dynamodb:
      start:
        migrate: true
  resources:
    Resources:
      usersTable:
        Type: 'AWS::DynamoDB::Table'
        DeletionPolicy: Retain
        Properties:
          AttributeDefinitions:
            - AttributeName: emailid
              AttributeType: S
            - AttributeName: id
              AttributeType: S
          KeySchema:
            - AttributeName: emailid
              KeyType: HASH
          GlobalSecondaryIndexes:
            - IndexName: gsi_id
              KeySchema:
                - AttributeName: id
                  KeyType: HASH
              ProvisionedThroughput:
                ReadCapacityUnits: 5
                WriteCapacityUnits: 5
              Projection:
                ProjectionType: ALL
          ProvisionedThroughput:
            ReadCapacityUnits: 5
            WriteCapacityUnits: 5
          TableName: ${self:provider.environment.USERS_TABLE}
      activityTable:
        Type: 'AWS::DynamoDB::Table'
        DeletionPolicy: Retain
        Properties:
          AttributeDefinitions:
            - AttributeName: id
              AttributeType: S
            - AttributeName: date
              AttributeType: S
          KeySchema:
            - AttributeName: id
              KeyType: HASH
            - AttributeName: date
              KeyType: RANGE
          ProvisionedThroughput:
            ReadCapacityUnits: 5
            WriteCapacityUnits: 5
          TableName: ${self:provider.environment.DAILYACTIVITY_TABLE}

Но sls offline start не создает таблицы из раздела ресурсов. Пожалуйста, подскажите, что не так с вышеуказанным конфигом.

Ответы [ 2 ]

0 голосов
/ 25 июля 2019

Dynamodb не может создавать две таблицы одновременно, поэтому вам нужно объявить одну как зависимую от другой, чтобы они создавались последовательно, а не параллельно.

"mySecondDDBTable" : {
  "Type" : "AWS::DynamoDB::Table",
  "DependsOn" : "myFirstDDBTable" ,
  "Properties" : {
   ... etc

Взгляните на https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html, в частности, на раздел "Таблица DynamoDB с атрибутом DependsOn"

0 голосов
/ 20 января 2019

Это потому, что все ваши ключи, пользовательские, плагины, ресурсы вложены в провайдера. Все это должно быть на верхнем уровне (уровень отступа 0) в yaml. Я столкнулся с той же проблемой, и поэтому она не работала. Также, пожалуйста, используйте serverless-local-dynamodb версии 0.2.30. Последний (0.2.36) имеет проблемы.

Я переформатировал yaml для вас, чтобы вы поняли, что я имею в виду

provider:
  name: aws
  runtime: nodejs8.10
  profile: default
  region: us-east-1
  memorySize: 512
  target: 'node' # Below defined environment variables wont be accessible in lambda functions.
  stage: ${opt:stage, 'dev'}
  environment:
    USERS_TABLE: Users_${self:provider.stage}
    DAILYACTIVITY_TABLE: DailyActivity_${self:provider.stage}

plugins:
  - serverless-dynamodb-local
  - serverless-offline

custom:
  dynamodb:
    start:
      migrate: true

resources:
  Resources:
    usersTable:
      Type: 'AWS::DynamoDB::Table'
      DeletionPolicy: Retain
      Properties:
        AttributeDefinitions:
          - AttributeName: emailid
            AttributeType: S
          - AttributeName: id
            AttributeType: S
        KeySchema:
          - AttributeName: emailid
            KeyType: HASH
        GlobalSecondaryIndexes:
          - IndexName: gsi_id
            KeySchema:
              - AttributeName: id
                KeyType: HASH
            ProvisionedThroughput:
              ReadCapacityUnits: 5
              WriteCapacityUnits: 5
            Projection:
              ProjectionType: ALL
        ProvisionedThroughput:
          ReadCapacityUnits: 5
          WriteCapacityUnits: 5
        TableName: ${self:provider.environment.USERS_TABLE}
    activityTable:
      Type: 'AWS::DynamoDB::Table'
      DeletionPolicy: Retain
      Properties:
        AttributeDefinitions:
          - AttributeName: id
            AttributeType: S
          - AttributeName: date
            AttributeType: S
        KeySchema:
          - AttributeName: id
            KeyType: HASH
          - AttributeName: date
            KeyType: RANGE
        ProvisionedThroughput:
          ReadCapacityUnits: 5
          WriteCapacityUnits: 5
        TableName: ${self:provider.environment.DAILYACTIVITY_TABLE}
...