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 - 永久删除堆栈

在 CloudFormation 模板中引用 AWS Parameter Store 的安全字符串

使用 Boto 从 CloudFormation 模板返回输出?

使用 AWS CLI 将现有资源导入 CloudFormation

CloudFormation 将项目放入 DynamoDB 表中

使用AWS CLI将现有资源导入CloudFormation