Cloudformation UIでdynamoDBテーブルを作成するために使用している次のテンプレートがあります。 PrimaryKeyとしてIDおよびsortKeyasValue
{
"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 UIで、新しいスタックをクリックし、ローカルコンピューターからtemplate
ファイルをポイントし、スタックに名前を付けて、[次へ]をクリックします。しばらくすると、Property AttributeDefinitionsがテーブルのKeySchemaおよびセカンダリインデックスと矛盾するというエラーが表示されます
問題は、Resources.Properties.AttributeDefinitions
キーがonlyインデックスまたはキーに使用される列を定義する必要があることです。つまり、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"
}
}
}
}