CloudFormation наполягає, що моє створення JSON DynamoDB недійсне .. але я не бачу, як


82

Ось (частина DynamoDB) мого генерованого в Тропосфері 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 дає мені цю помилку , намагаючись розкрутити VPC: Property AttributeDefinitions is inconsistent with the KeySchema of the table and the secondary indexes.

Але ... це так? Я вказую audit_idяк самотній ключ, і він точно існує в списку AttributeDefinitions. Я дуже новачок у CF (і з цього приводу "Динамо"), тому, можливо, мені не вистачає чогось надзвичайно очевидного, але мені це зараз не очевидно.

Я погуглив і по-справжньому знайшов лише одну згадку про цю помилку, і це більше стосувалося шару між розробником і CF, а не самим CF.

Хтось може вказати, що не так з моїм шаблоном?


Правило CloudFormation Linter, яке допоможе швидше вловити це, отримавши
Pat Myron,

Відповіді:


178

Це було пов’язано з непорозумінням з мого боку щодо DynamoDB. Тут слід визначити лише атрибути, які будуть використовуватися як ключі. Таким чином, зміна масиву AttributeDefinitions на таке вирішило проблему:

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


10
Помилка тут полягала в спробі визначити схему таблиці (тобто говорять «стовпці» таблиці в реляційній БД). У DynamoDb ви визначаєте лише ключ, за допомогою якого можна отримати значення елемента в таблиці, а не схему самого елемента. DynamoDb не має схеми, і значення, що зберігаються для кожного ключа, визначаються при додаванні елемента. Немає форми даних для визначення.
Zodman

@Zodman Щиро дякуємо за ваш коментар, зокрема до цієї частини: "DynamoDb без схем, і значення, що зберігаються для кожного ключа, визначаються при додаванні елемента. Немає форми даних, яку можна визначити"
Хамед Міне

3
О, чоловіче, я затримався на цій же проблемі віками. Дякую.
blueprintchris

3
Не кожен герой носить накидки ... Дякую за улов!
Марчелло Гречі Лінс,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.