लॉन्चर उत्पाद Bitnami दस्तावेज़imaxe CLI ब्लॉग संपर्क

cloud-init और user-data: बूट पर अपने इंस्टेंस पेशेवर की तरह कॉन्फ़िगर करें

गोल्डन AMI स्थिर चीज़ें संभालती है; cloud-init बदलने वाली। user-data और cloud-init में महारत ही आपको एक ही इमेज को हज़ार परिदृश्यों में बिना दोबारा पकाए इस्तेमाल करने देती है। यह रही व्यावहारिक गाइड।

टर्मिनल में सिस्टम अपडेट दिखाता लैपटॉप
टर्मिनल में सिस्टम अपडेट दिखाता लैपटॉप फ़ोटो: Solijon Solayev · CC BY-SA 4.0 · Wikimedia Commons

cloud-init क्लाउड इंस्टेंस को उनके पहले बूट पर आरंभ करने का वास्तविक मानक है। जब आप कोई इंस्टेंस लॉन्च कर उसे user-data स्क्रिप्ट देते हैं, तो cloud-init ही उसे पढ़ता और चलाता है: उपयोगकर्ता बनाता है, फ़ाइलें लिखता है, पैकेज इंस्टॉल करता है, डिस्क माउंट करता है या सेवाएँ शुरू करता है।

आदर्श संयोजन साफ़ है: गोल्डन AMI में वह रहता है जो नहीं बदलता —ऑपरेटिंग सिस्टम, रनटाइम, हार्डनिंग— और user-data वह लाता है जो परिवेश या इंस्टेंस के हिसाब से बदलता है: कॉन्फ़िगरेशन, इंजेक्ट किए गए सीक्रेट, भूमिका। इस तरह एक ही इमेज कई संदर्भों में काम आती है।

user-data लिखने के दो तरीक़े

user-data कई प्रारूप स्वीकारता है; सबसे आम दो हैं शेल स्क्रिप्ट और cloud-config।

  • शेल स्क्रिप्ट: #!/bin/bash से शुरू होती है। छोटे-फुर्तीले कामों के लिए सीधी और सरल।
  • cloud-config: #cloud-config से शुरू होता है और घोषणात्मक YAML इस्तेमाल करता है। उपयोगकर्ता, पैकेज, फ़ाइल और कमांड कॉन्फ़िगर करने के लिए ज़्यादा साफ़, पठनीय और आइडेम्पोटेंट।

cloud-config का उदाहरण

एक सामान्य #cloud-config में packages: (इंस्टॉल करने के पैकेज), write_files: (कॉन्फ़िगरेशन फ़ाइलें), runcmd: (अंतिम कमांड) और users: (खाते और कुंजियाँ) जैसे खंड होते हैं। घोषणात्मक होने के कारण यह लंबी स्क्रिप्ट की तुलना में समीक्षा और रखरखाव में आसान है।

अच्छे तौर-तरीक़े

  • user-data छोटा रखें: यदि यह बहुत बढ़ जाए, तो शायद वह चीज़ AMI में बेक होनी चाहिए।
  • आइडेम्पोटेंस: कमांड ऐसे बनाएँ कि दोबारा चलाने पर कुछ न बिगड़े।
  • user-data में सीक्रेट कभी साफ़ पाठ में न रखें: यह इंस्टेंस मेटाडेटा से पढ़ा जा सकता है। उन्हें रनटाइम पर Secrets Manager, Parameter Store या Vault से इंजेक्ट करें।
  • मेटाडेटा तक पहुँच सुरक्षित करें: SSRF के ज़रिए क्रेडेंशियल चोरी घटाने के लिए IMDSv2 इस्तेमाल करें।
  • लॉग रखें और डिबग करें: कुछ बिगड़े तो cloud-init के लॉग (/var/log/cloud-init-output.log) आपके सबसे अच्छे दोस्त हैं।

बेकिंग या बूटिंग: क्या कहाँ रखें

AMI में (बेकिंग)user-data में (बूटिंग)
ऑपरेटिंग सिस्टम और पैचपरिवेश-विशिष्ट कॉन्फ़िगरेशन
रनटाइम, एजेंट और हार्डनिंगप्रति इंस्टेंस चर और पैरामीटर
स्थिर और भारी सॉफ़्टवेयरक्लस्टर में पंजीकरण और डिस्कवरी
जो कुछ भी इंस्टॉल होने में समय लेता हैरनटाइम पर सीक्रेट इंजेक्शन

सुनहरा नियम: स्थिर और धीमा बेक होता है; परिवर्तनशील और हल्का बूट पर जाता है।

घंटों बर्बाद कराने वाली आम ग़लतियाँ

  • जो इमेज में होना चाहिए उसे user-data में डालना, जिससे बूट धीमे और नाज़ुक हो जाते हैं।
  • मेटाडेटा में सीक्रेट साफ़ पाठ में उजागर करना।
  • यह मान लेना कि user-data हर बूट पर दोबारा चलता है: डिफ़ॉल्ट रूप से वह सिर्फ़ पहले बूट पर चलता है।
  • जब इंस्टेंस «वैसा नहीं करता जैसा करना चाहिए» तो cloud-init के लॉग न देखना।

अक्सर पूछे जाने वाले सवाल

क्या user-data हर रीबूट पर चलता है?

डिफ़ॉल्ट रूप से केवल पहले बूट पर। cloud-init को कुछ हिस्सों के लिए हर बूट पर चलाने हेतु कॉन्फ़िगर किया जा सकता है, पर यह सोच-समझकर और आइडेम्पोटेंट ढंग से करना चाहिए।

क्या user-data में पासवर्ड भेजना सुरक्षित है?

नहीं। user-data इंस्टेंस मेटाडेटा से पढ़ा जा सकता है। सीक्रेट मैनेजर इस्तेमाल कर उन्हें रनटाइम पर इंजेक्ट करें, और मेटाडेटा को IMDSv2 से सुरक्षित रखें।

क्या cloud-init सिर्फ़ AWS पर चलता है?

नहीं। cloud-init मल्टी-प्लेटफ़ॉर्म है और AWS, Azure, GCP व अन्य पर चलता है, जो इसे बूट के पोर्टेबल स्वचालन के लिए आदर्श बनाता है।

imaxe.cloud में हम ऐसी इमेज बनाते हैं जो cloud-init के साथ मिलकर काम करने के लिए सोची गई हैं, ताकि एक ही AMI आपके कई परिदृश्यों में काम आए।

cloud-inituser-dataec2बूटस्ट्रैपिंगimdsv2
IM

imaxe टीम

हम सूची की AMIs बनाते और अनुरक्षित करते हैं। जब हम कोई संस्करण प्रकाशित करते हैं, तो हम इसे किसी से भी पहले उत्पादन में उपयोग करते हैं।

कैटलॉग से

इस लेख से संबंधित AMI

पढ़ना जारी रखें

संबंधित लेख