CloudFormation ने जोर दिया कि मेरी डायनेमोडी निर्माण JSON अमान्य है .. लेकिन मैं यह नहीं देख सकता कि कैसे


82

यहाँ (डायनमोडीबी भाग) मेरा ट्रोपोस्फ़ेयर-जनरेट किया गया JSON:

"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 सूची में मौजूद है। मैं सीएफ (और डायनमो, उस मामले के लिए) के लिए बहुत नया हूं, इसलिए मुझे अच्छी तरह से कुछ स्पष्ट याद आ रहा है, लेकिन यह मेरे लिए फिलहाल स्पष्ट नहीं है।

मैंने चारों ओर गुगली की है और केवल इस त्रुटि का एक उल्लेख पाया है, और यह सीएफ के बजाय डेवलपर और सीएफ के बीच एक परत के साथ करना अधिक था।

क्या कोई बता सकता है कि मेरे खाके में क्या खराबी है?


CloudFormation Linter नियम को अधिक जानकारी के साथ इस तेज को पकड़ने में मदद करने के लिए: github.com/aws-cloudformation/cfn-python-lint/pull/1284
Pat Myron

जवाबों:


178

यह डायनेमोबीडी के बारे में मेरी ओर से गलतफहमी के कारण था। यहां जिन एकमात्र विशेषताओं को परिभाषित किया जाना चाहिए, वे हैं जिनका उपयोग कुंजी के रूप में किया जाएगा। इस प्रकार, निम्नलिखित में AttributeDefinitions एरे को बदलने से समस्या हल हो गई:

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


10
यहाँ गलती तालिका के स्कीमा को परिभाषित करने की कोशिश कर रही थी (यानी संबंधपरक डीबी बोल में तालिका के 'कॉलम')। डायनेमोब में आप केवल उस कुंजी को परिभाषित करते हैं जिसके साथ तालिका में आइटम के मूल्यों को पुनः प्राप्त करना है, न कि आइटम का स्कीमा। डायनॉम्बीडी स्कीमालेस है, और आइटम को जोड़ने पर प्रत्येक कुंजी के खिलाफ संग्रहीत मान परिभाषित किए जाते हैं। परिभाषित करने के लिए कोई डेटा आकृति नहीं है।
राशि

@Zodman आपकी टिप्पणी के लिए विशेष रूप से इस भाग के लिए बहुत बहुत धन्यवाद: "DynamoDb योजनाबद्ध है, और आइटम को जोड़ने पर प्रत्येक कुंजी के खिलाफ संग्रहीत मूल्यों को परिभाषित किया गया है। परिभाषित करने के लिए कोई डेटा आकार नहीं है"
Hamed Minaee

3
ओह यार, मैं उम्र के लिए इसी सटीक समस्या पर फंस गया था। धन्यवाद।
ब्लूप्रिंटक्रिस

3
हर नायक टोपी नहीं पहनता ... पकड़ने के लिए धन्यवाद!
मार्सेलो ग्रीची ने
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.