টেরাফর্ম মডিউল

Terapharma Madi Ula



অবকাঠামোগত ব্যবস্থা এবং ব্যবস্থাপনা জগতে, টেরাফর্ম ডেভেলপার এবং অপারেশন টিমের মধ্যে একটি জনপ্রিয় পছন্দ হিসেবে আবির্ভূত হয়েছে। এর ঘোষণামূলক সিনট্যাক্স (HCL – HashiCorp কনফিগারেশন ল্যাঙ্গুয়েজ) এবং বিভিন্ন অবকাঠামো প্রদানকারীদের জন্য সমর্থন সহ, Terraform অবকাঠামো-এ-কোড (IaC) অনুশীলনগুলিকে সক্ষম করে।

এর মূল বৈশিষ্ট্যগুলির মধ্যে একটি হল মডিউলগুলির ব্যবহার যা মডুলার অবকাঠামো কোড তৈরি এবং পুনরায় ব্যবহার করার অনুমতি দেয়। এই নিবন্ধে, আমরা Terraform মডিউলগুলির ধারণা এবং কীভাবে তারা আমাদের অবকাঠামো কোডকে সংগঠিত এবং সরল করতে সাহায্য করতে পারে সে সম্পর্কে অন্বেষণ করব।







Terraform মডিউল পরিচিতি

Terraform মডিউল হল Terraform কনফিগারেশনের স্বয়ংসম্পূর্ণ প্যাকেজ যা সংজ্ঞায়িত ইনপুট এবং আউটপুট ভেরিয়েবল সহ সম্পদের একটি সেট উপস্থাপন করে। তারা পরিকাঠামো কোডকে এনক্যাপসুলেট এবং পুনঃব্যবহারের একটি উপায় প্রদান করে যা জটিল অবকাঠামো স্থাপনার পরিচালনা এবং রক্ষণাবেক্ষণকে সহজ করে তোলে।



মডিউলগুলি একটি প্রকল্পের মধ্যে অভ্যন্তরীণভাবে তৈরি এবং ব্যবহার করা যেতে পারে বা একাধিক প্রকল্প বা দল জুড়ে ভাগ করা যেতে পারে।



মডিউলের সংগঠন

টেরাফর্ম মডিউলগুলিকে সংগঠিত করার সময়, এটি একটি শ্রেণীবদ্ধ কাঠামো থাকা সাধারণ বিষয় যা রুট এবং চাইল্ড মডিউল নিয়ে গঠিত। এই সংস্থাটি কীভাবে কাজ করে তা অন্বেষণ করা যাক।





রুট মডিউল



রুট মডিউল আমাদের টেরাফর্ম কনফিগারেশনের শীর্ষ-স্তরের মডিউল উপস্থাপন করে। এটি সামগ্রিক অবকাঠামো সংজ্ঞায়িত করার এবং বিভিন্ন সংস্থানগুলির মধ্যে সম্পর্ক পরিচালনা করার জন্য এন্ট্রি পয়েন্ট।

রুট মডিউলে সাধারণত 'main.tf' ফাইল থাকে যেখানে আমরা রিসোর্স এবং কনফিগারেশনগুলিকে সংজ্ঞায়িত করি যা আমাদের অবকাঠামোর ভিত্তি তৈরি করে। ঐচ্ছিকভাবে, আমরা এটির সাথে 'variables.tf' এবং 'outputs.tf' ফাইল রাখতে পারি। এছাড়াও, আমরা সহজেই চাইল্ড মডিউলগুলি অ্যাক্সেস করতে রুট ডিরেক্টরির মধ্যে আমাদের 'মডিউল' ডিরেক্টরি সংজ্ঞায়িত করতে পারি।

চাইল্ড মডিউল

চাইল্ড মডিউলগুলি হল মডুলার উপাদান যা নির্দিষ্ট সংস্থান বা কনফিগারেশনগুলিকে এনক্যাপসুলেট করে। তারা পুনর্ব্যবহারযোগ্য এবং পরিকাঠামো কার্যকারিতা স্বয়ংসম্পূর্ণ ইউনিট প্রতিনিধিত্ব করার জন্য ডিজাইন করা হয়েছে.

শিশু মডিউলগুলি রুট বা অন্যান্য চাইল্ড মডিউলগুলির মধ্যে ব্যবহার করা যেতে পারে যা রচনা এবং জটিল অবকাঠামো নির্মাণের অনুমতি দেয়। প্রতিটি চাইল্ড মডিউলের সাধারণত তার ডিরেক্টরি থাকে যাতে প্রয়োজনীয় কনফিগারেশন ফাইল থাকে যেমন 'main.tf', 'variables.tf', এবং 'outputs.tf'।

এখন দেখা যাক কিভাবে আমরা একটি টেরাফর্ম মডিউল তৈরি করতে পারি।

একটি টেরাফর্ম মডিউল তৈরি করা হচ্ছে

Terraform মডিউল তৈরি করার সময়, আমরা প্রয়োজনীয় Terraform কনফিগারেশন ফাইল সহ মডিউলের জন্য একটি নতুন ডিরেক্টরি তৈরি করতে হবে। সাধারণত, সেই ডিরেক্টরিটির নাম দেওয়া হয় 'মডিউল'। আমাদের প্রকল্পের রুট ডিরেক্টরির মধ্যে এটিকে সংজ্ঞায়িত করা একটি সেরা অনুশীলন।

ডকার ব্যবহার করে একটি স্থানীয় ওয়েব সার্ভারের ব্যবস্থা করার জন্য একটি সাধারণ মডিউলের একটি সহজ উদাহরণ নেওয়া যাক। প্রথমে, আমরা 'মডিউল' ডিরেক্টরিতে মডিউলটিকে 'main.tf' হিসাবে সংজ্ঞায়িত করি।

সম্পদ 'ডকার_কন্টেইনার' 'ওয়েব সার্ভার' {
নাম  = var.name
image = var.image
বন্দর {
অভ্যন্তরীণ = var.internal_port
external = var.external_port
}
}

এখানে, আমরা 'docker_container' নামে একটি মডিউল তৈরি করি যা ইনপুট ভেরিয়েবল হিসাবে কন্টেইনারের নাম, ডকার ইমেজ, অভ্যন্তরীণ পোর্ট এবং বাহ্যিক পোর্ট নেয়। মডিউলটি একটি ডকার কন্টেইনার রিসোর্স তৈরি করতে যুক্তিকে এনক্যাপসুলেট করে এবং কলারকে কন্টেইনারের বৈশিষ্ট্য কাস্টমাইজ করার অনুমতি দেয়।

নিম্নলিখিত চিত্রে প্রদর্শিত হিসাবে, আমরা 'মডিউল' ডিরেক্টরিতে 'variables.tf' নামে একটি পৃথক ফাইল তৈরি করি যাতে মডিউল ব্যবহার করার সময় কাস্টমাইজ করা যায় এমন ইনপুট ভেরিয়েবলগুলিকে সংজ্ঞায়িত করা যায়:

পরিবর্তনশীল 'নাম' {
বর্ণনা = 'ডকার কন্টেইনারের নাম'
প্রকার = স্ট্রিং
}

পরিবর্তনশীল 'ছবি' {
বর্ণনা = 'ডকার ইমেজ'
প্রকার = স্ট্রিং
}

পরিবর্তনশীল 'অভ্যন্তরীণ পোর্ট' {
বর্ণনা = 'ডকার কন্টেইনারে অভ্যন্তরীণ পোর্ট'
প্রকার = সংখ্যা
}

পরিবর্তনশীল 'বহিরাগত_বন্দর' {
বর্ণনা = 'এতে ম্যাপ করার জন্য বহিরাগত পোর্ট'
প্রকার = সংখ্যা
}

এখানে, আমরা চারটি ভেরিয়েবল ঘোষণা করেছি, প্রতিটিতে “বর্ণনা” এবং “টাইপ” বৈশিষ্ট্য এবং প্রাসঙ্গিক মান রয়েছে।

একটি Terraform মডিউল ব্যবহার করে

যেহেতু আমরা আমাদের মডিউল তৈরি করেছি, আমরা এখন এটির উত্স উল্লেখ করে আমাদের মূল টেরাফর্ম কনফিগারেশনে এটি ব্যবহার করতে পারি। আসুন আমাদের মূল কনফিগারেশন ফাইলটি তৈরি করি যা রুট ডিরেক্টরিতে 'main.tf'।

মডিউল 'ওয়েবসার্ভার_কন্টেইনার' {
উৎস = '../modules/docker_container'
নাম             = 'mywebserver'
ছবি           = 'nginx: সর্বশেষ'
অভ্যন্তরীণ_বন্দর = 80
বাহ্যিক_বন্দর = 8080
}

ডকার কন্টেইনার মডিউলটি ইনস্ট্যান্ট করার জন্য আমরা পূর্ববর্তী কোডে 'মডিউল' ব্লক ব্যবহার করি। আমরা মডিউলের জন্য প্রয়োজনীয় ইনপুট মান প্রদান করি যেমন ধারক নাম, ডকার ইমেজ এবং পোর্ট কনফিগারেশন। 'উৎস' পরামিতি 'মডিউল' ডিরেক্টরির আপেক্ষিক পথ নির্দিষ্ট করে।

এর পরে, আসুন মডিউলগুলির সাথে ব্যবহার করার জন্য টেরাফর্ম আউটপুটগুলি কীভাবে ব্যবহার করবেন তা দেখুন।

মডিউল আউটপুট

টেরাফর্মের মডিউল আউটপুটগুলি একটি মডিউলের মধ্যে থেকে নির্দিষ্ট মানগুলিকে প্রকাশ করার একটি উপায় প্রদান করে, সেগুলিকে প্রধান কনফিগারেশনে বা অন্যান্য মডিউলগুলির দ্বারা ব্যবহারের জন্য উপলব্ধ করে। তারা মডিউল এবং কলারের মধ্যে একটি যোগাযোগের চ্যানেল হিসাবে কাজ করে যা মডিউলটিকে এমন একটি তথ্য বা ডেটা সরবরাহ করতে দেয় যা আরও কনফিগারেশন বা সিদ্ধান্ত নেওয়ার জন্য দরকারী বা প্রয়োজনীয় হতে পারে।

আউটপুট 'container_id' {
বর্ণনা = 'তৈরি ডকার কন্টেইনারের আইডি'
মান       = docker_container.webserver.id
}

এখানে, আমরা 'মডিউল' ডিরেক্টরির ভিতরে একটি 'outputs.tf' ফাইল তৈরি করেছি। এই আউটপুট ভেরিয়েবলটি ডকার কন্টেইনারের আইডি প্রকাশ করে যা মডিউলের মধ্যে 'ওয়েবসার্ভার' নামে 'ডকার_কন্টেইনার' সংস্থান দ্বারা তৈরি করা হয়েছে।

এখন, আমরা আমাদের রুট কনফিগারেশন ফাইলে কন্টেইনার আইডি অ্যাক্সেস করতে পারি। রুট ডিরেক্টরিতে 'main.tf' ফাইলের নিম্নলিখিত আপডেট করা কোডটি পড়ুন:

মডিউল 'ওয়েবসার্ভার_কন্টেইনার' {
উৎস = '../modules/docker_container'
নাম             = 'mywebserver'
ছবি           = 'nginx: সর্বশেষ'
অভ্যন্তরীণ_বন্দর = 80
বাহ্যিক_বন্দর = 8080
}

সম্পদ 'ডকার_ভলিউম' 'তথ্য' {
# বাকি আর্গুমেন্ট এখানে যায়
বাঁধাই করা = module.webserver_container.container_id
}

“bind” আর্গুমেন্টের মান হিসাবে “module.webserver_container.container_id” ব্যবহার করে, আমরা Terraform-কে নির্দেশ দিই ডকার ভলিউমকে সেই অবস্থানে বাঁধতে যা “web_container” মডিউলের কন্টেইনার আইডি দ্বারা নির্দিষ্ট করা হয়েছে। এটি ডকার ভলিউম রিসোর্স এবং কন্টেইনারের মধ্যে একটি সম্পর্ক স্থাপন করে যা 'webserver_container' মডিউল দ্বারা তৈরি করা হয়েছে, এটি নিশ্চিত করে যে ভলিউমটি উপযুক্ত স্থানে মাউন্ট করা হয়েছে।

টেরাফর্ম মডিউলের জন্য সর্বোত্তম অনুশীলন

পুনঃব্যবহারযোগ্যতার জন্য মডুলারাইজ করুন

মডিউল ডিজাইন করার সময় আমাদের পুনর্ব্যবহারযোগ্যতা বিবেচনা করা উচিত। এছাড়াও, আমাদের অবশ্যই আমাদের অবকাঠামোর যৌক্তিক উপাদান বা প্যাটার্নগুলি সনাক্ত করতে হবে এবং সেগুলিকে আলাদা মডিউলে জুড়ে দিতে হবে। এটি কোড পুনঃব্যবহার, প্রমিতকরণ, এবং দলগুলির মধ্যে সহজ সহযোগিতার প্রচার করে৷

পরিষ্কার এবং সামঞ্জস্যপূর্ণ নামকরণ

মডিউল, ভেরিয়েবল এবং সংস্থানগুলির জন্য স্পষ্ট এবং সামঞ্জস্যপূর্ণ নামকরণের নিয়মগুলি ব্যবহার করা কোডবেসের পাঠযোগ্যতা এবং বোঝার উন্নতি করে যা অন্যদের জন্য মডিউলগুলির সাথে কাজ করা এবং বজায় রাখা সহজ করে তোলে।

বিচ্ছিন্ন নির্ভরতা

আমাদের অবশ্যই মডিউলগুলির মধ্যে টাইট কাপলিং এড়াতে হবে। প্রতিটি মডিউল তার নিজস্ব সম্পদ এবং নির্ভরতা encapsulate করা উচিত. এটি নিশ্চিত করে যে মডিউলগুলি স্বাধীনভাবে পুনরায় ব্যবহার করা যেতে পারে এবং আরও ভাল বিচ্ছিন্নতা এবং এনক্যাপসুলেশন প্রচার করে।

সংস্করণ নিয়ন্ত্রণ এবং মডিউল রেজিস্ট্রি

আমরা আমাদের মডিউলগুলিকে একটি সংস্করণ-নিয়ন্ত্রিত সংগ্রহস্থল বা মডিউল রেজিস্ট্রিতে প্রকাশ করতে পারি। এটি মডিউলগুলি ভাগ করে নেওয়া এবং আবিষ্কার করার জন্য একটি কেন্দ্রীভূত অবস্থান প্রদান করে, সহজ অ্যাক্সেস এবং সংস্করণ নিশ্চিত করে৷

উপসংহার

আমরা Terraform মডিউলগুলির একটি সংক্ষিপ্ত ভূমিকা নিয়েছি এবং একটি সাধারণ উদাহরণ দিয়ে কীভাবে সেগুলি তৈরি করতে হয় তা শিখেছি। তারপরে, আমরা কীভাবে আমাদের মডিউলের সাথে ভেরিয়েবল এবং আউটপুট ব্যবহার করতে হয় তার নমনীয়তা, পুনঃব্যবহারযোগ্যতা এবং রক্ষণাবেক্ষণযোগ্যতা বাড়াতে দেখেছি। উপসংহারে, টেরাফর্ম মডিউলগুলি অবকাঠামো কোড সংগঠিত এবং সহজ করার জন্য শক্তিশালী সরঞ্জাম। তারা আমাদের পরিকাঠামো-কোড প্রকল্পগুলির মধ্যে মডুলারিটি, পুনঃব্যবহারযোগ্যতা এবং সহযোগিতার প্রচার করে পুনঃব্যবহারযোগ্য উপাদানগুলিতে সংস্থান বা কনফিগারেশনের একটি সেটকে এনক্যাপসুলেট করার অনুমতি দেয়।