اطمینان از انعطاف پذیری IaC خود در برابر قطعی منطقه ای

Summarize this content to 400 words in Persian Lang
زیرساخت های ابری مدرن باید با رویدادهای پیش بینی نشده، از جمله قطعی های منطقه ای مقابله کنند. اگرچه نادر است، اما این وقفه ها می توانند برنامه های مهم را در صورتی که پیش بینی نشده باشند، از بین ببرند. در این مقاله، ما یک استراتژی ساده و در عین حال قدرتمند را بررسی خواهیم کرد تا زیرساخت شما را به عنوان کد (IaC) در پلتفرم ابری Google (GCP) در برابر چنین قطعی با استفاده از Terraform/Terragrunt مقاوم کنیم.
ما روی یک نکته اصلی تمرکز خواهیم کرد: ماژول های Terragrunt خود را بر اساس منطقه ساختار دهید بنابراین شما می توانید به سرعت و تمیز یک منطقه را از طریق یک پیکربندی ساده غیرفعال کنید. این رویکرد به شما اجازه می دهد تا کنترل وضعیت زیرساخت خود را بدون تغییرات عمده حفظ کنید.
مشکل: اگر منطقه ای از دسترس خارج شود چه؟
فرض کنید برنامه شما به یک منطقه واحد در GCP بستگی دارد europe-west9. اگر این منطقه در دسترس نباشد، همه منابع مرتبط شما – نمونه ها، پایگاه های داده، متعادل کننده بار – کار نمی کنند. عواقب؟ وقفه در خدمات، ضررهای مالی، تاثیر بر شهرت.
برای رویارویی با این چالشها، اکثر طرحهای تداوم/ازسرگیری کسبوکار ایجاد یک زیرساخت چند منطقهای و بسیار در دسترس را پیشنهاد میکنند که به شما امکان میدهد در صورت قطعی در کل منطقه (آتش سوزی، جنگ، قطع برق مثال).
در اکثر زیرساختهای مدرن، فناوریهایی مانند Terraform برای خودکارسازی استقرار زیرساخت از طریق کد استفاده میشوند. با این کار از رویه های دستی و دخالت مستقیم در صدها دستگاه جلوگیری می شود.
اما وقتی یک منطقه سقوط می کند چه اتفاقی می افتد؟ آیا ما همچنان از Terraform اسمی استفاده می کنیم؟ خب کار به این سادگی نیست، زیرا هنگام تازه کردن منابع، API ارائه دهنده ابر مورد علاقه شما ممکن است به سختی پاسخ دهد یا پاسخ نادرستی بدهد: منبع یا منبع موجود یافت نشد. به طور خلاصه، ما می توانیم به سرعت متوجه شویم که به صورت دستی تعداد بی شماری از منابع غیرقابل دسترس را از دولت حذف کرده و دیگران را وارد می کنیم.
متوجه شده اید که فراتر از جداسازی ایالت به چندین ایالت با محدوده محدود، آن را نیز بر اساس منطقه تقسیم می کنیم تا آنها را مستقل کنیم.
نکته: ماژول های Terragrunt خود را بر اساس منطقه ساختار دهید
Terragrunt ابزاری است که Terraform را با سادهسازی مدیریت پیکربندیهای پیچیده تکمیل میکند. با آن، می توانید فایل های Terraform خود را در ماژول های جداگانه بر اساس منطقه سازماندهی کنید. این به شما امکان می دهد:
به راحتی یک منطقه را فعال یا غیرفعال کنید.
ایالت های Terraform (که فایل های حالت نیز نامیده می شود) را به صورت مجزا برای هر منطقه مدیریت کنید.
با حفظ ساختار شفاف، خطر خطا را کاهش دهید.
سازماندهی ماژول ها
یک سازمان فایل Terragrunt ممکن است شبیه به این باشد:
infra/
terragrunt.hcl # Configuration globale
regions/
europe-west1/
terragrunt.hcl
europe-west9/
terragrunt.hcl
global/
terragrunt.hcl
modules/
gce/
main.tf
load_balancing/
main.tf
config.yaml
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
محتویات یک فایل Terragrunt برای یک منطقه
در هر پوشه منطقه (به عنوان مثال، regions/europe-west9/terragrunt.hcl، می توانید شامل موارد زیر باشید:
skip = ! local.config[local.region].enabled
terraform {
source = “../../../modules/region”
}
locals {
config = yamldecode(file(find_in_parent_folders(“config.yaml”)))
region = basename(get_terragrunt_dir())
}
inputs = {
region = local.region
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
با این فایل می توانید فعال سازی یک منطقه را به سادگی با تغییر کنترل کنید .enabled. اگر آن را به false، تمام منابع مرتبط با این منطقه نادیده گرفته می شود. در اینجا یک فایل نمونه است config.yaml :
europe-west9:
enabled: true
europe-west1:
enabled: false
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
در این مثال، منطقه پاریس (اروپا-غرب 9) فعال است و بروکسل (اروپا-غرب 1) غیرفعال است. در صورت بروز فاجعه، به سادگی بولین ها را معکوس کنید و از ویژگی استفاده کنید skip، فقط کد Terraform از مناطق عملیاتی اجرا خواهد شد.
پیاده سازی: مثال عملی
1. ماژول های Terraform را ایجاد کنید
با ایجاد یک ماژول Terraform قابل استفاده مجدد برای هر منطقه شروع کنید. به عنوان مثال، در modules/gce/main.tf :
variable “config” {
type = string
}
variable “region” {
type = string
}
resource “google_compute_instance” “example” {
name = “example-instance”
machine_type = “e2-medium”
zone = “${var.region}-b”
boot_disk {
initialize_params {
image = “debian-cloud/debian-11”
}
}
network_interface {
network = “default”
}
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
در اینجا، ماژول نسبت به فعال شدن یا نبودن منطقه آگاه است: کد ساده تر و ایمن تر است زیرا فعال سازی در سطح Terragrunt مدیریت می شود.
2. Terragrunt را پیکربندی کنید
در فایل روت infra/terragrunt.hcl :
include “root” {
path = find_in_parent_folders()
}
remote_state {
backend = “gcs”
config = {
bucket = “tfstates”
prefix = path_relative_to_include()
location = “EU”
}
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
سپس هر منطقه می تواند باطن خود را در درخت سطل داشته باشد.
3. غیرفعال کردن یک منطقه را آزمایش کنید
برای غیرفعال کردن یک منطقه، به سادگی متغیر موجود در فایل را تغییر دهید config.yaml :
europe-west9:
enabled: false
europe-west1:
enabled: true
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
سپس اجرا کنید:
terragrunt run-all –terragrunt-non-interactive init -reconfigure -upgrade
terragrunt run-all –terragrunt-non-interactive apply
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
Terragrunt به طور خودکار تمام ماژول های مرتبط با این منطقه را نادیده می گیرد.
نتیجه گیری: یک IaC آماده رویارویی با موارد غیرمنتظره است
این استراتژی مدیریت موثر خاموشی های منطقه ای در GCP را با ساده سازی مدیریت مناطق از طریق Terragrunt امکان پذیر می کند. با سازماندهی ماژول های خود بر اساس منطقه و استفاده از متغیرهای پیکربندی واضح، می توانید به سرعت زیرساخت خود را بدون خطرات عمده تطبیق دهید.
تاب آوری با برنامه ریزی خوب شروع می شود. برای ساختاربندی پیکربندیهای خود وقت بگذارید و استراتژیهای خود را به طور منظم آزمایش کنید تا اطمینان حاصل کنید که زیرساخت شما در برابر موارد غیرقابل پیشبینی قوی باقی میماند.
زیرساخت های ابری مدرن باید با رویدادهای پیش بینی نشده، از جمله قطعی های منطقه ای مقابله کنند. اگرچه نادر است، اما این وقفه ها می توانند برنامه های مهم را در صورتی که پیش بینی نشده باشند، از بین ببرند. در این مقاله، ما یک استراتژی ساده و در عین حال قدرتمند را بررسی خواهیم کرد تا زیرساخت شما را به عنوان کد (IaC) در پلتفرم ابری Google (GCP) در برابر چنین قطعی با استفاده از Terraform/Terragrunt مقاوم کنیم.
ما روی یک نکته اصلی تمرکز خواهیم کرد: ماژول های Terragrunt خود را بر اساس منطقه ساختار دهید بنابراین شما می توانید به سرعت و تمیز یک منطقه را از طریق یک پیکربندی ساده غیرفعال کنید. این رویکرد به شما اجازه می دهد تا کنترل وضعیت زیرساخت خود را بدون تغییرات عمده حفظ کنید.
مشکل: اگر منطقه ای از دسترس خارج شود چه؟
فرض کنید برنامه شما به یک منطقه واحد در GCP بستگی دارد europe-west9
. اگر این منطقه در دسترس نباشد، همه منابع مرتبط شما – نمونه ها، پایگاه های داده، متعادل کننده بار – کار نمی کنند. عواقب؟ وقفه در خدمات، ضررهای مالی، تاثیر بر شهرت.
برای رویارویی با این چالشها، اکثر طرحهای تداوم/ازسرگیری کسبوکار ایجاد یک زیرساخت چند منطقهای و بسیار در دسترس را پیشنهاد میکنند که به شما امکان میدهد در صورت قطعی در کل منطقه (آتش سوزی، جنگ، قطع برق مثال).
در اکثر زیرساختهای مدرن، فناوریهایی مانند Terraform برای خودکارسازی استقرار زیرساخت از طریق کد استفاده میشوند. با این کار از رویه های دستی و دخالت مستقیم در صدها دستگاه جلوگیری می شود.
اما وقتی یک منطقه سقوط می کند چه اتفاقی می افتد؟ آیا ما همچنان از Terraform اسمی استفاده می کنیم؟ خب کار به این سادگی نیست، زیرا هنگام تازه کردن منابع، API ارائه دهنده ابر مورد علاقه شما ممکن است به سختی پاسخ دهد یا پاسخ نادرستی بدهد: منبع یا منبع موجود یافت نشد. به طور خلاصه، ما می توانیم به سرعت متوجه شویم که به صورت دستی تعداد بی شماری از منابع غیرقابل دسترس را از دولت حذف کرده و دیگران را وارد می کنیم.
متوجه شده اید که فراتر از جداسازی ایالت به چندین ایالت با محدوده محدود، آن را نیز بر اساس منطقه تقسیم می کنیم تا آنها را مستقل کنیم.
نکته: ماژول های Terragrunt خود را بر اساس منطقه ساختار دهید
Terragrunt ابزاری است که Terraform را با سادهسازی مدیریت پیکربندیهای پیچیده تکمیل میکند. با آن، می توانید فایل های Terraform خود را در ماژول های جداگانه بر اساس منطقه سازماندهی کنید. این به شما امکان می دهد:
- به راحتی یک منطقه را فعال یا غیرفعال کنید.
- ایالت های Terraform (که فایل های حالت نیز نامیده می شود) را به صورت مجزا برای هر منطقه مدیریت کنید.
- با حفظ ساختار شفاف، خطر خطا را کاهش دهید.
سازماندهی ماژول ها
یک سازمان فایل Terragrunt ممکن است شبیه به این باشد:
infra/
terragrunt.hcl # Configuration globale
regions/
europe-west1/
terragrunt.hcl
europe-west9/
terragrunt.hcl
global/
terragrunt.hcl
modules/
gce/
main.tf
load_balancing/
main.tf
config.yaml
محتویات یک فایل Terragrunt برای یک منطقه
در هر پوشه منطقه (به عنوان مثال، regions/europe-west9/terragrunt.hcl
، می توانید شامل موارد زیر باشید:
skip = ! local.config[local.region].enabled
terraform {
source = "../../../modules/region"
}
locals {
config = yamldecode(file(find_in_parent_folders("config.yaml")))
region = basename(get_terragrunt_dir())
}
inputs = {
region = local.region
}
با این فایل می توانید فعال سازی یک منطقه را به سادگی با تغییر کنترل کنید
. اگر آن را به false
، تمام منابع مرتبط با این منطقه نادیده گرفته می شود. در اینجا یک فایل نمونه است config.yaml
:
europe-west9:
enabled: true
europe-west1:
enabled: false
در این مثال، منطقه پاریس (اروپا-غرب 9) فعال است و بروکسل (اروپا-غرب 1) غیرفعال است. در صورت بروز فاجعه، به سادگی بولین ها را معکوس کنید و از ویژگی استفاده کنید skip
، فقط کد Terraform از مناطق عملیاتی اجرا خواهد شد.
پیاده سازی: مثال عملی
1. ماژول های Terraform را ایجاد کنید
با ایجاد یک ماژول Terraform قابل استفاده مجدد برای هر منطقه شروع کنید. به عنوان مثال، در modules/gce/main.tf
:
variable "config" {
type = string
}
variable "region" {
type = string
}
resource "google_compute_instance" "example" {
name = "example-instance"
machine_type = "e2-medium"
zone = "${var.region}-b"
boot_disk {
initialize_params {
image = "debian-cloud/debian-11"
}
}
network_interface {
network = "default"
}
}
در اینجا، ماژول نسبت به فعال شدن یا نبودن منطقه آگاه است: کد ساده تر و ایمن تر است زیرا فعال سازی در سطح Terragrunt مدیریت می شود.
2. Terragrunt را پیکربندی کنید
در فایل روت infra/terragrunt.hcl
:
include "root" {
path = find_in_parent_folders()
}
remote_state {
backend = "gcs"
config = {
bucket = "tfstates"
prefix = path_relative_to_include()
location = "EU"
}
}
سپس هر منطقه می تواند باطن خود را در درخت سطل داشته باشد.
3. غیرفعال کردن یک منطقه را آزمایش کنید
برای غیرفعال کردن یک منطقه، به سادگی متغیر موجود در فایل را تغییر دهید config.yaml
:
europe-west9:
enabled: false
europe-west1:
enabled: true
سپس اجرا کنید:
terragrunt run-all --terragrunt-non-interactive init -reconfigure -upgrade
terragrunt run-all --terragrunt-non-interactive apply
Terragrunt به طور خودکار تمام ماژول های مرتبط با این منطقه را نادیده می گیرد.
نتیجه گیری: یک IaC آماده رویارویی با موارد غیرمنتظره است
این استراتژی مدیریت موثر خاموشی های منطقه ای در GCP را با ساده سازی مدیریت مناطق از طریق Terragrunt امکان پذیر می کند. با سازماندهی ماژول های خود بر اساس منطقه و استفاده از متغیرهای پیکربندی واضح، می توانید به سرعت زیرساخت خود را بدون خطرات عمده تطبیق دهید.
تاب آوری با برنامه ریزی خوب شروع می شود. برای ساختاربندی پیکربندیهای خود وقت بگذارید و استراتژیهای خود را به طور منظم آزمایش کنید تا اطمینان حاصل کنید که زیرساخت شما در برابر موارد غیرقابل پیشبینی قوی باقی میماند.