मैं CloudFormation टेम्प्लेट को जल्दी और प्रभावी रूप से कैसे डिबग कर सकता हूं?


83

CloudFormation एक शक्तिशाली AWS पेशकश है जो AWS संसाधन स्टैक के प्रोग्रामेटिक निर्माण की अनुमति देता है, जैसे कि एक एप्लिकेशन का वेब टीयर, एक उच्च प्रदर्शन कंप्यूटिंग क्लस्टर, या एक पूरे एपीआई स्टैक, एक एकल API कॉल के साथ। यह बेहद शक्तिशाली है। इसका उपयोग करना निश्चित रूप से एक अच्छा एडब्ल्यूएस अभ्यास माना जाता है, खासकर जब इसे शेफ, पपेट, या क्लाउड-इन के साथ जोड़ा जाता है यह डिबगिंग मुझे वाइस ड्राइव करता है।

एक उत्पादन उदाहरण लें: स्टॉक मेनगोड क्लस्टर टेम्पलेट मेरे लिए काम नहीं करेंगे। मैं विशेष रूप से पता नहीं क्यों। मुझे यकीन है कि यह कुछ सरल है क्योंकि यह लगभग हमेशा होता है। मेरी समस्या यह नहीं है कि मैं यह पता नहीं लगा सकता कि क्या गलत है। यह ऐसा है कि इसे विफल होने में 20 से 30 मिनट के बीच का समय लगता है, और फिर हटाने के लिए एक और तीन या चार मिनट लगते हैं, यह मानते हुए कि यह संसाधनों को ठीक से हटा देता है।

मैं क्या खो रहा हूँ? मैं --disable-rollbackझंडे के बारे में जानता हूं और इसका इस्तेमाल ऑक्सीजन की तरह करता हूं । मैंने बाहर निकलने के संदेशों को लपेटना cfn-signalऔर उन्हें डूबते जहाज की तरह गिट्टी की तरह फेंकना सीखा । मैं टेम्पलेट डिबगिंग प्रक्रिया को कैसे तेज कर सकता हूं, या क्या मैं हमेशा अपनी गलतियों को नोट करने के आधे घंटे बाद अटक जाता हूं, क्योंकि मैं उन्हें बनाता हूं?


3
JSON में भी टाइपोस को कभी-कभी बिल्ड प्रक्रिया में 10+ मिनट तक पकड़ा नहीं जाता है क्योंकि यह ध्यान नहीं देता है कि किसी विशेष संसाधन प्रकार का कोई विशेष नाम नहीं है जब तक कि वह उस संसाधन को शुरू करने की कोशिश नहीं करता है।
एरिक हैमंड

1
किसी विशेष क्रम में मेरा पसंदीदा: जब आप संसाधन संदर्भों को बदलते हैं और लगभग-लेकिन-नहीं-काफी-समान विशेषताओं का सामना करते हैं, तो उपयोगकर्ता स्क्रिप्ट घोषणा के अंदर एक बच गए उद्धरण चिह्न को जोड़ना भूल जाते हैं, और वॉल्यूमआटैचमेंट के साथ कुछ भी करना है, क्योंकि वे कभी-कभी विफल होते हैं। कोई कारण नहीं।
क्रिस्टोफर

1
+1 "ऑटो-रोलबैक को अक्षम करने" का उल्लेख करने के लिए - यह विकल्प के लिए बेहतर त्रुटि संदेश प्राप्त करने के लिए बहुत बढ़िया था
izikandrw

1
मैंने पाया है कि पॉलिसी सेगमेंट में गलतियों से बकेटपॉलिस जैसी चीजें पैदा हो जाएंगी, जो कि क्रिएट स्टेज में हमेशा के लिए अटक जाती हैं - अगर कुछ क्रिएट में फंस गया है।
एरिक नॉर्ड

जवाबों:


46

aws cloudformation validate-templateAWS CLI टूल में कमांड का उपयोग करें । यह केवल यह पुष्टि करता है कि आपका टेम्पलेट JSON या YAML मान्य है, न कि क्या आपकी कुंजी और मान सही हैं (उदाहरण के लिए कुंजियों में टाइपोस के लिए जांच नहीं)



7
वैसे यह aws cloudformation validate-templateनए AWS CLI टूल्स में है।
क्रिस्टोफर

8
2017+ में इस प्रश्न पर आने वाले किसी भी व्यक्ति के लिए, यह अब है aws cloudformation validate-template, और यह केवल यह पुष्टि करता है कि आपका टेम्पलेट वैध JSON या YAML है, न कि क्या आपकी कुंजी और मान सही हैं (उदाहरण के लिए कुंजियों में टाइपोस के लिए जाँच नहीं है)।
डेनियल कैट्स

1
किसी कारण से यह लाइन-लेंथ को नजरअंदाज करता है, जैसे Property validation failure: [Length of value {XYZ} for property {/RepositoryDescription} is greater than maximum allowed length {100}]validate-templateकमांड के अनुसार यह कोई समस्या नहीं थी, लेकिन UI इस त्रुटि को लौटाता है।
0:30

2
यदि यह उपकरण केवल फ़ाइल प्रारूप सत्यापन करता है, तो यह नहीं है; jsonlint या yamllint पर्याप्त पर्याप्त है? साथ ही इस टूल में 51,200 बाइट्स के फ़ाइल साइज़ की सीमा है।
शिव सेंथिल

23

एक और विकल्प, एक साल बाद, इन टेम्प्लेट्स को थर्ड पार्टी लाइब्रेरी, जैसे ट्रोफोस्फीयर को एब्सट्रैक्ट करना है । वह लाइब्रेरी आपके लिए JSON पेलोड का निर्माण करती है, और रास्ते भर सत्यापन भी करती है। यह भी "वाह एक 1000-लाइन JSON फ़ाइल सुनिश्चित करें कि यह दुख की बात है" समस्या का प्रबंधन करती है।


3
"वाह एक 1000-लाइन JSON फाइल सुनिश्चित करना दुखद है" - निश्चित रूप से यही कारण है कि नेस्टेड स्टैक बनाया गया था? ;-) हालाँकि मैं कॉनुर करता हूँ - ट्रोपोस्फीयर aws-some है!
YFP

11

मैं टेम्प्लेट डीबगिंग प्रक्रिया को कैसे तेज बना सकता हूं, या क्या मैं हमेशा अपनी गलतियों को नोट करने के आधे घंटे बाद उन्हें अटका देता हूं?

यहां कुछ बेहतरीन अभ्यास सुझाव दिए गए हैं, जो विशेष रूप से जटिल क्लाउडफ़ॉर्मेशन-टेम्प्लेट विकास की पुनरावृत्ति गति में सुधार पर ध्यान केंद्रित कर रहे हैं:

टेम्प्लेट और स्टैक अपडेट को मान्य करने के लिए CloudFormation टूल का उपयोग करें

AWS ने पहले ही अपने सर्वश्रेष्ठ आचरण दस्तावेज़ में इनकी रूपरेखा तैयार कर ली है, इसलिए मैं इन्हें नहीं दोहराऊंगा:

इस चरण का बिंदु वास्तव में स्टैक निर्माण / अद्यतन करने से पहले स्पष्ट वाक्यविन्यास या तार्किक त्रुटियों को पकड़ना है।

अलगाव में परीक्षण संसाधन

किसी जटिल स्टैक में किसी भी व्यक्तिगत CloudFormation संसाधन का उपयोग करने से पहले, सुनिश्चित करें कि आप उस संसाधन के निर्माण / अद्यतन / हटाए जाने वाले व्यवहार की पूरी सीमा को अच्छी तरह से समझते हैं, जिसमें उपयोग और विशिष्ट स्टार्टअप / अशांति के समय की कोई सीमा शामिल है, छोटे, स्टैंडअलोन स्टैक में उनके व्यवहार का परीक्षण करके। प्रथम।

  • यदि आप किसी तृतीय-पक्ष कस्टम संसाधन का विकास या उपयोग कर रहे हैं, तो भाषा प्लेटफ़ॉर्म के लिए उपयुक्त पुस्तकालयों का उपयोग करके यूनिट परीक्षण लिखें, यह सुनिश्चित करने के लिए कि आवेदन तर्क सभी उपयोग-मामलों में अपेक्षित है।
  • ज्ञात रहे कि अंतर्निहित API कॉल के व्यवहार के आधार पर किसी व्यक्ति संसाधन के निर्माण / अद्यतन / हटाने के लिए समय की मात्रा संसाधन प्रकारों के बीच व्यापक रूप से भिन्न हो सकती है। उदाहरण के लिए, सेकंड में अपडेट करने / हटाने / बनाने / हटाने के लिए एक जटिल AWS::CloudFront::Distributionसंसाधन को कभी-कभी 30-60 मिनट लग सकते हैं AWS::EC2::SecurityGroup
  • व्यक्तिगत संसाधन में उनके कार्यान्वयन में बग / मुद्दे / सीमाएँ हो सकती हैं, जो कि बहुत बड़े स्टैक के बजाय अलगाव में परीक्षण के लिए डिबग करना और विकसित करना बहुत आसान है। अपनी व्यक्तिगत AWS खाता सेटिंग, या उस क्षेत्र के आधार पर सेवाओं की उपलब्धता, जिसके भीतर आप अपना स्टैक बनाते हैं, के आधार पर AWS सेवा सीमा जैसी सीमाओं का ध्यान रखें ।

छोटे वेतन वृद्धि में जटिल ढेर बनाएँ

स्टैक निर्माण / अद्यतन करते समय, किसी भी एक संसाधन में विफलता, स्टैक को संसाधन परिवर्तनों के पूरे सेट को रोलबैक करने का कारण बनेगी, जो अन्य सफलतापूर्वक बनाए गए संसाधनों को अनावश्यक रूप से नष्ट कर सकता है और एक लंबे समय के साथ एक जटिल स्टैक का निर्माण करते समय बहुत लंबा समय ले सकता है। संबद्ध संसाधनों का निर्भरता-ग्राफ।

इसका समाधान यह है कि एक बार में संसाधन एक (या कुछ) को जोड़ते हुए अपने स्टैक को छोटे अपडेट बैचों में बढ़ाएँ। इस तरह, अगर / जब एक संसाधन निर्माण / अद्यतन में विफलता होती है, तो रोलबैक आपके पूरे स्टैक के संसाधनों को नष्ट करने का कारण नहीं बनता है, बस नवीनतम अपडेट में संसाधनों का सेट बदल गया है।

स्टैक अपडेट की प्रगति की निगरानी करें

एक निर्माण / अद्यतन किया जाता है, जबकि स्टैक की घटनाओं को देखकर अपने स्टैक अपडेट की प्रगति की निगरानी करना सुनिश्चित करें । यह व्यक्तिगत संसाधनों के साथ आगे के मुद्दों को डीबग करने के लिए शुरुआती बिंदु होगा।


CloudFront के बारे में और इसे कितना समय लगता है, क्या आप वैसे भी जानते हैं कि स्टैक को पूर्ण स्थिति में होना चाहिए, बिना प्रतीक्षा किए, मैं आउटपुट प्राप्त करना चाहता हूं, लेकिन मेरे मामले में वितरण के लिए प्रतीक्षा करने की आवश्यकता नहीं है
mcfedrio

9

क्या आपने AWS CloudFormation टेम्प्लेट एडिटर को देखा है जो ग्रहण के लिए AWS टूलकिट में शामिल है ? इसमें वाक्य रचना हाइलाइटिंग, स्टेटमेंट पूरा करने और AWS CloudFormation पर तैनाती है।


7
"एडब्ल्यूएस टूलकिट फॉर विजुअल स्टूडियो" मेरे लिए अपरिहार्य रहा है।
एड नॉरिस

5

पार्टी के लिए देर से लेकिन मैं यह भी जोड़ सकता हूं कि आपके संपादक को कॉन्फ़िगर करने और सीखने में थोड़ा समय बिताना सार्थक है। मुझे पता है कि एक उत्तर के रूप में हंसमुख रूप से बुनियादी लगता है लेकिन इसे आज़माएं।

मेरे मामले में, विम के साथ, मैंने बहुत अच्छा प्रदर्शन किया एक बार जब मैंने जसन सिंटेक्स प्लगइन्स को स्थापित करने में कुछ समय लिया, और यह भी (अंत में) बड़ी सीएफ फ़ाइलों को आसानी से नेविगेट करने के लिए तह तकनीकों को समझा। मेरा अब टाइपोस (अल्पविराम जहां उन्हें नहीं होना चाहिए) का सुझाव देता है और रंग को उजागर करने से स्पष्ट दृश्य सुराग देने में बहुत समय लगता है।

यह वाक्यविन्यास त्रुटियों को कम करने में मदद कर सकता है, लेकिन इन-टेम्पलेट तार्किक त्रुटियां अन्य उपकरणों द्वारा बेहतर तय की जाती हैं। उम्मीद है कि एक दिन सीएफ पर एक "पूर्वावलोकन" मोड होगा।


1
हंसी का सुझाव बिल्कुल नहीं। मुझे यकीन नहीं है कि मैं सिंटैक्स हाइलाइटिंग के बिना कोड कर सकता हूं।
क्रिस्टोफर

2
CFN के लिए एक पूर्वावलोकन है जो आपके द्वारा बनाए जाने वाले सभी संसाधनों को दिखाता है, और यह आपको यह भी बताएगा कि आपके स्टैक का कितना खर्च होगा। मैं जावा एपीआई का उपयोग कर रहा हूं, इसलिए मुझे यकीन नहीं है कि यह सीएलआई पर उपलब्ध है, लेकिन इसे आज़माएं: लिंक
iGili

5

एडब्ल्यूएस CloudFormation लिंटर अतिरिक्त स्थिर विश्लेषण से परे प्रदान करता हैaws cloudformation validate-template

यह आपको सूचित करेगा कि कुछ क्षेत्रों में कौन से संसाधन प्रकार और उदाहरण प्रकार अनुपलब्ध हैं, अनुमत मानों के विरुद्ध संपत्ति मानों को मान्य करें, परिपत्र संसाधन निर्भरताएं, वाक्यविन्यास त्रुटियां, टेम्पलेट सीमाएं, और बहुत कुछ पकड़ें

CLI के अलावा, लिंटर को चलाने के लिए याद रखने वाले सबसे लोकप्रिय तंत्रों में से एक विजुअल स्टूडियो कोड एक्सटेंशन जैसा एक संपादक प्लगइन स्थापित करना है जो हर फ़ाइल सेव पर चलता है

पूर्व-प्रतिबद्ध गिट हुक जैसे अन्य तंत्र यहां वर्णित हैं

Visual Studio कोड एक्सटेंशन उदाहरण स्क्रीनशॉट


4

JetBrains IDEs (IntelliJ IDEA PhpStorm WebStorm PyCharm RubyMine AppCode CLion Gogland DataGrip Rider Android Studio) के लिए, AWS CloudFormation प्लगइन है जो JSON और YAML CFN टेम्प्लेट की गहरी जाँच करता है


2

यदि आप EC2 मशीनों के साथ काम कर रहे हैं, तो मैं आपको EC2 मशीन में प्रवेश करने और बूट.लॉग फ़ाइल (/ आरएचईएल 6 / सेंटोस में बूट / क्लॉग / बीओटी.लॉग) की सिफारिश करूंगा। यह फ़ाइल आपकी सभी शेल गतिविधियों (गतिविधियाँ: स्थापना, फ़ाइल डाउनलोड करना, फ़ाइलों की प्रतिलिपि बनाना आदि) से अपडेट हो जाती है।

इसके अलावा, अपने JSON का TREE प्रतिनिधित्व प्राप्त करने के लिए http://www.jsoneditoronline.org/ जैसे संपादकों का उपयोग करें। यह आपको JSON तत्वों के क्रम की जांच करने में मदद करता है।

और जब आप फ़ाइलों को अपडेट करते हैं तो हमेशा http://www.git-tower.com/blog/diff-tools-mac/ या एक वास्तविक संस्करण नियंत्रण प्रणाली जैसे टूल का उपयोग करते हैं ताकि आप यह सुनिश्चित कर सकें कि आपने गलती से कुछ नहीं बदला है जो आपकी स्क्रिप्ट को तोड़ सकता है।



1

इस पिछले दिसंबर में क्लाउडफॉर्मेशन में जोड़ा गया एक नया फीचर अतिरिक्त पैरामीटर प्रकारों का जोड़ था । ये नए प्रकार आपके टेम्प्लेट को मजबूत डेटा जाँच करने की अनुमति देते हैं, और संसाधनों को बनाने और नेस्टेड विरूपण स्टैक को "विफल-तेज़" भी कर सकते हैं। आपके पास अच्छे मानव-पठनीय कस्टम त्रुटि संदेश प्रदान करने की क्षमता है जब नए कॉन्ट्राट्रिंडेसक्रिप्शन विशेषता का उपयोग करके अमान्य मान पारित किए जाते हैं ।

विभिन्न प्रकार के VPC संसाधनों के साथ काम करते समय नए प्रकार विशेष रूप से सहायक होते हैं। आप यह सुनिश्चित कर सकते हैं कि आपके टेम्प्लेट के लिए पैरामीटर सही प्रकार हैं, और एक सूची बनाम एक सूची की अपेक्षा के बारे में स्पष्ट हैं।

उदाहरण के लिए:

"Parameters" : {
  "SingleGroup": { "Type": "AWS::EC2::SecurityGroup::Id", ...},
  "GroupList": {"Type": "List<AWS::EC2::SecurityGroup::Id>", ...}
}

1

कृपया https://pypi.org/project/cloudformation-validator/ पर मेरे क्लाउड सत्यापन सत्यापनकर्ता की जांच करें

यह स्कीमा को मान्य करेगा और फिर नियमों की सूची को फिर से मान्य करेगा, और कस्टम नियमों के लिए अनुमति देगा। मैं तैनाती उपकरणों के साथ आसान एकीकरण की भी अनुमति देता हूं।


0

आप यहाँ Amazon से उपलब्ध CloudFormation Designer का उपयोग भी कर सकते हैं: https://console.aws.amazon.com/cloudformation/designer/home?region=us-east-1

बस अपने टेम्पलेट (JSON) को "टेम्पलेट" फलक पर पेस्ट करें और फिर अपने टेम्पलेट को मान्य करने के लिए टिक चिन्ह पर क्लिक करें। कोई भी त्रुटि "त्रुटि" फलक में दिखाई देगी।

उम्मीद है की यह मदद करेगा।

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