PropertyDefinition несовместим

У меня есть следующий шаблон, который я использую в пользовательском интерфейсе cloudformation для создания таблицы dynamoDB. Я хочу создать таблицу с PrimaryKey как ID и sortKey как значение

{
  "AWSTemplateFormatVersion" : "2010-09-09",

  "Description" : "DB Description",

  "Resources" : {
    "TableName" : {
      "Type" : "AWS::DynamoDB::Table",
      "Properties" : {
        "AttributeDefinitions": [ { 
          "AttributeName" : "ID",
          "AttributeType" : "S"
        }, { 
          "AttributeName" : "Value",
          "AttributeType" : "S"
        } ],
        "KeySchema": [
          { 
            "AttributeName": "ID", 
            "KeyType": "HASH"
          }
        ]                
      },
      "TableName": "TableName"
    }
  }
}

В интерфейсе CF, я нажимаю на новый стек, укажу на файл template с моего локального компьютера, дайте стек имя и нажмите далее. После некоторого времени я получаю сообщение об ошибке Property AttributeDefinitions несовместимо с KeySchema таблицы и вторичными индексами

Ответ 1

Проблема состоит в том, что ключ Resources.Properties.AttributeDefinitions должен определять только столбцы, используемые для индексов или ключей. Другими словами, ключи в Resources.Properties.AttributeDefinitions должны соответствовать тем же ключам, которые определены в Resources.Properties.KeySchema.

Документы AWS:

AttributeDefinitions: список объектов AttributeName и AttributeType, которые описывают схему ключей для таблицы и индексов.

итоговый шаблон будет выглядеть так:

{
  "AWSTemplateFormatVersion" : "2010-09-09",

  "Description" : "DB Description",

  "Resources" : {
    "TableName" : {
    "Type" : "AWS::DynamoDB::Table",
    "Properties" : {
      "AttributeDefinitions": [ { 
        "AttributeName" : "ID",
        "AttributeType" : "S"
      } ],
      "ProvisionedThroughput":{
        "ReadCapacityUnits" : 1,
        "WriteCapacityUnits" : 1
      },
      "KeySchema": [
        { 
          "AttributeName": "ID", 
          "KeyType": "HASH"
        }
       ] ,               
      "TableName": "table5"
    }
   }
  }
}

Ответ 2

Я изучаю DynamoDB, и я создаю таблицу ниже, и я получаю ошибку "Свойство AttributeDefinitions несовместимо с KeySchema таблицы и вторичных индексов". Может кто-нибудь подсказать, что я здесь делаю не так.

{
"DDBTable": {
      "Type": "AWS::DynamoDB::Table",
      "Properties": {
    "AttributeDefinitions": [
        {
            "AttributeName": "SchoolId",
            "AttributeType": "N"
        },
        {
            "AttributeName": "Name",
            "AttributeType": "S"
        },
        {
            "AttributeName": "Address",
            "AttributeType": "S"
        },
        {
            "AttributeName": "City",
            "AttributeType": "S"
        }
    ],
    "TableName": "School",
    "KeySchema": [
        {
            "AttributeName": "SchoolId",
            "KeyType": "HASH"
        },
        {
            "AttributeName": "Name",
            "KeyType": "RANGE"
        }
    ],
    "LocalSecondaryIndexes": [
        {
            "IndexName": "LastPostIndex",
            "KeySchema": [
                {
                    "AttributeName": "SchoolId",
                    "KeyType": "HASH"
                },
                {
                    "AttributeName": "City",
                    "KeyType": "RANGE"
                }
            ],
            "Projection": {
                "ProjectionType": "KEYS_ONLY"
            }
        }
    ],
    "ProvisionedThroughput": {
        "ReadCapacityUnits": 5,
        "WriteCapacityUnits": 5
    },
    "Tags": [ 
      { 
         "Key": "Owner",
         "Value": "BlueTeam"
      }
   ]
}