PropertyDefinition 不一致

我有以下模板,我正在使用在云形成 UI 创建 DynamoDB 表。我想创建一个表,其中 PrimaryKey身份证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 UI 上,我单击新的堆栈,指向本地计算机上的 template文件,给堆栈命名,然后单击下一步。过了一段时间,我得到的错误说 属性 AttributeDefinition 与表的 KeySchema 和辅助索引不一致

20884 次浏览

问题是 Resources.Properties.AttributeDefinitions键必须 只有定义用于索引或键的列。换句话说,Resources.Properties.AttributeDefinitions中的键必须与 Resources.Properties.KeySchema中定义的键匹配。

AWS 文档:

AttributeDefinition: 描述表和索引的键架构的 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"
}
}
}
}

在 AttributeDefinition 中,只需定义分区和范围键,而不需要定义其他属性。

AttributeDefinition 和 KeySchema 中的属性数应该匹配,并且应该完全相同。

接受的答案在错误的原因中是正确的,但是您说您希望排序键是 Value。因此,您应该更改 CloudForment,以包含以下内容:

{
"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"
},
{
"AttributeName": "Value",
"KeyType": "RANGE"
}
]
},
"TableName": "TableName"
}
}
}