CloudFormation khẳng định JSON tạo DynamoDB của tôi không hợp lệ .. nhưng tôi không thể biết cách


82

Đây là (phần DynamoDB của) JSON do Troposphere tạo của tôi:

"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 mang lại cho tôi lỗi này trên cố gắng để quay lên VPC: Property AttributeDefinitions is inconsistent with the KeySchema of the table and the secondary indexes.

Nhưng nó là? Tôi đang chỉ định audit_idlà một khóa duy nhất và nó chắc chắn tồn tại trong danh sách Định nghĩa thuộc tính. Tôi rất mới với CF (và Dynamo, về vấn đề đó) nên tôi có thể đang thiếu một thứ gì đó cực kỳ rõ ràng, nhưng nó không rõ ràng với tôi vào lúc này.

Tôi đã tìm kiếm xung quanh và chỉ thực sự tìm thấy một lần đề cập đến lỗi này và nó liên quan nhiều hơn đến một lớp giữa nhà phát triển và CF, hơn là bản thân CF.

Bất cứ ai có thể chỉ ra những gì sai với mẫu của tôi?


Quy tắc CloudFormation Linter để giúp nắm bắt điều này nhanh hơn với nhiều thông tin hơn: github.com/aws-cloudformation/cfn-python-lint/pull/1284
Pat Myron

Câu trả lời:


178

Điều này do một phần tôi hiểu lầm về DynamoDB. Các thuộc tính duy nhất nên được xác định ở đây là những thuộc tính sẽ được sử dụng làm khóa. Do đó, việc thay đổi mảng AttributeDefinitions thành mảng sau đã giải quyết được vấn đề:

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

3
Điều này cũng được chụp ở đây
Benny Bauer

10
Sai lầm ở đây là cố gắng xác định lược đồ của bảng (tức là 'các cột' của bảng trong DB quan hệ nói). Trong DynamoDb, bạn chỉ xác định khóa để lấy các giá trị của mục trong bảng, chứ không phải lược đồ của chính mục đó. DynamoDb không có phạm vi và các giá trị được lưu trữ dựa trên mỗi khóa được xác định khi mục được thêm vào. Không có hình dạng dữ liệu để xác định.
Zodman

@Zodman Cảm ơn rất nhiều bình luận của bạn đặc biệt phần này: "DynamoDb là schemaless, và các giá trị được lưu trữ với nhau quan trọng được định nghĩa khi mục được thêm Không có hình dạng dữ liệu để xác định."
Hamed Minaee

3
Ôi trời, tôi đã bị mắc kẹt với vấn đề này giống hệt nhau trong nhiều thời đại. Cảm ơn.
blueprintchris

3
Không phải mọi anh hùng đều mặc áo choàng ... Cảm ơn bạn đã nắm bắt được!
Marcello Grechi Lins
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.