web-dev-qa-db-ja.com

ソートキーを使用したサーバーレスフレームワークDynamoDBテーブルリソース定義

現在、serverless.ymlにこのようなコードがあります。

resources:
  Resources:
    uploadBucket:
      Type: AWS::S3::Bucket
      Properties:
        BucketName: ${self:service}-${self:custom.stage}-uploads
    visitsTable:
      Type: AWS::DynamoDB::Table
      Properties:
        TableName: ${self:custom.visitsTable}
        AttributeDefinitions:
          - AttributeName: userId
            AttributeType: S
          - AttributeName: visitId
            AttributeType: S
          - AttributeName: comments
            AttributeType: S
          - AttributeName: attachments
            AttributeType: S
          - AttributeName: ph
            AttributeType: N
          - AttributeName: ch
            AttributeType: N
        KeySchema:
          - AttributeName: userId
            KeyType: HASH
          - AttributeName: visitId
            KeyType: HASH
        ProvisionedThroughput:
            ReadCapacityUnits: 5
            WriteCapacityUnits: 5

私の目標は、主キーuserIdを使用してテーブルを作成し、キーvisitIdを並べ替え、コメント、添付ファイル、phおよびchのフィールドを用意することです。 sls deployを実行しようとすると、次のエラーが発生します。

サーバーレスエラー---------------------------------------

エラーが発生しました:visitsTable-プロパティAttributeDefinitionsがテーブルおよびセカンダリインデックスのKeySchemaと矛盾しています。

私はここで何が間違っているのですか?

編集:私が試した別の試み

resources:
  Resources:
    uploadBucket:
      Type: AWS::S3::Bucket
      Properties:
        BucketName: ${self:service}-${self:custom.stage}-uploads
    visitsTable:
      Type: AWS::DynamoDB::Table
      Properties:
        TableName: ${self:custom.visitsTable}
        AttributeDefinitions:
          - AttributeName: userId
            AttributeType: S
          - AttributeName: visitId
            AttributeType: S
        KeySchema:
          - AttributeName: userId
            KeyType: HASH
          - AttributeName: visitId
            KeyType: RANGE
        ProvisionedThroughput:
            ReadCapacityUnits: 5
            WriteCapacityUnits: 5
7
Joseph Astrahan

AWS DynamoDbはNO-SQLタイプのデータベースであり、テーブルの作成中にすべてのキーを定義する必要はありません。また、AWSのドキュメントから、属性定義でキースキーマとインデックスを指定する必要があることは明らかです。

テーブルとインデックスのキースキーマを説明する属性の配列。

以下のようにコードを編集してください

resources:
  Resources:
    uploadBucket:
      Type: AWS::S3::Bucket
      Properties:
        BucketName: ${self:service}-${self:custom.stage}-uploads
    visitsTable:
      Type: AWS::DynamoDB::Table
      Properties:
        TableName: ${self:custom.visitsTable}
        AttributeDefinitions:
          - AttributeName: userId
            AttributeType: S
          - AttributeName: visitId
            AttributeType: S
        KeySchema:
          - AttributeName: userId
            KeyType: HASH
          - AttributeName: visitId
            KeyType: RANGE
        ProvisionedThroughput:
            ReadCapacityUnits: 5
            WriteCapacityUnits: 5

詳細 CreateTable

11
Vaisakh PS