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 आपके कई परिदृश्यों में काम आए।



