2016-07-01 1 views
51

Вот (DynamoDB часть) мой тропосферы сгенерированных JSON:CloudFormation настаивает мое творение 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 (и в том числе и в «Динамо»), поэтому я, возможно, вообще не замечаю что-то чрезвычайно очевидное, но в настоящее время это не очевидно.

Я googled вокруг и только действительно нашел одно упоминание об этой ошибке, и это было больше связано со слоем между разработчиком и CF, а не с самим CF.

Может кто-нибудь указать, что не так с моим шаблоном?

ответ

106

Это было до недоразумения с моей стороны относительно DynamoDB. Только атрибуты - это те, которые будут использоваться в качестве ключей. Таким образом, изменение массива AttributeDefinitions к следующему решить проблему:

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

Это также захваченный [здесь] (http://stackoverflow.com/a/30924384/1111215) –

+1

Ошибка здесь пытается определить схема таблицы (т. е. говорят «столбцы» таблицы в реляционной БД). В DynamoDb вы определяете только ключ, с помощью которого можно получить значения элемента в таблице, а не схему самого элемента. DynamoDb является схематичным, а значения, хранящиеся в каждом ключе, определяются при добавлении элемента. Форма данных не определена. – Zodman

+0

@ Zodman Большое спасибо за ваш комментарий, особенно эта часть: «DynamoDb является схематичным, и значения, хранящиеся в каждом ключе, определяются при добавлении элемента. Форма данных для определения" –