লঞ্চার পণ্য 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 দল

আমরা ক্যাটালগের AMI তৈরি ও রক্ষণাবেক্ষণ করি। একটি সংস্করণ প্রকাশ করার সময়, আমরা সবার আগে প্রোডাকশনে এটি ব্যবহার করি।

ক্যাটালগ থেকে

এই নিবন্ধের সঙ্গে সম্পর্কিত AMI

পড়া চালিয়ে যান

সম্পর্কিত নিবন্ধ