مضامین

ٹیم میں Terraform: اسٹیٹ کی تقسیم، اثر کا دائرہ اور جائزہ شدہ پلانز

Terraform اسٹیٹ کو کیسے تقسیم کریں، CI میں پلان چلائیں اور صرف وہی نافذ کریں جس کا جائزہ لیا گیا ہو، تاکہ انفراسٹرکچر کی تبدیلیاں خطرہ نہیں، معمول بن جائیں۔

مثالیں عمومی اور وضاحتی ہیں۔ یہ کسی کلائنٹ کے ماحول سے نہیں لی گئیں: حدود اور ترتیبات کو اپنے نظام کے مطابق ڈھالیں۔

اسٹیٹ فائل ہی اصل حد ہے

ہر terraform apply اس اسٹیٹ میں کچھ بھی بدل سکتا ہے جس پر وہ کام کرتا ہے۔ اس لیے خطرے کی اکائی ماڈیول نہیں، اسٹیٹ ہے۔ پورے ماحول کے لیے ایک ہی اسٹیٹ ہو تو DNS ریکارڈ کی ایک غلطی اور پروڈکشن ڈیٹا بیس کی تبدیلی ایک ہی پلان سے گزرتی ہیں — اور اس پلان کے حساب میں منٹ لگتے ہیں۔

زندگی کے چکر اور اثر کے دائرے کے لحاظ سے تقسیم کریں

ان وسائل کو اکٹھا رکھیں جو ساتھ بدلتے اور ساتھ ناکام ہوتے ہیں۔ ایک عام تقسیم ہر ماحول میں انہیں الگ کرتی ہے:

  • بنیاد: اکاؤنٹس، نیٹ ورکس، DNS زونز — کبھی کبھار بدلتے ہیں۔
  • ڈیٹا: ڈیٹا بیسز، بکٹس، قطاریں — احتیاط سے بدلتے ہیں اور حذف ہونے سے محفوظ رہتے ہیں۔
  • کمپیوٹ اور سروسز: کلسٹرز، فنکشنز، لوڈ بیلنسرز — اکثر بدلتے ہیں۔

ہر پرت نیچے والی پرت کے آؤٹ پٹس پڑھتی ہے اور کبھی اس کے وسائل کا انتظام نہیں کرتی۔ ماحول ایک جیسے ماڈیولز استعمال کرتے ہیں، مگر ان کی اسٹیٹ اور اسناد الگ ہوتی ہیں، تاکہ staging میں apply پروڈکشن کو نہ چھو سکے۔

ریموٹ اسٹیٹ، لاکنگ اور ورژنز

  • اسٹیٹ کو ایسے ریموٹ بیک اینڈ میں رکھیں جس میں لاکنگ اور ورژننگ فعال ہو — کبھی Git میں نہیں، کبھی لیپ ٹاپ پر نہیں۔
  • ڈیپنڈنسی لاک فائل (.terraform.lock.hcl) کمٹ کریں اور ماڈیول ورژنز مقرر کریں، تاکہ آج کا پلان اور اگلے مہینے کا پلان ایک ہی کوڈ چلائیں۔
  • اسٹیٹ فل وسائل کو prevent_destroy اور پرووائیڈر کے اپنے حذف سے تحفظ کے ذریعے بچائیں۔

ہر پل ریکویسٹ پر پلان، جائزہ شدہ کا apply

ہر تبدیلی کے لیے CI میں terraform plan چلائیں اور نتیجہ پل ریکویسٹ پر پوسٹ کریں۔ منظوری کے بعد دوبارہ پلان کرنے کے بجائے محفوظ کیا گیا پلان نافذ کریں، تاکہ پروڈکشن کو بالکل وہی ملے جو جائزہ لینے والوں نے پڑھا؛ اگر اس دوران اسٹیٹ بدل جائے تو Terraform پرانا پلان مسترد کر دیتا ہے۔ پائپ لائن کو OIDC فیڈریشن کے ذریعے مختصر مدتی اسناد سے تصدیق کرنی چاہیے، سیکرٹس میں رکھی طویل مدتی کلیدوں سے نہیں۔

terraform init -input=false
terraform plan -input=false -lock-timeout=5m -out=tfplan
terraform show -no-color tfplan > plan.txt   # attach to the pull request

# after approval, applying the same saved plan:
terraform apply -input=false tfplan

وقتاً فوقتاً ڈرفٹ کا پتا لگائیں

کنسول میں تبدیلیاں اب بھی ہوتی ہیں، عموماً انسیڈنٹس کے دوران۔ terraform plan -detailed-exitcode چلانے والا شیڈولڈ جاب انہیں ڈھونڈ لیتا ہے: ایگزٹ کوڈ 0 کا مطلب کوئی تبدیلی نہیں، 2 کا مطلب حقیقی انفراسٹرکچر کوڈ سے مختلف ہے، اور 1 کا مطلب ایرر۔ 2 کو ٹکٹ میں بدلیں، پھر تبدیلی کو کوڈ میں شامل کریں یا واپس لیں۔

apply سے پہلے پالیسی

“کوئی عوامی بکٹ نہیں” یا “ہر وسیلے پر مالک کا ٹیگ” جیسے قواعد لمبے دن کے آخر میں کسی جائزہ کار کے بجائے مشین بہتر جانچتی ہے۔ Conftest کے ذریعے Open Policy Agent جیسے پالیسی ایز کوڈ ٹولز CI میں پلان کی JSON صورت (terraform show -json) کا جائزہ لے کر مرج روک سکتے ہیں۔

رابطہ

اپنے سیٹ اپ پر دوسری رائے چاہیے؟

اپنے نظام کی مختصر تفصیل بھیجیں۔ ایک سینئر انجینئر ایک کاروباری دن میں تحریری جواب دیتا ہے۔

اپنے انفراسٹرکچر پر بات کریں