DynamodB, как определить ни одну ключевую схему в serverless.yml? - PullRequest
0 голосов
/ 20 сентября 2018

Я пытаюсь применить динамодаб в моей бессерверной лямбда-aws.Мой файл выглядит так:

resources:
  Resources:
    StoreDynamoDbTable:
      Type: 'AWS::DynamoDB::Table'
      DeletionPolicy: Retain
      Properties:
        AttributeDefinitions:
          - AttributeName: id
            AttributeType: S
          - AttributeName: lat
            AttributeType: N 
          - AttributeName: lng
            AttributeType: N
        KeySchema:
          - AttributeName: id
            KeyType: HASH
        ProvisionedThroughput:
          ReadCapacityUnits: 1
          WriteCapacityUnits: 1
        TableName: ${self:provider.environment.TableStore}

Я пытаюсь применить lat и lng в качестве атрибутов storeTable, просто атрибут, а не ключ Schema, но каждый элемент store должен иметь эти атрибуты.

Но естьэто ошибка:

Произошла ошибка: StoreDynamoDbTable - свойство AttributeDefinitions несовместимо с KeySchema таблицы и вторичных индексов.

Как сделать lat и lng просто mastатрибут, а не ключевой элемент для индекса?

1 Ответ

0 голосов
/ 20 сентября 2018

DynamoDB требует, чтобы вы объявляли ТОЛЬКО атрибуты, составляющие вашу схему ключей.( См. Документы AWS )

Если id является единственным атрибутом, который используется для создания вашей ключевой схемы, ваш ресурс должен выглядеть следующим образом:

resources:
  Resources:
    StoreDynamoDbTable:
      Type: 'AWS::DynamoDB::Table'
      DeletionPolicy: Retain
      Properties:
        AttributeDefinitions:
          - AttributeName: id
            AttributeType: S
        KeySchema:
          - AttributeName: id
            KeyType: HASH
        ProvisionedThroughput:
          ReadCapacityUnits: 1
          WriteCapacityUnits: 1
        TableName: ${self:provider.environment.TableStore}

DynamoDB не заботится о других атрибутах.После вставки ваших данных DynamoDB обнаружит новые атрибуты, не объявляя их в схеме.В этом весь смысл нереляционной базы данных.


Кроме того, если вы хотите иметь дату в качестве ключа сортировки в своей ключевой схеме, у вас может быть что-то вроде этого:

resources:
  Resources:
    StoreDynamoDbTable:
      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: 1
          WriteCapacityUnits: 1
        TableName: ${self:provider.environment.TableStore}

У ключевой схемы всегда есть по крайней мерераздел (HASH) и может иметь ключ сортировки (RANGE). Отметьте это, чтобы узнать больше о ключевой схеме DynamoDB.

...