CloudFormation besteht darauf, dass mein JSON für die DynamoDB-Erstellung ungültig ist. Ich kann jedoch nicht sehen, wie


82

Hier ist (der DynamoDB-Teil von) meinem von Troposphere generierten JSON:

"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 gibt mir diesen Fehler beim Versuch, die VPC hochzufahren : Property AttributeDefinitions is inconsistent with the KeySchema of the table and the secondary indexes.

Aber ist es? Ich gebe audit_idals Einzelschlüssel an, und er ist definitiv in der AttributeDefinitions-Liste vorhanden. Ich bin sehr neu bei CF (und auch bei Dynamo), daher fehlt mir möglicherweise etwas sehr Offensichtliches, aber es ist mir im Moment nicht klar.

Ich habe herumgegoogelt und nur eine einzige Erwähnung dieses Fehlers gefunden, und es ging eher um eine Schicht zwischen Entwickler und CF als um CF selbst.

Kann jemand darauf hinweisen, was mit meiner Vorlage nicht stimmt?


CloudFormation Linter-Regel, um dies mit weiteren Informationen schneller
Pat Myron

Antworten:


178

Dies war auf ein Missverständnis meinerseits in Bezug auf DynamoDB zurückzuführen. Die einzigen Attribute, die hier definiert werden sollten, sind diejenigen, die als Schlüssel verwendet werden. Das Ändern des AttributDefinitions-Arrays in das folgende hat das Problem gelöst:

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

3
Dies wird auch hier
Benny Bauer

10
Der Fehler hier war der Versuch, das Schema der Tabelle zu definieren (dh die 'Spalten' der Tabelle in der relationalen Datenbank sprechen). In DynamoDb definieren Sie nur den Schlüssel, mit dem die Werte des Elements in der Tabelle abgerufen werden sollen, nicht das Schema des Elements selbst. DynamoDb ist schemenlos und die für jeden Schlüssel gespeicherten Werte werden beim Hinzufügen des Elements definiert. Es ist keine Datenform zu definieren.
Zodman

@Zodman Vielen Dank für Ihren Kommentar speziell zu diesem Teil: "DynamoDb ist schemenlos und die für jeden Schlüssel gespeicherten Werte werden definiert, wenn das Element hinzugefügt wird. Es gibt keine zu definierende Datenform"
Hamed Minaee

3
Oh Mann, ich war ewig mit genau diesem Problem beschäftigt. Vielen Dank.
Blueprintchris

3
Nicht jeder Held trägt Umhänge ... Danke für den Fang!
Marcello Grechi Lins
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.