CloudFormation twierdzi, że mój plik JSON tworzenia DynamoDB jest nieprawidłowy ... ale nie wiem, jak to zrobić

82

Oto (część DynamoDB) mój JSON wygenerowany w Troposferze:

"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 daje mi ten błąd na próby rozpędzają VPC: Property AttributeDefinitions is inconsistent with the KeySchema of the table and the secondary indexes.

Ale ... czy to jest? Określam audit_idjako samotny klucz i na pewno istnieje na liście AttributeDefinitions. Jestem bardzo nowy w CF (i Dynamo, jeśli o to chodzi), więc być może brakuje mi czegoś niezwykle oczywistego, ale w tej chwili nie jest to dla mnie oczywiste.

Przeszukałem go w Google i tak naprawdę znalazłem tylko jedną wzmiankę o tym błędzie i było to bardziej związane z warstwą między programistą a CF, a nie z samym CF.

Czy ktoś może wskazać, co jest nie tak z moim szablonem?

user1381745
źródło
Reguła CloudFormation Linter, która pomoże złapać to szybciej, dzięki dodatkowym informacjom: github.com/aws-cloudformation/cfn-python-lint/pull/1284
Pat Myron

Odpowiedzi:

178

Było to spowodowane nieporozumieniem z mojej strony odnośnie DynamoDB. Że tylko atrybuty, które powinny być zdefiniowane tutaj są te, które zostaną wykorzystane jako klucze. Zatem zmiana tablicy AttributeDefinitions na następującą rozwiązała problem:

"AttributeDefinitions": [
            {
                "AttributeName": "audit_id",
                "AttributeType": "S"
            }
]
user1381745
źródło
3
Jest to również uchwycone tutaj
Benny Bauer
10
Błąd tutaj polegał na próbie zdefiniowania schematu tabeli (tj. „Kolumn” tabeli w relacyjnej bazie danych mówią). W DynamoDb definiujesz tylko klucz, za pomocą którego chcesz pobrać wartości pozycji w tabeli, a nie schemat samego elementu. DynamoDb nie ma schematu, a wartości przechowywane dla każdego klucza są definiowane podczas dodawania elementu. Brak kształtu danych do zdefiniowania.
Zodman,
@Zodman Bardzo dziękuję za komentarz, szczególnie w tej części: „DynamoDb nie ma schematu, a wartości przechowywane dla każdego klucza są definiowane podczas dodawania elementu. Nie ma kształtu danych do zdefiniowania”
Hamed Minaee
3
O rany, od wieków tkwiłem w tym samym problemie. Dzięki.
blueprintchris
3
Nie każdy bohater nosi peleryny ... Dzięki za połów!
Marcello Grechi Lins