CloudFormation坚持我的DynamoDB创建JSON无效..但是我看不到如何


82

这是我对流层生成的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
Pat Myron

Answers:


178

这归结于我对DynamoDB的误解。此处应定义的唯一属性是将用作键的属性。因此,将AttributeDefinitions数组更改为以下内容可以解决此问题:

"AttributeDefinitions": [
            {
                "AttributeName": "audit_id",
                "AttributeType": "S"
            }
]

3
这也捕获在这里
Benny Bauer

10
这里的错误是试图定义表的模式(即关系数据库中表的“列”)。在DynamoDb中,您仅定义用于检索表中项目值的键,而不是项目本身的架构。DynamoDb是无模式的,并且在添加项目时定义针对每个键存储的值。没有要定义的数据形状。
Zodman '18

@Zodman非常感谢您对此部分的特别评论:“ DynamoDb是无模式的,在添加项时定义了针对每个键存储的值。没有要定义的数据形状”
Hamed Minaee

3
噢,老兄,我被这个问题困扰了很久了。谢谢。
blueprintchris

3
并非每个英雄都披着斗篷...感谢大家的接见!
Marcello Grechi Lins '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.