টেরফর্ম ব্যবহার করার সময় সেরা অনুশীলন [বন্ধ]


111

আমি আমাদের অবকাঠামোকে টেরফর্মে রূপান্তর করতে চলেছি। টেরাফর্ম ফাইল এবং স্থিতি পরিচালনার জন্য সেরা অনুশীলন কোনটি? আমি বুঝতে পারি এটি কোড হিসাবে পরিকাঠামো, এবং আমি আমার .tf ফাইলগুলিকে গিটের সাথে প্রতিশ্রুতিবদ্ধ করব, তবে আমি কি tfstate এছাড়াও প্রতিশ্রুতিবদ্ধ? এটি কি এস 3 এর মতো কোথাও থাকা উচিত? আমি সিআই-কে এই সমস্তগুলি পরিচালনা করার জন্য শেষ পর্যন্ত চাই, তবে এটি অনেকটা প্রসারিত এবং ফাইলগুলির জন্য চলমান টুকরোগুলি খুঁজে বের করার জন্য আমার প্রয়োজন।

আমি সত্যিই কেবল দেখছি যে সেখানে লোকেরা কীভাবে উত্পাদনে এই ধরণের জিনিস ব্যবহার করে

উত্তর:


85

আমি বিদ্যমান এডাব্লুএস অবকাঠামোটিকে টেরামফর্মে স্থানান্তরিত করার মতো অবস্থায়ও রয়েছি তাই আমার বিকাশের সাথে সাথে উত্তরটি আপডেট করার লক্ষ্য থাকবে।

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

.tfstate নথি পত্র

টেরাফর্ম কনফিগারেশন বিভিন্ন অবকাঠামোতে অনেকগুলি বাক্স সরবরাহ করতে ব্যবহৃত হতে পারে, যার প্রত্যেকটিরই আলাদা আলাদা রাষ্ট্র থাকতে পারে। যেহেতু এটি একাধিক লোক দ্বারা চালিত হতে পারে এই রাজ্যটি কেন্দ্রীয় অবস্থানে থাকতে হবে (এস 3 এর মতো) তবে গিট নয়

এটি টেরফর্মটি দেখে নিশ্চিত হওয়া যায় .gitignore

বিকাশকারী নিয়ন্ত্রণ

আমাদের লক্ষ্য হ'ল বিকাশকারীদের একটি পূর্ণ নিরীক্ষা (গিট লগ) বজায় রাখা এবং তদন্তের পরিবর্তনগুলি স্যানিট করার ক্ষমতা (টান অনুরোধগুলি) সক্ষম করার সময় অবকাঠামোটির আরও নিয়ন্ত্রণ সরবরাহ করা। এই বিষয়টি মাথায় রেখে আমি যে নতুন অবকাঠামোগত কর্মপ্রবাহের দিকে লক্ষ্য করছি তা হ'ল:

  1. সাধারণ এএমআই এর বেস ফাউন্ডেশন যা পুনরায় ব্যবহারযোগ্য মডিউলগুলি যেমন পুতুল অন্তর্ভুক্ত করে।
  2. টেরফর্ম ব্যবহার করে ডিওওপস দ্বারা সরবরাহিত মূল অবকাঠামো।
  3. বিকাশকারীরা গিটে টেরারফর্ম কনফিগারেশনকে প্রয়োজনীয় হিসাবে পরিবর্তন করেন (উদাহরণের সংখ্যা; নতুন ভিপিসি; অঞ্চল / প্রাপ্যতা অঞ্চল ইত্যাদি)।
  4. গিট কনফিগারেশনটি পুশ হয়েছে এবং ডিওওএসএস স্কোয়াডের কোনও সদস্য কর্তৃক স্যানিটি পরীক্ষা করার জন্য একটি অনুরোধ জমা দেওয়া হয়েছে।
  5. অনুমোদিত হলে, নির্মাণ এবং মোতায়েনের জন্য সিআইকে ওয়েবহুক কল করে (এই সময়ে একাধিক পরিবেশকে কীভাবে ভাগ করা যায় তা নিশ্চিত নয়)

সম্পাদনা 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স্টেজের মধ্যে কিছু পরিবর্তন হওয়ার ঝুঁকি ছাড়াই কী চালানো হবে (যদিও লক করা এটির সাথে সহায়তা করে)। এই প্ল্যান ফাইলটি মুছতে ভুলবেন না কারণ এটিতে সম্ভবত প্লেইন "গোপন" ভেরিয়েবল থাকতে পারে।

সামগ্রিকভাবে আমরা টেরফর্ম নিয়ে খুব খুশি এবং যুক্ত হওয়া নতুন বৈশিষ্ট্যগুলি শিখতে এবং উন্নত করতে থাকি।


এই উত্তরটির পরে আপনার কোনও ভাগ্য / সমস্যা আছে? আপনার আমি যা করতে চাই তা দেখতে অনেকটা মনে হচ্ছে তবে আপনি আমার চেয়ে আরও বেশি হতে পারেন।
মার্ক ইয়ং

3
আমি কৌতূহল করছি কেন আপনি ভাবেন যে tfstate ফাইলগুলি গিটে সংরক্ষণ করা উচিত নয়? পুরানো রাজ্যটি সংরক্ষণের পক্ষে উপযুক্ত নয়, বা অন্য কোনও সমস্যা রয়েছে কি?
আগবডিকে

3
@agbodike - একক বিকাশকারী বা খুব ছোট দলের টিফস্টেটের অংশ হিসাবে কাজ করার সময় যতক্ষণ না নিয়মিত প্রতিশ্রুতিবদ্ধ হয় এবং দ্বন্দ্ব এড়ানোর জন্য চাপ দেওয়া হয় ততক্ষণ গিটে রাখা যেতে পারে। আমার পরবর্তী পদক্ষেপটি তাদের দূরবর্তী রাষ্ট্রের ডক্স অনুযায়ী এস 3 এ সেট আপ করা হয়েছে (এটি আরও বলেছে: "এটি টেরারফর্মের সাথে একটি দলে জটিল কাজ করায় এটি মেশানো দ্বন্দ্বের ঘন ঘন উত্স কারণ। রিমোট স্টেট এই সমস্যাগুলি হ্রাস করতে সহায়তা করে।") । বেশিরভাগ জিনিসের মতোই যদিও ভাল টিম যোগাযোগ কৌশল / রাষ্ট্রকে ধরে রাখার কৌশল অবহেলা না করে বেশিরভাগ / সমস্ত বিষয় উপশম করতে সহায়তা করতে পারে:
ইওয়ান

1
@ থিথার - আমি ভয় করি যে আমার মূল সংগ্রহস্থল মালিকানাধীন তবে যদিও আমি বর্তমানে একটি ব্যক্তিগত একটি নিয়ে কাজ করছি যা আমি খুব নিকটে ভবিষ্যতে প্রকাশ্যে উপলব্ধ করব।
ইভান

2
গিট রেপোতে কোন ভাগ্য নেই ইভান? আপনি কি করছেন তা দেখতে আমি পছন্দ করি।
ডেভিড

85

আমরা টেরফর্মটি ভারী ব্যবহার করি এবং আমাদের প্রস্তাবিত সেটআপটি নিম্নরূপ:

ফাইল বিন্যাস

আমরা আপনার প্রতিটি পরিবেশের জন্য টেরেরফর্ম কোডটি (যেমন স্টেজ, প্রোড, কিউএ) টেমপ্লেটের পৃথক সেটে (এবং সেইজন্য পৃথক .tfstateফাইল) সংরক্ষণ করার পরামর্শ দিচ্ছি । এটি গুরুত্বপূর্ণ যাতে আপনার পৃথক পরিবেশগুলি পরিবর্তনগুলি করার সময় একে অপরের থেকে প্রকৃতপক্ষে বিচ্ছিন্ন হয়। অন্যথায়, মঞ্চায় কিছু কোড নিয়ে গণ্ডগোল করার সময়, কিছুটা খুব সহজেই উত্সাহিত করা খুব সহজ। দেখুন Terraform, VPC, এবং আপনি env প্রতি একটি tfstate ফাইল কেন চান কেন একটি রঙিন আলোচনার জন্য।

অতএব, আমাদের সাধারণ ফাইল লেআউটটি দেখতে এমন দেখাচ্ছে:

stage
   main.tf
   vars.tf
   outputs.tf
prod
   main.tf
   vars.tf
   outputs.tf
global
   main.tf
   vars.tf
   outputs.tf

পর্যায়ের ভিপিসির সমস্ত টেরেরফর্ম কোডটি stageফোল্ডারে যায়, প্রোপ ভিপিসির সমস্ত কোড ফোল্ডারে যায় এবং ভিপিসির prodবাইরে যে সমস্ত কোড থাকে (যেমন আইএএম ব্যবহারকারী, এসএনএস বিষয়, এস 3 বালতি) globalফোল্ডারে যায় ।

নোট করুন যে, কনভেনশন করে আমরা সাধারণত আমাদের টেরফর্ম কোডটি 3 টি ফাইলে বিভক্ত করি:

  • vars.tf: ইনপুট ভেরিয়েবল।
  • outputs.tf: আউটপুট ভেরিয়েবল।
  • main.tf: আসল সম্পদ।

মডিউল

সাধারণত, আমরা দুটি ফোল্ডারে আমাদের অবকাঠামো সংজ্ঞায়িত করি:

  1. infrastructure-modules: এই ফোল্ডারে ছোট, পুনরায় ব্যবহারযোগ্য, সংস্করণযুক্ত মডিউল রয়েছে। প্রতিটি মডিউলটিকে কীভাবে কোনও ভিপিসি বা ডেটাবেসগুলির মতো একক অবকাঠামো তৈরি করতে হয় তার নীলনকশা হিসাবে ভাবেন।
  2. infrastructure-live: এই ফোল্ডারে আসল লাইভ, চলমান অবকাঠামো রয়েছে যা এটি মডিউলগুলিকে একত্রিত করে তৈরি করে infrastructure-modules। আপনার ব্লুপ্রিন্টগুলি থেকে আপনি তৈরি প্রকৃত বাড়ি হিসাবে এই ফোল্ডারে কোডটিকে ভাবুন।

একটি টেরফর্ম মডিউল হ'ল কোনও ফোল্ডারে টেরাফর্ম টেম্পলেটগুলির কেবল কোনও সেট। উদাহরণস্বরূপ, আমরা একটি ফোল্ডার নামক থাকতে পারে vpcমধ্যে infrastructure-modulesএকটি একক VPC জন্য সব রুট টেবিল, ভিন্ন সাব-নেট'র, গেটওয়ে, ACLs যে সংজ্ঞায়িত, ইত্যাদি:

infrastructure-modules
   vpc
     main.tf
     vars.tf
     outputs.tf

আমরা তখন যে মডিউল ব্যবহার করতে পারেন infrastructure-live/stageএবং infrastructure-live/prodপর্যায় ও প্রড VPCs তৈরি করুন। উদাহরণস্বরূপ, এখানে দেখতে যা দেখতে infrastructure-live/stage/main.tfপারে তা এখানে :

module "stage_vpc" {
  source = "git::git@github.com:gruntwork-io/module-vpc.git//modules/vpc-app?ref=v0.0.4"

  vpc_name         = "stage"
  aws_region       = "us-east-1"
  num_nat_gateways = 3
  cidr_block       = "10.2.0.0/18"
}

মডিউলটি ব্যবহার করতে, আপনি উত্সটি ব্যবহার করুন moduleএবং এর sourceক্ষেত্রটি আপনার হার্ড ড্রাইভে স্থানীয় source = "../infrastructure-modules/vpc"উদাহরণে চিহ্নিত করুন (উদাঃ ) অথবা উপরের উদাহরণ হিসাবে একটি গিট ইউআরএল ( মডিউল উত্স দেখুন )। গিট ইউআরএলটির সুবিধা হ'ল আমরা একটি নির্দিষ্ট গিট শ 1 বা ট্যাগ ( ref=v0.0.4) নির্দিষ্ট করতে পারি । এখন, আমরা কেবল আমাদের অবকাঠামোকে ছোট ছোট মডিউলগুলির একটি গোছা হিসাবে সংজ্ঞায়িত করি না, তবে আমরা সেইগুলি মডিউলগুলি সংস্করণ করতে পারি এবং প্রয়োজনীয়তার সাথে যত্ন সহকারে আপডেট বা রোলব্যাক করতে পারি।

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

রাষ্ট্র

আপনি যখন উত্স তৈরি করতে টেরারফর্ম ব্যবহার করেন (উদাঃ ইসি 2 উদাহরণস্বরূপ, ডাটাবেসগুলি, ভিপিসি), এটি কোনও .tfstateফাইলে কী তৈরি করেছে সে সম্পর্কে তথ্য রেকর্ড করে । এই সংস্থানগুলিতে পরিবর্তন আনতে, আপনার দলের প্রত্যেকের এই একই .tfstateফাইলে অ্যাক্সেস থাকা দরকার , তবে আপনার এটি গিটে পরীক্ষা করা উচিত নয় ( কেন তা ব্যাখ্যা করার জন্য এখানে দেখুন )।

পরিবর্তে, আমরা টেরাফর্ম রিমোট স্টেট.tfstate সক্ষম করে এস 3-এ ফাইলগুলি সঞ্চয় করার প্রস্তাব দিচ্ছি , যা আপনি প্রতিবার টেরফর্ম চালানোর সময় সর্বশেষতম ফাইলগুলিকে স্বয়ংক্রিয়ভাবে চাপ / টানবেন। আপনার এস 3 বালতিতে সংস্করণ সক্ষম করার বিষয়টি নিশ্চিত করুন যাতে .tfstateআপনি কোনওভাবে সাম্প্রতিকতম সংস্করণটিকে দূষিত করার ক্ষেত্রে আপনি পুরানো ফাইলগুলিতে ফিরে যেতে পারেন । তবে, একটি গুরুত্বপূর্ণ নোট: টেরফর্ম লকিং সরবরাহ করে না । সুতরাং যদি দুটি দলের সদস্য terraform applyএকই .tfstateফাইলে একই সময়ে চালায় তবে তারা একে অপরের পরিবর্তনগুলি ওভাররাইট করে।

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

আরও পড়া

আমরা স্রেফ ব্লগ পোস্টগুলির একটি ধারাবাহিক সূচনা করেছি যার নাম টেরেফর্মের জন্য একটি বিস্তৃত গাইড যা বাস্তব বিশ্বে টেরফর্ম ব্যবহারের জন্য আমরা শিখেছি এমন সমস্ত সেরা অনুশীলনের বিস্তারিত বর্ণনা দেয়।

আপডেট: টেরারফর্ম ব্লগ পোস্ট সিরিজ সম্পর্কিত ব্যাপক গাইডটি এত জনপ্রিয় হয়েছিল যে আমরা এটিকে টেরফর্ম: আপ এবং রানিং নামে একটি বইতে প্রসারিত করেছি !


আমি মনে করি এটি সঠিক উত্তর। মডিউলগুলি ব্যবহার করুন, সেগুলি সংস্করণ করুন এবং পরিবেশগুলি পৃথক রাখুন।
র‌্যাঙ্গলার

টেরাগ্রান্ট বা অন্য কোনও র‌্যাপার ব্যবহার না করে আপনি যখন কোনও ভিন্ন টেরেরফর্ম উপাদান / পরিবেশ / মডিউল / যা কিছু ব্যবহার করতে চান তবে প্রতিবারই কি রিমোট কনফিগার পদক্ষেপটি পুনরায় চালু করা দরকার?
jmreicha

@ জেমরিচা: আপনি remote configযদি কেবলমাত্র আপনার টেরারফর্ম কনফিগারেশনগুলি পরীক্ষা করে দেখেছেন বা কোনও পূর্ববর্তী দূরবর্তী কনফিগারেশন পরিবর্তন করতে চান তবে আপনাকে চালানো দরকার । টেরফর্ম 0.9 ধারণাটি প্রবর্তন করবে backends, যা এর অনেকগুলি সহজ করবে। আরও তথ্যের জন্য এই পিআর দেখুন ।
ইয়াভেগেনি ব্রিকম্যান

ঠিক তাই আমি বুঝতে পেরেছি - আমি একটি পরিবেশের 'মঞ্চে' কাজ করছি তবে তারপরে 'প্রোড' নিয়ে কাজ শুরু করব। প্রোডের দিকে remote configনির্দেশ করার জন্য আমাকে কমান্ডটি পুনরায় চালু করতে হবে । পরিবেশ অনুসারে বিভিন্ন রাষ্ট্র ধরে নেওয়া। এটা কি সঠিক? আমি v0.9 প্রত্যাশায়।
jmreicha

আপনি যদি .tfদুটি একই পরিবেশে ঠিক একই সেট ফাইল স্থাপন করতে যাচ্ছেন তবে হ্যাঁ, remote configপ্রতিবার আপনি যখন সুইচ করেছেন তখন আপনাকে চালানো দরকার । এটি স্পষ্টতই খুব ত্রুটিযুক্ত প্রবণ, তাই আমি আসলে এই কৌশলটি ব্যবহার করার পরামর্শ দিই না। পরিবর্তে, এই ব্লগ পোস্টে টেরারফর্ম মডিউলগুলি কীভাবে ব্যবহার করবেন সেই সাথে এই ব্লগ পোস্টে প্রস্তাবিত টেরারফর্ম ফাইল লেআউটটি দেখুন
ইয়াভেগেনি ব্রিকম্যান

9

পূর্বে এটি remote configঅনুমোদিত তবে এখন " ব্যাকেন্ডস " দ্বারা প্রতিস্থাপন করা হয়েছে , সুতরাং টেরাফর্ম রিমোট আর উপলভ্য নয়।

terraform remote config -backend-config="bucket=<s3_bucket_to_store_tfstate>" -backend-config="key=terraform.tfstate" -backend=s3
terraform remote pull
terraform apply
terraform remote push

বিশদ জন্য ডক্স দেখুন ।


আপনি যখনই কোনও ভিন্ন টেরেরফর্ম উপাদান / পরিবেশ / মডিউল / যা কিছু নিয়ে কাজ করতে চান তবে প্রতিবারের উত্সটি কি পুনরায় কনফিগার করা দরকার?
jmreicha

6

@ ইয়্যাভজেনি ব্রিকম্যান আরও গভীরতার সাথে আচ্ছাদন করেছেন তবে বিশেষত ওপি-র প্রশ্নের উত্তর দিয়েছেন:

টেরাফর্ম ফাইল এবং স্থিতি পরিচালনার জন্য সেরা অনুশীলন কোনটি?

টিএফ ফাইলগুলির জন্য গিট ব্যবহার করুন। তবে রাষ্ট্র ফাইলগুলি (যেমন tfstate) চেক করবেন না। পরিবর্তে Terragruntএস ফাইলগুলিতে রাষ্ট্র ফাইলগুলি সিঙ্ক / লক করার জন্য ব্যবহার করুন।

তবে আমি কি পাশাপাশি tfstate প্রতিশ্রুতিবদ্ধ?

না।

এটি কি এস 3 এর মতো কোথাও থাকা উচিত?

হ্যাঁ


2

আমি জানি এখানে অনেক উত্তর আছে তবে আমার পদ্ধতির বিষয়টি একেবারেই আলাদা।

   Modules
   Environment management 
   Separation of duties

মডিউল

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

পরিবেশ ব্যবস্থাপনা

আইএসি এসডিএলসি প্রক্রিয়াটি অবকাঠামো পরিচালনার সাথে প্রাসঙ্গিক করে তুলেছে এবং উন্নয়নের অবকাঠামোগত পাশাপাশি উন্নয়নের প্রয়োগের পরিবেশের আশা করা স্বাভাবিক নয় not

  1. আপনার IaC পরিবেশগুলি পরিচালনা করতে ফোল্ডারগুলি ব্যবহার করবেন না। আপনার অবকাঠামোগত কোনও সাধারণ টেম্পলেট নেই বলে এটি প্রবাহিত করে।
  2. পরিবেশের নির্দিষ্টকরণগুলি নিয়ন্ত্রণ করতে একটি একক ওয়ার্কস্পেস এবং ভেরিয়েবল ব্যবহার করবেন না। উদাহরণ: আপনার মডিউলগুলি লিখুন যাতে আপনি যখন পরিবেশের পরিবর্তনশীল পরিবর্তন করেন (var.stage জনপ্রিয়) আপনার প্রয়োজনীয়তা মাপসই পরিকল্পনা পরিবর্তন করে। সাধারণত পরিমাণের পরিমাণ, এক্সপোজার এবং ক্ষমতা সাধারণত পরিবর্তনশীল কনফিগারেশন হওয়ায় পরিবেশগুলি যতটা সম্ভব পৃথক হওয়া উচিত। দেব বেসরকারী টপোলজিতে 1 কোর এবং 1 জিবি র‌্যাম সহ 1 ভিএম এম স্থাপন করতে পারে তবে উত্পাদনটি 2 টি কোর সহ 3 ভিএম এবং অতিরিক্ত পাবলিক টপোলজির সাথে 4 জিবি র‌্যাম হতে পারে। আপনার অবশ্যই আরও ভিন্নতা থাকতে পারে: ডেভ ব্যয় বাঁচানোর জন্য অ্যাপ্লিকেশন হিসাবে একই সার্ভারে ডাটাবেস প্রক্রিয়া চালাতে পারে তবে উত্পাদনের একটি ডেডিকেটেড ডিবি উদাহরণ থাকতে পারে। এই সমস্তগুলি একটি একক ভেরিয়েবল, টের্নারি স্টেটমেন্ট এবং ইন্টারপোলেশন পরিবর্তন করে পরিচালনা করা যায়।

দায়িত্ব পৃথককরণ

আপনি যদি কোনও ছোট সংস্থায় থাকেন বা ব্যক্তিগত অবকাঠামো চালাচ্ছেন এটি সত্যিই প্রয়োগ হয় না তবে এটি আপনাকে আপনার পরিচালনা পরিচালনা করতে সহায়তা করবে।

  1. দায়িত্ব, দায়িত্ব বা দল দ্বারা আপনার অবকাঠামোটি ভেঙে দিন। উদাহরণ: কেন্দ্রীয় আইটি নিয়ন্ত্রণ অন্তর্নিহিত ভাগ করা পরিষেবাদিগুলি (ভার্চুয়াল নেটওয়ার্কগুলি, সাবনেটস, পাবলিক আইপি অ্যাড্রেসগুলি, লগ গ্রুপগুলি, প্রশাসনের সংস্থানগুলি, বহু টেনেন্টেড ডিবিগুলি, ভাগ করা কীগুলি, ইত্যাদি) কেবলমাত্র API টিম তাদের পরিষেবার জন্য প্রয়োজনীয় সংস্থানগুলি নিয়ন্ত্রণ করে (ভিএম, এলবি) , পাবসুব ইত্যাদি) এবং ডেটা উত্স এবং দূরবর্তী স্থিতিশীল লুকের মাধ্যমে কেন্দ্রীয় আইটি পরিষেবাগুলি গ্রাস করুন।
    1. গভর্নমেন্ট টিমের অ্যাক্সেস। উদাহরণ: সেন্ট্রাল আইটি-তে অ্যাডমিনের অধিকার থাকতে পারে তবে এপিআই টিমের কেবলমাত্র পাবলিক ক্লাউড এপিআই-এর একটি সীমিত সেট অ্যাক্সেস রয়েছে।

এটি মুক্তির উদ্বেগগুলিতেও সহায়তা করে কারণ আপনি কিছু সংস্থান খুব কমই বদলে যাবেন যখন অন্যরা সর্বদা পরিবর্তিত হয়। বিচ্ছেদ ঝুঁকি এবং জটিলতা দূর করে।

এই কৌশলটি এডাব্লুএসের বহু অ্যাকাউন্ট কৌশলের সাথে সমান্তরাল আঁকছে। আরও তথ্যের জন্য একটি পঠন আছে।

সি আই / সিডি

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

এনবি মোবাইলে লিখিত তাই কোনও ত্রুটি ক্ষমা করুন।


0

উত্তরগুলি খুব শক্ত এবং তথ্যপূর্ণ হওয়ার আগে, আমি আমার 2 সেন্ট এখানে যুক্ত করার চেষ্টা করব

কাঠামোগত কোডের জন্য সাধারণ সুপারিশ

  1. স্বল্প সংখ্যক সংস্থান নিয়ে কাজ করা সহজ এবং দ্রুত:

    • সংস্থানগুলির স্থিতি যাচাই করতে Cmds terraform planএবং terraformউভয় ক্লাউড এপিআই কলগুলি প্রয়োগ করে।
    • যদি আপনার একক রচনাতে আপনার পুরো অবকাঠামো থাকে তবে এটি বেশ কয়েক মিনিট সময় নিতে পারে (এমনকি যদি আপনার একই ফোল্ডারে বেশ কয়েকটি ফাইল থাকে)।
  2. ব্লাস্ট ব্যাসার্ধ কম সংস্থান সহ ছোট:

    • একে অপরের সাথে সম্পর্কযুক্ত সংস্থানগুলি পৃথক রচনাগুলিতে (ফোল্ডার) স্থাপন করে কোনও সমস্যা হয়ে থাকলে ঝুঁকি হ্রাস করে।
  3. প্রত্যন্ত অবস্থা ব্যবহার করে আপনার প্রকল্প শুরু করুন:

    • আপনার ল্যাপটপটি সত্যের আপনার অবকাঠামোগত উত্সের জন্য কোনও স্থান নয়।
    • গিটে একটি tfstateফাইল পরিচালনা করা দুঃস্বপ্ন।
    • পরে যখন অবকাঠামোগত স্তরগুলি কোনও দিকে বাড়তে শুরু করে (নির্ভরতা বা সংস্থানগুলির সংখ্যা) number
    • উদাহরণ মডিউল: https://github.com/cloudposse/terraform-aws-tfstate-backkend
    • রেফ সরঞ্জাম: https://github.com/camptocamp/terraboard
  4. একটি সামঞ্জস্যপূর্ণ কাঠামো এবং নামকরণ কনভেনশন অনুশীলন করার চেষ্টা করুন:

    • পদ্ধতিগত কোড, টেরফর্মের মতো কোডটি লোকদের প্রথমে পড়ার জন্য লেখা উচিত, এখন থেকে ছয় মাস পরে পরিবর্তনগুলি ঘটলে ধারাবাহিকতা সাহায্য করবে।
    • টেরফর্ম স্টেট ফাইলটিতে সংস্থানগুলি সরিয়ে নেওয়া সম্ভব তবে আপনার যদি বেমানান কাঠামো এবং নামকরণ করা থাকে তবে তা করা আরও কঠিন।
  5. রিসোর্স মডিউলগুলি যতটা সম্ভব প্লেইন রাখুন।

  6. না হার্ড কোড মান যা ভেরিয়েবল হিসাবে পাস করা যেতে পারে বা তথ্য উৎস ব্যবহার আবিষ্কার করেন।

  7. dataউত্স এবং terraform_remote_stateবিশেষত রচনাগুলির মধ্যে অবকাঠামোগত মডিউলগুলির মধ্যে আঠালো হিসাবে ব্যবহার করুন ।

( রেফার নিবন্ধ: https://www.terraform-best-practices.com/code- কাঠামো )


উদাহরণ:

সংখ্যক সংখ্যক সংস্থান নিয়ে কাজ করা সহজ এবং দ্রুততর তাই নীচে আমরা একটি প্রস্তাবিত কোড বিন্যাস উপস্থাপন করি।

দ্রষ্টব্য: প্রতিটি প্রকল্পের নিজস্ব নির্দিষ্ট বৈশিষ্ট্য রয়েছে বলে যথাযথভাবে রেফারেন্সটি অনুসরণ করা উচিত নয়

.
├── 1_tf-backend #remote AWS S3 + Dynamo Lock tfstate 
   ├── main.tf
   ├── ...
├── 2_secrets
   ├── main.tf
   ├── ...
├── 3_identities
   ├── account.tf
   ├── roles.tf
   ├── group.tf
   ├── users.tf
   ├── ...
├── 4_security
   ├── awscloudtrail.tf
   ├── awsconfig.tf
   ├── awsinspector.tf
   ├── awsguarduty.tf
   ├── awswaf.tf
   └── ...
├── 5_network
   ├── account.tf
   ├── dns_remote_zone_auth.tf
   ├── dns.tf
   ├── network.tf
   ├── network_vpc_peering_dev.tf
   ├── ...
├── 6_notifications
   ├── ...
├── 7_containers
   ├── account.tf
   ├── container_registry.tf
   ├── ...
├── config
   ├── backend.config
   └── main.config
└── readme.md

0

আমি বিশ্বাস করি অবকাঠামোকে অর্কেস্ট্রেট করার জন্য টেরাপের ব্যবহার করার সময় কয়েকটি সেরা অনুশীলন অনুসরণ করতে হবে

  1. আবার একই কোডটি লিখবেন না (পুনরায় ব্যবহারযোগ্যতা)
  2. পরিবেশের কনফিগারেশনটিকে সহজেই বজায় রাখতে আলাদা রাখুন।
  3. কনক্যুরঞ্জি লকিং পরিচালনা করতে রিমোট ব্যাকএন্ড এস 3 (এনক্রিপ্ট করা) এবং ডায়নামো ডিবি ব্যবহার করুন
  4. একটি মডিউল তৈরি করুন এবং একাধিক সময় মূল অবকাঠামোতে সেই মডিউলটি ব্যবহার করুন, এটি পুনরায় ব্যবহারযোগ্য ফাংশনের মতো যা বিভিন্ন পরামিতি পেরিয়ে একাধিক সময় বলা যেতে পারে।

একাধিক পরিবেশ হ্যান্ডেল করুন

বেশিরভাগ সময় প্রস্তাবিত উপায় হ'ল একাধিক পরিবেশ হ্যান্ডেল করার জন্য টেরাফর্ম 'ওয়ার্কস্পেস' ব্যবহার করা তবে আমি বিশ্বাস করি কোনও সংস্থায় কাজের পদ্ধতির ভিত্তিতে ওয়ার্কস্পেসের ব্যবহারের পরিবর্তিত হতে পারে। অন্যরা পরিবেশের অবস্থা পৃথক করার জন্য আপনার প্রতিটি পরিবেশের জন্য টেরেরফর্ম কোড সংরক্ষণ করছে (যেমন স্টেজ, প্রোড, কিউএ)। তবে, এক্ষেত্রে আমরা অনেক জায়গায় একই কোডটি অনুলিপি করছি।

├── main.tf
├── dev
   ├── main.tf
   ├── output.tf
   └── variables.tf
└── prod
├── main.tf
├── output.tf
└── variables.tf

আমি প্রতিটি পরিবেশ ফোল্ডারে রেখে একই টেরাফর্ম কোডটির সদৃশকরণ পরিচালনা এবং এড়াতে কিছু ভিন্ন পদ্ধতির অনুসরণ করেছি যেহেতু আমি বিশ্বাস করি যে বেশিরভাগ সময় সমস্ত পরিবেশ 90% একই থাকে।

├── deployment
 ├── 01-network.tf
 ├── 02-ecs_cluster.tf
 ├── 03-ecs_service.tf
 ├── 04-eks_infra.tf
 ├── 05-db_infra.tf
 ├── 06-codebuild-k8s.tf
 ├── 07-aws-secret.tf
 ├── backend.tf
 ├── provider.tf
 └── variables.tf
├── env
 ├── dev
  ├── dev.backend.tfvar
  └── dev.variables.tfvar
 └── prod
 ├── prod.backend.tfvar
 └── prod.variables.tfvar
├── modules
 └── aws
 ├── compute
  ├── alb_loadbalancer
  ├── alb_target_grp
  ├── ecs_cluster
  ├── ecs_service
  └── launch_configuration
 ├── database
  ├── db_main
  ├── db_option_group
  ├── db_parameter_group
  └── db_subnet_group
 ├── developertools
 ├── network
  ├── internet_gateway
  ├── nat_gateway
  ├── route_table
  ├── security_group
  ├── subnet
  ├── vpc
 └── security
 ├── iam_role
 └── secret-manager
└── templates

পরিবেশ সম্পর্কিত কনফিগারেশন

পরিবেশ সম্পর্কিত কনফিগারেশন এবং প্যারামিটারগুলিকে একটি পরিবর্তনশীল ফাইলে পৃথক রাখুন এবং পরিকাঠামোটি কনফিগার করতে সেই মানটি পাস করুন। যেমন নীচের হিসাবে

  • dev.backend.tfvar

      region = "ap-southeast-2"
      bucket = "dev-samplebackendterraform"
      key = "dev/state.tfstate"
      dynamo_db_lock = "dev-terraform-state-lock"
  • dev.variable.tfvar

    environment                     =   "dev"
    vpc_name                        =   "demo"
    vpc_cidr_block                  =   "10.20.0.0/19"
    private_subnet_1a_cidr_block    =   "10.20.0.0/21"
    private_subnet_1b_cidr_block    =   "10.20.8.0/21"
    public_subnet_1a_cidr_block     =   "10.20.16.0/21"
    public_subnet_1b_cidr_block     =   "10.20.24.0/21"

অবকাঠামো অংশের শর্তসাপেক্ষ এড়িয়ে যাওয়া

Env নির্দিষ্ট ভেরিয়েবল ফাইলে একটি কনফিগারেশন তৈরি করুন এবং সেই ভেরিয়েবলের ভিত্তিতে সেই অংশটি তৈরি বা এড়িয়ে যাওয়ার সিদ্ধান্ত নিন decide প্রয়োজনের ভিত্তিতে এইভাবে অবকাঠামোর নির্দিষ্ট অংশটি এড়ানো যায়।

variable vpc_create {
   default = "true"
}

module "vpc" {
  source = "../modules/aws/network/vpc"
  enable = "${var.vpc_create}"
  vpc_cidr_block = "${var.vpc_cidr_block}"
  name = "${var.vpc_name}"
 }

 resource "aws_vpc" "vpc" {
    count                = "${var.enable == "true" ? 1 : 0}"
    cidr_block           = "${var.vpc_cidr_block}"
    enable_dns_support   = "true"
   enable_dns_hostnames = "true"
}

প্রতিটি পরিবেশের জন্য ইনফ্রা পরিবর্তনগুলি সিডি এবং প্রয়োজনীয় পরিবেশ ফোল্ডারে সিডি করতে নীচে কমান্ডের প্রয়োজন is

  terraform init -var-file=dev.variables.tfvar -backend-config=dev.backend.tfvar ../../deployment/

  terraform apply -var-file=dev.variables.tfvar ../../deployment

রেফারেন্সের জন্য: https://github.com/mattyait/devops_terraform


0

সাবফোল্ডারগুলির ধারণাটি আমি পছন্দ করি না কারণ এর ফলে পরিবেশ প্রতি বিভিন্ন উত্সের ফলাফল হবে এবং এটি প্রবাহিত হতে থাকে to

সর্বোত্তম পদ্ধতির মধ্যে রয়েছে সমস্ত পরিবেশের জন্য একটি স্ট্যাক রাখা (যাক দেব, প্রিপ্রড এবং প্রোড বলতে দিন)। একক পরিবেশের ব্যবহারে কাজ করা terraform workspace

terraform workspace new dev

এটি একটি নতুন কর্মক্ষেত্র তৈরি করে। এটিতে একটি ডেডিকেটেড স্টেট ফাইল এবং আপনার কোডটিতে terraform.workspaceআপনি ব্যবহার করতে পারেন এমন ভেরিয়েবল অন্তর্ভুক্ত রয়েছে ।

resource "aws_s3_bucket" "bucket" {
  bucket = "my-tf-test-bucket-${terraform.workspace}"
}

এইভাবে আপনি বালতি কল পাবেন

  • আমার-TF-পরীক্ষা বালতি-দেব
  • আমার-TF-পরীক্ষা বালতি-preprod
  • আমার-TF-পরীক্ষা বালতি-শঙ্কু

উপরের কর্মক্ষেত্রে প্রয়োগ করার পরে ( terraform workspace select <WORKSPACE>পরিবেশ পরিবর্তন করার জন্য ব্যবহার করুন )। কোডটিকে আরও বহু-অঞ্চল-প্রমাণ করার জন্য এটি এইভাবে করুন:

data "aws_region" "current" {}

resource "aws_s3_bucket" "bucket" {
  bucket = "my-tf-test-bucket-${data.aws_region.current.name}-${terraform.workspace}"
}

পেতে (আমাদের পূর্ব -1 অঞ্চলের জন্য)

  • আমার-TF-পরীক্ষা বালতি-উস-পূর্ব-1-দেব
  • আমার-TF-পরীক্ষা বালতি-উস-পূর্ব-1-preprod
  • আমার-TF-পরীক্ষা বালতি-উস-পূর্ব-1-শঙ্কু

0

কিছু Terraform সেরা অভ্যাস অনুসরণ করুন:

  1. কঠোর কোডিং এড়ান: কখনও কখনও বিকাশকারীরা সরাসরি ম্যানুয়ালি সংস্থান তৈরি করে। কোডগুলিতে অন্তর্ভুক্ত করতে আপনাকে এই সংস্থানগুলি চিহ্নিত করতে হবে এবং টেরফর্ম আমদানি ব্যবহার করতে হবে। একটি নমুনা:

    অ্যাকাউন্ট_নাম্বার = "123456789012" অ্যাকাউন্ট_ালিয়াস = "মাইকম্পানি"

  2. ডকারের ধারক থেকে টেরাফর্মটি চালান: টেরাফর্ম একটি অফিসিয়াল ডকার ধারক প্রকাশ করে যা আপনাকে সহজেই নিয়ন্ত্রণ করতে পারে যে আপনি কোন সংস্করণটি চালাতে পারেন।

আপনি যখন সিআই / সিডি পাইপলাইনে আপনার বিল্ডিং কাজটি সেট করেন তখন টেরাফর্ম ডকার ধারকটি চালানোর পরামর্শ দেওয়া হয়।

TERRAFORM_IMAGE=hashicorp/terraform:0.11.7
TERRAFORM_CMD="docker run -ti --rm -w /app -v ${HOME}/.aws:/root/.aws -v ${HOME}/.ssh:/root/.ssh -v `pwd`:/app $TERRAFORM_IMAGE"

আরও তথ্যের জন্য, দয়া করে আমার ব্লগটি দেখুন: https://medium.com/tech-darwinbox/how-darwinbox-manages-inf पाया-at-scale-with-terraform-371e2c5f04d3


0

আমি এই থ্রেডে অবদান রাখতে চাই।

  • আপনি টেরাফর্ম ক্লাউড ব্যবহার না করে এটি সম্ভবত AWS S3 + ডায়নামোডিবি হবে D
  • উত্পাদন এবং নন-প্রোড ব্যাকএন্ডের পৃথক অবকাঠামো (নেটওয়ার্ক + আরবিএসি)।
  • কোনও মনোনীত নেটওয়ার্কের (যেমন ডিপ্লোমেন্ট এজেন্ট পুল) বাইরে থেকে স্টেট ফাইলগুলিতে (নেটওয়ার্ক অ্যাক্সেস এবং আরবিএসি) অ্যাক্সেস অক্ষম করার পরিকল্পনা করুন।
  • রান-টাইম পরিবেশের সাথে টেরফর্ম ব্যাকএন্ড অবকাঠামো রাখবেন না। আলাদা অ্যাকাউন্ট ব্যবহার করুন।
  • পরিবর্তনগুলি এবং স্টেট-ফাইলগুলি হারাতে এড়াতে এবং টেরফর্মের রাজ্যের ইতিহাস বজায় রাখতে আপনার টেরেমফর্ম ব্যাকেন্ডে অবজেক্ট সংস্করণ সক্ষম করুন।

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

সিআই / সিডি পাইপলাইনগুলির জন্য নির্দেশিকাগুলি সহ বিশদগুলিতে এটি জুড়ে একটি দীর্ঘ সেরা অনুশীলন ব্লগ দেখুন


-1

আপনি যদি এখনও আরও ভাল সমাধানের সন্ধান করেন তবে ওয়ার্কস্পেসগুলি দেখুন যা বিভিন্ন পরিবেশের ফোল্ডারের কাঠামোটি রক্ষণাবেক্ষণ করতে পারে ওয়ার্কস্পেসের নির্দিষ্ট ভেরিয়েবলগুলি থাকতে পারে।

হিসাবে ইয়েভগেনি Brikman উল্লিখিত এটি একটি মডিউল কাঠামো আছে ভাল।


-1

উপরের পরামর্শের সাথে একসাথে রাজ্যগুলি পরিচালনা এবং সংরক্ষণের জন্য টেরফর্ম ক্লাউড ব্যবহার করুন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.