CloudFormation 坚持认为我的 DynamoDB 创建 JSON 无效.. 但我看不出如何
Posted
技术标签:
【中文标题】CloudFormation 坚持认为我的 DynamoDB 创建 JSON 无效.. 但我看不出如何【英文标题】:CloudFormation insists my DynamoDB creation JSON is invalid .. but I can't see how 【发布时间】:2016-11-03 17:10:45 【问题描述】:这是我对流层生成的 JSON(的 DynamoDB 部分):
"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(和 Dynamo,就此而言)非常陌生,所以我很可能遗漏了一些非常明显的东西,但目前对我来说并不明显。
我在谷歌上搜索了一下,只发现一次提到了这个错误,而且它更多地与开发人员和 CF 之间的一层有关,而不是 CF 本身。
谁能指出我的模板有什么问题?
【问题讨论】:
CloudFormation Linter 规则可帮助您更快地捕捉到更多信息:github.com/aws-cloudformation/cfn-python-lint/pull/1284 【参考方案1】:这归结为我对 DynamoDB 的误解。 only 应该在此处定义的属性是那些将用作键的属性。因此,将 AttributeDefinitions 数组更改为以下内容即可解决问题:
"AttributeDefinitions": [
"AttributeName": "audit_id",
"AttributeType": "S"
]
【讨论】:
这也是捕获here 这里的错误是试图定义表的模式(即关系数据库中表的“列”)。在 DynamoDb 中,您只定义用于检索表中项目的值的键,而不是项目本身的架构。 DynamoDb 是无模式的,并且针对每个键存储的值是在添加项目时定义的。没有要定义的数据形状。 @Zodman 非常感谢您的评论,特别是这部分:“DynamoDb 是无模式的,并且在添加项目时定义了针对每个键存储的值。没有要定义的数据形状”跨度> 哦,伙计,我多年来一直被这个完全相同的问题所困扰。谢谢。 不是每个英雄都穿斗篷...谢谢你的收获!以上是关于CloudFormation 坚持认为我的 DynamoDB 创建 JSON 无效.. 但我看不出如何的主要内容,如果未能解决你的问题,请参考以下文章
在 CloudFormation 模板中引用 AWS Parameter Store 的安全字符串
使用 Boto 从 CloudFormation 模板返回输出?
使用 AWS CLI 将现有资源导入 CloudFormation