Terraform 0.11 - Resource Graph

संसाधन ग्राफ




terraform

संसाधन ग्राफ

Terraform, Terraform कॉन्फ़िगरेशन से एक निर्भरता ग्राफ़ बनाता है, और योजनाओं, ताज़ा स्थिति और अधिक उत्पन्न करने के लिए इस ग्राफ़ पर चलता है। यह पृष्ठ इस आलेख में इस बात का ब्योरा देता है कि इस ग्राफ में क्या हैं, किस प्रकार के नोड हैं और ग्राफ़ के किनारों का निर्धारण कैसे किया जाता है।

ग्राफ सिद्धांत पर कुछ पृष्ठभूमि के लिए, और टेराफॉर्म इसे कैसे लागू करता है, इसका एक सारांश, कोड के रूप में इन्फ्रास्ट्रक्चर के लिए ग्राफ थ्योरी लागू करने वाली प्रस्तुति HashiCorp 2016 देखें। यह प्रस्तुति कुछ समान विचारों को निम्नलिखित मार्गदर्शिका में भी शामिल करती है।

ग्राफ नोड्स

केवल मुट्ठी भर नोड प्रकार होते हैं जो ग्राफ़ के भीतर मौजूद हो सकते हैं। हम निर्धारित करने और निर्माण करने से पहले उन्हें कवर करेंगे:

  • संसाधन नोड - एकल संसाधन का प्रतिनिधित्व करता है। यदि आपके पास count मेटापैरमीटर सेट है, तो प्रत्येक काउंट के लिए एक संसाधन नोड होगा। परिवर्तन के तहत संसाधन का विन्यास, अंतर, स्थिति आदि इस नोड से जुड़ा हुआ है।

  • प्रदाता कॉन्फ़िगरेशन नोड - किसी प्रदाता को पूरी तरह से कॉन्फ़िगर करने के लिए समय का प्रतिनिधित्व करता है। यह तब होता है जब प्रदाता कॉन्फ़िगरेशन ब्लॉक किसी प्रदाता को दिया जाता है, जैसे कि AWS सुरक्षा क्रेडेंशियल।

  • संसाधन मेटा-नोड - संसाधनों के एक समूह का प्रतिनिधित्व करता है, लेकिन अपने दम पर किसी भी कार्रवाई का प्रतिनिधित्व नहीं करता है। यह निर्भरता पर सुविधा के लिए किया जाता है और एक प्रिटियर ग्राफ बनाता है। यह नोड केवल उन संसाधनों के लिए मौजूद है जिनके पास 1 से अधिक की count पैरामीटर है।

terraform graph साथ कॉन्फ़िगरेशन की कल्पना करते समय, आप इन सभी नोड्स को देख सकते हैं।

ग्राफ का निर्माण

ग्राफ का निर्माण क्रमबद्ध चरणों की एक श्रृंखला में किया जाता है:

  1. कॉन्फ़िगरेशन के आधार पर संसाधन नोड जोड़े जाते हैं। यदि कोई अंतर (योजना) या स्थिति मौजूद है, तो मेटा-डेटा प्रत्येक संसाधन नोड से जुड़ा हुआ है।

  2. यदि उन्हें कोई परिभाषित है, तो संसाधन को मैपर्स पर मैप किया जाता है। सभी संसाधन नोड बनाए जाने के बाद ऐसा किया जाना चाहिए ताकि एक ही प्रावधान प्रकार के साथ संसाधन प्रावधान कार्यान्वयन को साझा कर सकें।

  3. संसाधनों के बीच किनारों को बनाने के लिए depends_on मेटा-पैरामीटर से स्पष्ट निर्भरता का उपयोग किया जाता है।

  4. यदि कोई राज्य मौजूद है, तो किसी भी "अनाथ" संसाधनों को ग्राफ में जोड़ा जाता है। अनाथ संसाधन किसी भी संसाधन हैं जो अब कॉन्फ़िगरेशन में मौजूद नहीं हैं, लेकिन राज्य फ़ाइल में मौजूद हैं। अनाथों के पास कभी भी कोई कॉन्फ़िगरेशन नहीं होता है, क्योंकि राज्य फ़ाइल कॉन्फ़िगरेशन को संग्रहीत नहीं करता है।

  5. प्रदाताओं को संसाधन मैप किए जाते हैं। प्रदाता कॉन्फ़िगरेशन नोड्स इन प्रदाताओं के लिए बनाए जाते हैं, और किनारों को ऐसे बनाया जाता है कि संसाधन उनके संबंधित प्रदाता को कॉन्फ़िगर किए जाने पर निर्भर करते हैं।

  6. निर्भरता निर्धारित करने के लिए संसाधन और प्रदाता कॉन्फ़िगरेशन में इंटरपोलेशन को पार्स किया जाता है। संसाधन विशेषताओं के संदर्भ को संसाधन से निर्भरता के साथ संसाधन में निर्भरता में बदल दिया जाता है।

  7. एक रूट नोड बनाएँ। रूट नोड सभी संसाधनों को इंगित करता है और बनाया जाता है, इसलिए निर्भरता ग्राफ के लिए एक ही रूट है। ग्राफ को ट्रेस करते समय, रूट नोड को अनदेखा किया जाता है।

  8. यदि कोई अंतर मौजूद है, तो सभी संसाधन नोड्स को पार करें और उन संसाधनों को ढूंढें जो नष्ट हो रहे हैं। इन संसाधन नोड्स को दो में विभाजित किया जाता है: एक नोड जो संसाधन को नष्ट कर देता है और दूसरा जो संसाधन बनाता है (यदि इसे पुनः बनाया जा रहा है)। नोड्स को विभाजित करने का कारण होना चाहिए क्योंकि विध्वंस क्रम अक्सर क्रिएट ऑर्डर से अलग होता है, और इसलिए उन्हें एकल ग्राफ़ नोड द्वारा प्रस्तुत नहीं किया जा सकता है।

  9. ग्राफ़ को मान्य करें कोई चक्र नहीं है और इसकी एक भी जड़ नहीं है।

ग्राफ़ चलना

ग्राफ पर चलने के लिए, एक मानक गहराई-पहला ट्रैवर्सल किया जाता है। ग्राफ चलना समानांतर में किया जाता है: जैसे ही इसकी सभी निर्भरताएं चलती हैं, एक नोड चला जाता है।

टेराफॉर्म चलाने वाली मशीन के संसाधनों को भारी करने से कई समवर्ती संचालन को रोकने के लिए एक समानता का उपयोग करके समानता की मात्रा सीमित है। डिफ़ॉल्ट रूप से, ग्राफ़ में 10 नोड तक समवर्ती रूप से संसाधित किया जाएगा। यह संख्या plan पर -parallelism ध्वज का उपयोग करके सेट की जा सकती है, apply destroy apply , और आदेशों destroy

सेटिंग -parallelism को एक उन्नत ऑपरेशन माना जाता है और टेराफॉर्म के सामान्य उपयोग के लिए आवश्यक नहीं होना चाहिए। यह कुछ विशेष उपयोग के मामलों में मददगार हो सकता है या टेराफ़ॉर्म मुद्दों को सुलझाने में मदद कर सकता है।

ध्यान दें कि कुछ प्रदाता (AWS, उदाहरण के लिए), अपने संबंधित API क्लाइंट में सुशोभित बैकऑफ / रिट्री को लागू करके निम्न स्तर पर मुद्दों को सीमित करने वाली एपीआई दर को संभालते हैं। इस कारण से, Terraform एपीआई दर सीमाओं को सीधे संबोधित करने के लिए इस parallelism फीचर का उपयोग नहीं करता है।