CloudFormation, DynamoDB oluşturma JSON'umun geçersiz olduğu konusunda ısrar ediyor .. ancak nasıl olduğunu göremiyorum


82

Troposphere tarafından oluşturulan JSON'ımın (DynamoDB kısmı):

"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 yukarı dönmeye çalışırken bana bu hata verir: Property AttributeDefinitions is inconsistent with the KeySchema of the table and the secondary indexes.

Ama ... öyle mi? Ben belirterek ediyorum audit_idyalnız bir anahtar olarak ve kesinlikle AttributeDefinitions liste içinde mevcuttur. Ben CF'de (ve bu konuda Dynamo'da) çok yeniyim, bu yüzden son derece bariz bir şeyi gözden kaçırıyor olabilirim, ancak şu anda bana görünmüyor.

Etrafta dolaştım ve bu hatanın yalnızca bir sözünü buldum ve bu, CF'nin kendisi yerine geliştirici ve CF arasındaki bir katmanla ilgiliydi.

Şablonumda neyin yanlış olduğunu kimse söyleyebilir mi?


Daha fazla bilgi ile bunu daha hızlı yakalamaya yardımcı olacak CloudFormation Linter kuralı: github.com/aws-cloudformation/cfn-python-lint/pull/1284
Pat Myron

Yanıtlar:


178

Bu, DynamoDB ile ilgili olarak benim açımdan bir yanlış anlaşılmaydı. Sadece burada tanımlanmalıdır nitelikleri tuşları olarak kullanılacaktır olanlardır. Böylece, AttributeDefinitions dizisini aşağıdaki şekilde değiştirmek sorunu çözdü:

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

3
Bu da burada
Benny Bauer

10
Buradaki hata, tablonun şemasını tanımlamaya çalışmaktı (yani ilişkisel DB konuşmasındaki tablonun 'sütunları'). DynamoDb'de, öğenin kendisinin şemasını değil, yalnızca tablodaki öğenin değerlerinin alınacağı anahtarı tanımlarsınız. DynamoDb şemasızdır ve her anahtara karşı depolanan değerler, öğe eklendiğinde tanımlanır. Tanımlanacak veri şekli yok.
Zodman

@Zodman Bu bölüme özellikle yorumunuz için çok teşekkür ederiz: "DynamoDb şemasızdır ve her anahtara karşı depolanan değerler öğe eklendiğinde tanımlanır. Tanımlanacak veri şekli yoktur"
Hamed Minaee

3
Ah adamım, ben de yıllardır aynı soruna takılı kaldım. Teşekkürler.
blueprintchris

3
Her kahraman pelerin takmaz ... Yakaladığınız için teşekkürler!
Marcello Grechi Lins
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.