লাভ:
- IaC ধারণা এবং Terraform এর কার্যচক্র (init, plan, apply, state, মডিউল) বোঝার ক্ষমতা এবং কৃত্রিম বুদ্ধিমত্তা নিরাপদ HCL খসড়া তৈরি করে
- প্রয়োগ করার আগে একটি পরিকল্পনা সহ প্রতিটি পরিবর্তন চেক করার ক্ষমতা এবং অপ্রত্যাশিত ধ্বংস/প্রতিস্থাপন লাইনগুলি ধরার ক্ষমতা
- কোডের বাইরে গোপনীয়তা রাখা, রাষ্ট্রকে নিরাপদে রাখা এবং আইএএম অনুমতি কমানোর নীতিগুলি প্রয়োগ করার ক্ষমতা
অতীতে, একটি সার্ভার সেট আপ করা একটি ক্লাউড প্যানেলের মাধ্যমে ক্লিক করার বিষয় ছিল: একটি ভার্চুয়াল মেশিন তৈরি করুন, নেটওয়ার্ক সেট আপ করুন, নিরাপত্তা নিয়ম যোগ করুন। এই পদ্ধতিটি ধীর, ত্রুটি-প্রবণ, এবং অপূরণীয় ছিল — একই পরিবেশে দ্বিতীয়বার সেট আপ করা প্রায় অসম্ভব ছিল। আজ অবকাঠামো কোড হিসাবে পরিচালিত হয়। IaC (কোড হিসাবে অবকাঠামো) হ'ল ক্লাউড সংস্থানগুলি যেমন সার্ভার, নেটওয়ার্ক এবং ডেটাবেসগুলিকে ম্যানুয়ালি না করে পাঠ্য ফাইলগুলিতে বর্ণনা করার একটি পদ্ধতি। এই ফাইলগুলি ভার্সন কন্ট্রোলে (Git) বসে; আপনি দেখতে পারেন কে কি, কখন, এবং কি পরিবর্তন করেছে; আপনি একই অবকাঠামো অনেকবার সেট আপ করতে পারেন, ঠিক একই ভাবে, একটি কমান্ড দিয়ে।
সবচেয়ে সাধারণ IaC টুল হল Terraform. টেরাফর্ম HCL (হাশিকর্প কনফিগারেশন ল্যাঙ্গুয়েজ — টেরাফর্মের কনফিগারেশন ল্যাঙ্গুয়েজ) নামক একটি পঠনযোগ্য ভাষায় আপনার লেখা সংজ্ঞাগুলি গ্রহণ করে, সেগুলিকে ক্লাউড প্রদানকারীর (AWS, Azure, GCP) API-এ অনুবাদ করে এবং সংস্থান তৈরি করে। এআই এইচসিএলকে খুব ভালোভাবে জানে এবং দ্রুত জটিল ব্লক তৈরি করে। কিন্তু IaC-তে, একটি ভুলের মূল্য বেশি: একটি ভুল সংজ্ঞা একটি সম্পূর্ণ উৎপাদন ডাটাবেসকে মুছে ফেলতে পারে। তাই টেরাফর্মের সুবর্ণ নিয়ম হল প্রতিটি পরিবর্তনকে বাস্তবায়ন করার আগে একটি 'পরিকল্পনা' দিয়ে দেখা।
Terraform এর রানটাইম
টেরাফর্ম তিনটি মৌলিক কমান্ডের সাথে কাজ করে - এআই আউটপুট নিয়ন্ত্রণের জন্য এগুলি একটি পূর্বশর্ত জেনে রাখা:
- `terraform init`: প্রকল্পটি শুরু করে, প্রয়োজনীয় প্রদানকারী প্লাগইন ডাউনলোড করে।
- `টেরাফর্ম প্ল্যান`: বর্তমান পরিস্থিতিকে কাঙ্ক্ষিত পরিস্থিতির সাথে তুলনা করে এবং কী যোগ করতে হবে, কী পরিবর্তন করতে হবে, কী মুছতে হবে তা দেখায়। কিছুই বাস্তবায়ন করে না। এটি সবচেয়ে গুরুত্বপূর্ণ নিরাপত্তা পদক্ষেপ।
- `terraform apply`: প্রকৃতপক্ষে প্ল্যান প্রযোজ্য, সম্পদ তৈরি/পরিবর্তন করে।
উপরন্তু, দুটি ধারণা গুরুত্বপূর্ণ। স্টেট (স্টেট ফাইল): এটি সেই ফাইল যেখানে টেরাফর্ম তার পরিচালনা করা সম্পদের বর্তমান অবস্থা রাখে; এটি সাধারণত একটি দূরবর্তী এবং তালাবদ্ধ গুদামে সংরক্ষণ করা হয় যাতে দুই ব্যক্তি একই সময়ে এটি পরিবর্তন বা ধ্বংস করতে না পারে। মডিউল: পুনরায় ব্যবহারযোগ্য কনফিগারেশন প্যাকেজ; উদাহরণস্বরূপ, আপনি অনেক প্রকল্পে "একটি নেটওয়ার্ক সেট আপ করুন" মডিউল ব্যবহার করতে পারেন।
টিপ: একটি টেরাফর্ম আউটপুটে সবচেয়ে বিপজ্জনক চিহ্ন হল প্ল্যান আউটপুটে ধ্বংস বা -/+ (প্রতিস্থাপন) লাইন। এর অর্থ হল সম্পদ মুছে ফেলা হবে। আপনি যদি কোনও পরিকল্পনায় অপ্রত্যাশিত ধ্বংস দেখতে পান তবে কখনই প্রয়োগ করবেন না, কেন এটি উপস্থিত হয়েছিল তা প্রথমে বুঝুন।
ধাপে ধাপে: AI দিয়ে IaC লেখা
- পছন্দসই পরিকাঠামো স্পষ্ট করুন। "একটি ভিপিসি, দুটি সাবনেট, একটি নিরাপত্তা গোষ্ঠী এবং eu-central-1-এ একটি t3.micro EC2" এর মতো কংক্রিট হন।
- প্রদানকারী এবং সংস্করণ নির্দিষ্ট করুন। কোন মেঘ, কোন Terraform এবং প্রদানকারী সংস্করণ? আপনি একটি সংস্করণ নির্দিষ্ট না করলে, AI পুরানো/বেমানান সিনট্যাক্স ফিরিয়ে দিতে পারে।
- HCL খসড়া উত্পাদিত আছে. এছাড়াও ভেরিয়েবল এবং আউটপুট অনুরোধ.
- সিক্রেট বের করুন। পাসওয়ার্ড এবং কীগুলির মতো মানগুলি পরিবর্তনশীল এবং গোপন ভল্টে যেতে হবে, কোডে নয়।
- `init` + `প্ল্যান` চালান। লাইন দ্বারা পরিকল্পনা আউটপুট লাইন পড়ুন; অপ্রত্যাশিত মুছে ফেলার জন্য চেক করুন.
- ছোট থেকে শুরু করুন, ধীরে ধীরে বাস্তবায়ন করুন। এটি প্রথমে একটি বিচ্ছিন্ন পরীক্ষার অ্যাকাউন্ট/পরিবেশে প্রয়োগ করুন।
নিরাপত্তা: IaC-নির্দিষ্ট ঝুঁকি
IaC যতটা শক্তিশালী ততটাই ঝুঁকিপূর্ণ। তিনটি গুরুত্বপূর্ণ পয়েন্ট:
- রাষ্ট্রীয় ফাইলে একটা গোপন কথা আছে। টেরাফর্ম স্টেট কখনও কখনও সংবেদনশীল মান রাখে, যেমন ডাটাবেস পাসওয়ার্ড, প্লেইনটেক্সট। রাষ্ট্রকে কখনই পাবলিক রিপোজিটরিতে রাখবেন না; একটি এনক্রিপ্ট করা, সীমাবদ্ধ-অ্যাক্সেস রিমোট ব্যাকএন্ড ব্যবহার করুন।
- এইচসিএল-এ গোপনীয়তা এম্বেড করবেন না। পাসওয়ার্ড="prod123" এর মতো লাইনগুলি স্থায়ীভাবে গিট ইতিহাসে লেখা হয়। পরিবর্তে, একটি ভেরিয়েবল ব্যবহার করুন এবং এনভায়রনমেন্ট ভেরিয়েবল (TF_VAR_...) বা গোপন ভল্ট থেকে রানটাইমে মান দিন।
- খুব বিস্তৃত IAM অনুমতি। এআই কখনও কখনও অ্যাকশনের মতো ব্লক তৈরি করে: "*" (সবকিছুকে অনুমতি দিন) "এটি কাজ করতে"। এটি একটি দুর্বলতা; ন্যূনতম প্রয়োজনীয় অনুমতি সংকীর্ণ.
মনোযোগ: একবার একটি গোপন গিট ইতিহাসে প্রবেশ করলে, এটি অতীতে থেকে যায় এবং আপনি ফাইলটি মুছে দিলেও আপস করা যেতে পারে। আপনি যদি ভুল করে করেন, অবিলম্বে বাতিল করুন এবং গোপনটি ঘোরান; শুধু মুছে ফেলাই যথেষ্ট নয়।
ঝুঁকিপূর্ণ পরিকল্পনা লক্ষণ টেবিল
পরিকল্পনা প্রিন্টআউট
অর্থ
কি করতে হবে
+ তৈরি করুন
নতুন সম্পদ যোগ করা হবে
সাধারণত নিরাপদ, যদিও পর্যালোচনা
~ জায়গায় আপডেট
উৎস সাইটে পরিবর্তন হবে
প্রভাব যাচাই করুন (একটি বিভ্রাট হবে?)
-/+ প্রতিস্থাপন
মুছে আবার তৈরি করা হবে
সতর্কতা: ডেটা ক্ষতি হতে পারে
- ধ্বংস
সম্পদ ধ্বংস হবে
থামুন: আপনি যদি এটি আশা না করেন তবে কখনই আবেদন করবেন না
তিনটি মিনি কেস
কেস 1 — 3 ঘন্টায় 2 দিনের কাজ। একটি দল একটি নতুন পরীক্ষার পরিবেশ (ভিপিসি, সাবনেট, আরডিএস ডাটাবেস, ইসিএস ক্লাস্টার) সেট আপ করতে টেরাফর্ম লিখতে যাচ্ছিল কিন্তু তারা সবেমাত্র এইচসিএলে চলে গেছে। তারা AI-তে আর্কিটেকচার এবং সংস্করণগুলি বর্ণনা করেছে এবং একটি মডুলার ব্লুপ্রিন্ট তৈরি করেছে। তারা পরিকল্পনার সাথে প্রতিটি মডিউল যাচাই করেছে এবং এটি 3 ঘন্টার মধ্যে চালু করেছে; ম্যানুয়াল ট্রায়াল এবং ত্রুটির জন্য তাদের দুই দিন সময় লাগবে।
কেস 2 - পরিকল্পনাটি মুছে ফেলা হয়েছে। একজন প্রকৌশলী একটি এআই-জেনারেটেড আপডেট কোড প্রয়োগ না করেই একটি পরিকল্পনা চালিয়েছিলেন। আউটপুটে রয়েছে -/+ প্রোডাকশন ডাটাবেসের প্রতিস্থাপন — এআই একটি অ-প্রতিস্থাপনযোগ্য ক্ষেত্র প্রতিস্থাপন করার চেষ্টা করেছিল, যার অর্থ ডাটাবেস মুছে ফেলা এবং পুনরায় তৈরি করা। প্রকৌশলী আবেদন বন্ধ করে এবং পরিবর্তনটিকে নিরাপদ পদ্ধতিতে পরিবর্তন করে। পরিকল্পনার অভ্যাস একটি বিপর্যয় প্রতিরোধ করেছে।
কেস 3 - কবর দেওয়া গোপন ফাঁস। একজন জুনিয়র, YZ জারি করেছে db_password = "S3cret!" তিনি লাইনটি যেমন আছে তেমনি প্রতিশ্রুতিবদ্ধ এবং এটিকে ঠেলে দিলেন। কোড পর্যালোচনা ধরা; পাসওয়ার্ডটি অবিলম্বে বাতিল এবং পরিবর্তন করা হয়েছিল, মানটি একটি ভেরিয়েবলে সরানো হয়েছিল এবং গোপন ভল্ট থেকে খাওয়ানো হয়েছিল। পাঠ: HCL-এ কখনোই সরল লেখার গোপনীয়তা থাকে না।
চারটি অনুলিপিযোগ্য টেমপ্লেট
1) অবকাঠামো খসড়া তৈরি করা:
Terraform (সংস্করণ ~> 1.7) সহ [ক্লাউড: AWS]-এ নিম্নলিখিত অবকাঠামো লিখুন: [উত্স তালিকা]। অঞ্চল [X]। নিয়ম:- সমস্ত সংবেদনশীল মান পরিবর্তনশীল করুন, সেগুলিকে এইচসিএল-এ এম্বেড করবেন না।- প্রদানকারী সংস্করণ ঠিক করুন (প্রয়োজনীয়_প্রদানকারী)।- আইএএম অনুমতিগুলি ছোট করুন, "*" ব্যবহার করবেন না।- আউটপুট হিসাবে [X, Y] ফেরত দিন। মডুলারলি এবং ব্যাখ্যা সহ কোড দিন।
2) পরিকল্পনা আউটপুট ব্যাখ্যা:
নীচের 'টেরাফর্ম প্ল্যান' আউটপুট বিশ্লেষণ করুন। আমাকে তালিকাভুক্ত করুন:(1) কোন সম্পদ যোগ করা হয়েছে/পরিবর্তিত হয়েছে/মুছে ফেলা হয়েছে,(2) ডেটা ক্ষতি বা বাধার ঝুঁকিতে সারি,(3) 3টি প্রশ্ন আমার আবেদন করার আগে জিজ্ঞাসা করা উচিত৷ পরিকল্পনা: [আউটপুট]
3) নিরাপত্তার জন্য বিদ্যমান HCL পরীক্ষা করুন:
নিরাপত্তার জন্য নিম্নলিখিত টেরাফর্ম কোডটি পরীক্ষা করুন: এম্বেড করা গোপন, অতি বিস্তৃত IAM অনুমতি, ওপেন নেটওয়ার্ক নিয়ম (0.0.0.0/0), এনক্রিপ্ট করা স্টোরেজ? গুরুত্ব এবং সংশোধনের ক্রমে প্রতিটি অনুসন্ধান লিখুন। কোড: [HCL]
4) পুনরাবৃত্তিমূলক কোডটিকে মডিউলে রূপান্তর করুন:
নিম্নলিখিত পুনরাবৃত্তিমূলক টেরাফর্ম কোডটিকে একটি পুনঃব্যবহারযোগ্য মডিউলে রূপান্তর করুন: কোন মানগুলি ভেরিয়েবল হওয়া উচিত, মডিউল ইন্টারফেসটি কী হওয়া উচিত? এছাড়াও উদাহরণ ব্যবহার দেখান. কোড: [HCL]
দুর্বল প্রম্পট / শক্তিশালী প্রম্পট
দুর্বল: "টেরাফর্মের সাথে একটি ডাটাবেস তৈরি করুন।"
ফলাফল: অস্পষ্ট কোন মেঘ, কোন ইঞ্জিন, কোন সংস্করণ, এনক্রিপ্ট করা বা না; লিগ্যাসি সিনট্যাক্সের সাথে, AI একটি সর্বজনীনভাবে উপলব্ধ উদাহরণ প্রদান করতে পারে যা কোডের মধ্যে পাসওয়ার্ড এম্বেড করে।
শক্তিশালী: "টেরাফর্ম ~> 1.7 দিয়ে AWS-এ একটি RDS PostgreSQL 15 ইন্সট্যান্স তৈরি করুন। পাসওয়ার্ড পরিবর্তনশীল করুন, এটি কোডে এম্বেড করবেন না। স্টোরেজ এনক্রিপ্ট করা হয়েছে, শুধুমাত্র ব্যক্তিগত সাবনেট থেকে অ্যাক্সেসযোগ্য, সর্বজনীন নয়। প্রদানকারী সংস্করণ ঠিক করুন। আউটপুট হিসাবে শেষ পয়েন্ট ফিরিয়ে দিন।"
পার্থক্য: দ্বিতীয় প্রম্পটটি ইঞ্জিন, সংস্করণ, এনক্রিপশন, নেটওয়ার্ক সীমাবদ্ধতা এবং গোপন নিয়ম দেয় — আউটপুট নিরাপদ এবং প্রোডের কাছাকাছি।
সাধারণ ভুল
- একটি 'প্ল্যান' না করেই `আবেদন` করতে। IaC-তে সবচেয়ে ব্যয়বহুল ভুল; সর্বদা প্রথমে পরিকল্পনা করুন।
- এইচসিএল-এ এম্বেডিং সিক্রেট। গিট ইতিহাসে স্থায়ী ফুটো তৈরি করে।
- রাজ্যের অনিরাপদ সংরক্ষণ করা। একটি এনক্রিপ্ট করা, আনলক করা, পাবলিক স্টেট একটি বিপর্যয়।
- সংস্করণ ঠিক না. একটি সংস্করণ নির্দিষ্ট না করে প্রদানকারী ব্যবহার করা ভবিষ্যতে হঠাৎ ব্যর্থতার দিকে নিয়ে যাবে৷
- *`ক্রিয়া: বিস্তৃত অনুমতি যেমন ""`।** সর্বনিম্ন বিশেষাধিকারের নীতি লঙ্ঘন করে।
- অপ্রত্যাশিত 'ধ্বংস' উপেক্ষা করা। প্রশ্ন ছাড়াই প্ল্যানে ডিলিট লাইন প্রয়োগ করা।
সংক্ষেপে
IaC পরিকাঠামোকে পুনরাবৃত্তিযোগ্য, সংস্করণযোগ্য এবং নিরীক্ষণযোগ্য কোডে পরিণত করে; সবচেয়ে সাধারণ টুল হল Terraform. এআই দ্রুত এইচসিএল স্টাব তৈরি করে, তবে আপনাকে অবশ্যই সংস্করণ, ক্লাউড-নির্দিষ্ট বিবরণ এবং নিরাপত্তা নিয়ম প্রদান করতে হবে। টেরাফর্মের অদম্য নিয়ম: একটি পরিকল্পনার সাথে প্রতিটি পরিবর্তন দেখতে, অপ্রত্যাশিত মুছে ফেলার জন্য জিজ্ঞাসা করা, কোড থেকে গোপনীয়তা দূরে রাখা এবং রাষ্ট্রকে নিরাপদে রাখা। একটি প্ল্যান আউটপুটে ধ্বংস এবং প্রতিস্থাপনের লাইনগুলি হল সেই জায়গাগুলি যা সবচেয়ে সাবধানে পড়া উচিত।
আবেদন টাস্ক
উপরের "জেনারেট ইনফ্রাস্ট্রাকচার স্কেচ" টেমপ্লেটটি ব্যবহার করে AI-কে একটি ছোট পরিকাঠামো (যেমন একটি স্টোরেজ বালতি এবং একটি অ্যাক্সেস নীতি) তৈরি করতে দিন। তারপর: (1) কোডে এম্বেড করা গোপন বা * অনুমতিগুলির জন্য "ভেটিং" টেমপ্লেট চেক করুন; (2) সম্ভব হলে, একটি পরীক্ষার খাতায় init + plan চালান এবং "প্ল্যান ইন্টারপ্রিটেশন" টেমপ্লেট সহ প্ল্যান আউটপুট পড়ুন; (3) কোনো অপ্রত্যাশিত মুছে ফেলা/পরিবর্তন নোট করুন।
চেকলিস্ট
- [ ] আমি আমার প্রম্পটে ক্লাউড, টেরাফর্ম/প্রোভাইডার সংস্করণ এবং এনক্রিপশন/নেটওয়ার্ক সীমাবদ্ধতা যোগ করেছি।
- [ ] কোডে কোন প্লেইনটেক্সট গোপন নেই; যথার্থ মান পরিবর্তনশীল।
- [ ] আমি IAM/অনুমতিগুলিকে ন্যূনতম অনুমতিগুলিতে সংকুচিত করেছি, * আমি এটি ব্যবহার করিনি৷
- [ ] আমি প্রয়োগ করার আগে পরিকল্পনা চালিয়েছিলাম এবং লাইন দ্বারা আউটপুট লাইন পড়ি।
- [ ] আমি যাচাই করেছি যে পরিকল্পনায় কোনো অপ্রত্যাশিত ধ্বংস/প্রতিস্থাপন নেই।
- [ ] আমি নিশ্চিত যে রাজ্যটিকে একটি এনক্রিপ্ট করা, লক করা এবং সীমাবদ্ধ ব্যাকএন্ডে রাখা হয়েছে৷