CloudFormationは、DynamoDB作成のJSONが無効であると主張しています..しかし、方法がわかりません


82

これが私の対流圏で生成されたJSON(のDynamoDB部分)です:

"sandbox": {
        "Properties": {
            "AttributeDefinitions": [
                {
                    "AttributeName": "audit_id",
                    "AttributeType": "S"
                },
                {
                    "AttributeName": "status",
                    "AttributeType": "S"
                },
                {
                    "AttributeName": "filename",
                    "AttributeType": "S"
                },
                {
                    "AttributeName": "file_detected_dt",
                    "AttributeType": "S"
                },
                {
                    "AttributeName": "time_taken",
                    "AttributeType": "N"
                },
                {
                    "AttributeName": "number_rows_processed_file",
                    "AttributeType": "N"
                },
                {
                    "AttributeName": "number_rows_created_db",
                    "AttributeType": "N"
                },
                {
                    "AttributeName": "info_messages",
                    "AttributeType": "S"
                }
            ],
            "KeySchema": [
                {
                    "AttributeName": "audit_id",
                    "KeyType": "HASH"
                }
            ],
            "ProvisionedThroughput": {
                "ReadCapacityUnits": {
                    "Ref": "ReadCapacityUnits"
                },
                "WriteCapacityUnits": {
                    "Ref": "WriteCapacityUnits"
                }
            }
        },
        "Type": "AWS::DynamoDB::Table"
    }

CloudFormationは、VPCを起動しようとすると次のエラーを表示します Property AttributeDefinitions is inconsistent with the KeySchema of the table and the secondary indexes

しかし...そうですか?私はaudit_id単独のキーとして指定していますが、それはAttributeDefinitionsリスト内に確実に存在します。私はCF(さらに言えばDynamo)に非常に慣れていないので、非常に明白なものを見逃している可能性がありますが、現時点では明らかではありません。

私はグーグルで調べてみましたが、このエラーについての言及は1つしか見つかりませんでした。それは、CF自体ではなく、開発者とCFの間のレイヤーに関係していました。

誰かが私のテンプレートの何が問題になっているのか指摘できますか?


CloudFormation Linterルールは、より多くの情報でこれをより迅速にキャッチするのに役立ちます:github.com/aws-cloudformation/cfn-python-lint/pull/1284
Pat Myron

回答:


178

これは、DynamoDBに関する私の側の誤解によるものでした。唯一ここで定義されなければならない属性は、キーとして使用されるものです。したがって、AttributeDefinitions配列を次のように変更すると、問題が解決しました。

"AttributeDefinitions": [
            {
                "AttributeName": "audit_id",
                "AttributeType": "S"
            }
]


10
ここでの間違いは、テーブルのスキーマを定義しようとしたことでした(つまり、リレーショナルDBのテーブルの「列」が話します)。DynamoDbでは、アイテム自体のスキーマではなく、テーブル内のアイテムの値を取得するためのキーのみを定義します。DynamoDbはスキーマレスであり、各キーに対して保存される値は、アイテムが追加されるときに定義されます。定義するデータの形はありません。
ゾッドマン

@Zodman特にこの部分のコメントに感謝します:「DynamoDbはスキーマレスであり、各キーに対して保存される値は、アイテムが追加されるときに定義されます。定義するデータ形状はありません」
Hamed Minaee 2018年

3
ああ、私は何年もの間、これとまったく同じ問題に悩まされていました。ありがとう。
blueprintchris

3
すべてのヒーローがマントを着ているわけではありません...キャッチしてくれてありがとう!
Marcello Grechi Lins 2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.