আমি বিদ্যমান এডাব্লুএস অবকাঠামোটিকে টেরামফর্মে স্থানান্তরিত করার মতো অবস্থায়ও রয়েছি তাই আমার বিকাশের সাথে সাথে উত্তরটি আপডেট করার লক্ষ্য থাকবে।
আমি আঞ্চলিক টেরেরফর্ম উদাহরণ এবং একাধিক পরীক্ষার উপর নির্ভর করে যা আমি অনিশ্চিত হয়ে পড়েছি সেগুলির ক্ষেত্রে বহু তদন্ত এবং ত্রুটি।
.tfstate
নথি পত্র
টেরাফর্ম কনফিগারেশন বিভিন্ন অবকাঠামোতে অনেকগুলি বাক্স সরবরাহ করতে ব্যবহৃত হতে পারে, যার প্রত্যেকটিরই আলাদা আলাদা রাষ্ট্র থাকতে পারে। যেহেতু এটি একাধিক লোক দ্বারা চালিত হতে পারে এই রাজ্যটি কেন্দ্রীয় অবস্থানে থাকতে হবে (এস 3 এর মতো) তবে গিট নয় ।
এটি টেরফর্মটি দেখে নিশ্চিত হওয়া যায় .gitignore
।
বিকাশকারী নিয়ন্ত্রণ
আমাদের লক্ষ্য হ'ল বিকাশকারীদের একটি পূর্ণ নিরীক্ষা (গিট লগ) বজায় রাখা এবং তদন্তের পরিবর্তনগুলি স্যানিট করার ক্ষমতা (টান অনুরোধগুলি) সক্ষম করার সময় অবকাঠামোটির আরও নিয়ন্ত্রণ সরবরাহ করা। এই বিষয়টি মাথায় রেখে আমি যে নতুন অবকাঠামোগত কর্মপ্রবাহের দিকে লক্ষ্য করছি তা হ'ল:
- সাধারণ এএমআই এর বেস ফাউন্ডেশন যা পুনরায় ব্যবহারযোগ্য মডিউলগুলি যেমন পুতুল অন্তর্ভুক্ত করে।
- টেরফর্ম ব্যবহার করে ডিওওপস দ্বারা সরবরাহিত মূল অবকাঠামো।
- বিকাশকারীরা গিটে টেরারফর্ম কনফিগারেশনকে প্রয়োজনীয় হিসাবে পরিবর্তন করেন (উদাহরণের সংখ্যা; নতুন ভিপিসি; অঞ্চল / প্রাপ্যতা অঞ্চল ইত্যাদি)।
- গিট কনফিগারেশনটি পুশ হয়েছে এবং ডিওওএসএস স্কোয়াডের কোনও সদস্য কর্তৃক স্যানিটি পরীক্ষা করার জন্য একটি অনুরোধ জমা দেওয়া হয়েছে।
- অনুমোদিত হলে, নির্মাণ এবং মোতায়েনের জন্য সিআইকে ওয়েবহুক কল করে (এই সময়ে একাধিক পরিবেশকে কীভাবে ভাগ করা যায় তা নিশ্চিত নয়)
সম্পাদনা 1 - বর্তমান অবস্থায় আপডেট Update
এই উত্তরটি শুরু করার পর থেকে আমি প্রচুর টিএফ কোড লিখেছি এবং আমাদের পরিস্থিতি আরও স্বাচ্ছন্দ্যবোধ করি। আমরা পথে বাগ এবং নিষেধাজ্ঞাগুলি আঘাত করেছি তবে আমি স্বীকার করি এটি নতুন, দ্রুত পরিবর্তিত সফ্টওয়্যার ব্যবহারের একটি বৈশিষ্ট্য।
বিন্যাস
আমাদের একাধিক ভিপিসির একাধিক সাবনেট সহ জটিল AWS অবকাঠামো রয়েছে। এটিকে সহজেই পরিচালনার মূল চাবিকাঠিটি ছিল একটি নমনীয় শ্রমশৈলী সংজ্ঞা দেওয়া যা অঞ্চল, পরিবেশ, পরিষেবা এবং মালিককে পরিবেষ্টন করে যা আমরা আমাদের পরিকাঠামো কোড (টেরেরফর্ম এবং পুতুল উভয়) সাজানোর জন্য ব্যবহার করতে পারি।
মডিউল
পরবর্তী পদক্ষেপটি ছিল আমাদের টেরাফর্ম মডিউলগুলি সঞ্চয় করতে একক গিট সংগ্রহস্থল তৈরি করা। মডিউলগুলির জন্য আমাদের শীর্ষ স্তরের দির কাঠামোটি এর মতো দেখাচ্ছে:
tree -L 1 .
ফলাফল:
├── README.md
├── aws-asg
├── aws-ec2
├── aws-elb
├── aws-rds
├── aws-sg
├── aws-vpc
└── templates
প্রত্যেকে কিছু বুদ্ধিমান ডিফল্ট সেট করে তবে তাদের "ভরাট" দ্বারা ওভাররাইট করা যায় এমন পরিবর্তনশীল হিসাবে তাদের প্রকাশ করে।
আঠা
আমাদের সাথে আমাদের একটি দ্বিতীয় ভান্ডার রয়েছে glue
যা উপরে উল্লিখিত মডিউলগুলি ব্যবহার করে। এটি আমাদের ট্যাক্সনোমি নথির সাথে সামঞ্জস্য করা হয়েছে:
.
├── README.md
├── clientA
│ ├── eu-west-1
│ │ └── dev
│ └── us-east-1
│ └── dev
├── clientB
│ ├── eu-west-1
│ │ ├── dev
│ │ ├── ec2-keys.tf
│ │ ├── prod
│ │ └── terraform.tfstate
│ ├── iam.tf
│ ├── terraform.tfstate
│ └── terraform.tfstate.backup
└── clientC
├── eu-west-1
│ ├── aws.tf
│ ├── dev
│ ├── iam-roles.tf
│ ├── ec2-keys.tf
│ ├── prod
│ ├── stg
│ └── terraform.tfstate
└── iam.tf
ক্লায়েন্ট স্তরের অভ্যন্তরে আমাদের AWS অ্যাকাউন্টের সুনির্দিষ্ট .tf
ফাইল রয়েছে যা বৈশ্বিক সংস্থান সরবরাহ করে (যেমন আইএএম রোলস); এরপরে EC2 এসএসএইচ পাবলিক কীগুলির সাথে অঞ্চল স্তর রয়েছে; অবশেষে আমাদের পরিবেশ (ইন dev
, stg
, prod
ইত্যাদি) আমাদের VPC স্থাপনার, উদাহরণস্বরূপ সৃষ্টি এবং সংযোগ ইত্যাদি সংরক্ষণ করা হয় পীয়ারিং হয়।
পার্শ্ব দ্রষ্টব্য: আপনি দেখতে পাচ্ছেন আমি terraform.tfstate
গিটকে ধরে রেখে আমার নিজের পরামর্শের বিরুদ্ধে যাচ্ছি । আমি এস 3 এ না যাওয়া পর্যন্ত এটি একটি অস্থায়ী পরিমাপ তবে বর্তমানে আমি একমাত্র বিকাশকারী হিসাবে আমার স্যুট।
পরবর্তী পদক্ষেপ
এটি এখনও একটি ম্যানুয়াল প্রক্রিয়া এবং জেনকিন্সে এখনও নয় তবে আমরা একটি বরং বৃহত, জটিল অবকাঠামো এবং এতদূর ভাল পোর্টিং করছি। আমি যেমন বলেছিলাম, কয়েকটি বাগ কিন্তু ভাল চলছে!
সম্পাদনা 2 - পরিবর্তন
আমি এই প্রাথমিক উত্তরটি লেখার প্রায় এক বছর হয়ে গেছে এবং টেরফর্ম এবং আমার উভয়ের অবস্থা উল্লেখযোগ্যভাবে পরিবর্তিত হয়েছে। আমি একজন আকাশী নীল ক্লাস্টার পরিচালনার জন্য Terraform ব্যবহার করে একটি নতুন অবস্থানে এখন আছি এবং Terraform এখন v0.10.7
।
রাষ্ট্র
লোকেরা আমাকে বারবার বলেছে যে রাজ্যে গিটে যাওয়া উচিত নয় - এবং তারা সঠিক। আমরা এটিকে দু'জন ব্যক্তি দলের সাথে অন্তর্বর্তীকালীন পরিমাপ হিসাবে ব্যবহার করেছি যা বিকাশকারী যোগাযোগ এবং শৃঙ্খলার উপর নির্ভর করে। একটি বৃহত্তর, বিতরণকারী টিম সহ আমরা এখন ডায়নামোডিবি দ্বারা সরবরাহিত লকিং সহ এস 3 এ প্রত্যন্ত রাজ্যের সম্পূর্ণরূপে সুবিধা অর্জন করছি। আদর্শভাবে এটি কনসুলেতে স্থানান্তরিত হবে এখন ক্রস ক্লাউড সরবরাহকারীদের কাটা v1.0।
মডিউল
পূর্বে আমরা অভ্যন্তরীণ মডিউলগুলি তৈরি এবং ব্যবহার করি। এটি এখনও কেস তবে Terrafor রেজিস্ট্রি আবির্ভাব এবং বৃদ্ধি সঙ্গে আমরা এগুলি কমপক্ষে একটি বেস হিসাবে ব্যবহার করার চেষ্টা করি।
ফাইল গঠন
নতুন পজিশনে কেবলমাত্র দুটি ইনফেক্স পরিবেশ - dev
এবং সহ অনেকগুলি সহজ শ্রেণিবদ্ধ রয়েছে prod
। প্রত্যেকের নিজস্ব ভেরিয়েবল এবং আউটপুট রয়েছে, উপরে তৈরি আমাদের মডিউলগুলি পুনরায় ব্যবহার করে। remote_state
প্রদানকারী এছাড়াও পরিবেশের মধ্যে নির্মিত সম্পদের আউটপুট ভাগ সাহায্য করে। আমাদের দৃশ্যপট বিশ্বব্যাপী পরিচালিত টিএলডি-র বিভিন্ন অ্যাজুর রিসোর্স গ্রুপগুলিতে সাবডোমেন।
├── main.tf
├── dev
│ ├── main.tf
│ ├── output.tf
│ └── variables.tf
└── prod
├── main.tf
├── output.tf
└── variables.tf
পরিকল্পনা
আবার বিতরণকারী দলের অতিরিক্ত চ্যালেঞ্জ সহ, আমরা এখন সর্বদা আমাদের terraform plan
কমান্ডের আউটপুট সংরক্ষণ করি । আমরা পর্যবেক্ষণ করতে পারি এবং জানতে পারি যে স্টেজ plan
এবং apply
স্টেজের মধ্যে কিছু পরিবর্তন হওয়ার ঝুঁকি ছাড়াই কী চালানো হবে (যদিও লক করা এটির সাথে সহায়তা করে)। এই প্ল্যান ফাইলটি মুছতে ভুলবেন না কারণ এটিতে সম্ভবত প্লেইন "গোপন" ভেরিয়েবল থাকতে পারে।
সামগ্রিকভাবে আমরা টেরফর্ম নিয়ে খুব খুশি এবং যুক্ত হওয়া নতুন বৈশিষ্ট্যগুলি শিখতে এবং উন্নত করতে থাকি।