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 বহু পরিস্থিতিতে আপনার কাজে লাগে।



