Logo GH

Terraform и زیرساخت به عنوان کد

(بخش: تکنولوژی و زیرساخت)

خلاصه ای کوتاه

Terraform ابزار اصلی IaC برای ایجاد مجدد و قابل اطمینان زیرساخت ابر iGaming است: VPC/Subnets، Balancers، پایگاه داده/خوشه، صف/اتوبوس، KMS/اسرار، خوشه Kubernetes، CDN و نظارت. موفقیت در معماری مدولار، سیاست های وضعیت و قفل سخت، رویکرد GitOps به انتشار، سیاست به عنوان کد، تست خودکار و FinOps شفاف است.

1) اصول IaC برای iGaming

اعلانی: زیرساخت توصیف شده توسط کد ؛ هیچ گام دستی وجود ندارد.
Idempotency: تکرار «اعمال» نتیجه مشابهی می دهد.
جداسازی محیط ها: 'dev/stage/prod' از یک کد واحد با پارامترها.
ترکیب ماژول: یک کاتالوگ واحد از ماژول ها برای VPC، DB، صف، K8s، نظارت.
امنیت پیش فرض: زیر شبکه های خصوصی، mTLS، حداقل حقوق IAM.
قابلیت مشاهده و هزینه: معیارها/هشدارها/بودجه ها نیز تحت Terraform هستند.

2) ساختار مخزن

نوع مونورپو (مثال):

iac/
modules/
vpc/
mysql/
kafka/
eks_aks_gke/
redis/
monitoring/
envs/
prod/
eu-west/
main. tf variables. tf backend. tf stage/
eu-west/
...
dev/
...
policies/
opa/
sentinel/
pipelines/
ci_cd/

جایگزین یک repo مدولار (مخزن جداگانه برای هر ماژول) + مصرف کنندگان است.

3) مدولار عمومی (به عنوان مثال HCL)

ماژول VPC (ماژول/vpc/اصلی. tf):
hcl variable "name" {}
variable "cidr" {}
variable "az_count" { default = 3 }

cloud provider resources (summarized)
resource "cloud_vpc" "this" { name = var. name cidr = var. cidr }
resource "cloud_subnet" "private" {
count = var. az_count vpc_id = cloud_vpc. this. id type  = "private"
}
output "vpc_id" { value = cloud_vpc. this. id }
output "private_subnets" { value = cloud_subnet. private[].id }
مصرف ماژول (envs/prod/eu-west/main. tf):
hcl module "vpc" {
source = "../../modules/vpc"
name  = "prod-eu-west"
cidr  = "10. 20. 0. 0/16"
}

module "mysql" {
source = "../../modules/mysql"
name  = "payments"
vpc_id = module. vpc. vpc_id subnets = module. vpc. private_subnets pitr  = true size  = "r6g. large"
kms_key = module. kms. key_id
}

4) مدیریت دولت و قفل

backend از راه دور (به عنوان مثال، ذخیره سازی شی) + قفل (DynamoDB/Blob-lock) - جلوگیری از «اعمال» نژادها.
نسخه پشتیبان و رمزگذاری حالت (KMS).
قوانین دسترسی: فقط CI/CD و «صاحبان infra» دارای حقوق «اعمال» هستند ؛ توسعه دهندگان - «طرح».

فضاهای کاری در مقابل دایرکتوری های محیطی:
  • فضاهای کاری مناسب برای محیط های مشابه (تکرار)،
  • دایرکتوری های جداگانه - برای تنظیمات به وضوح جدا شده و توپولوژی های مختلف.
به عنوان مثال backend. tf (تعمیم یافته):
hcl terraform {
backend "s3" {
bucket     = "iac-state-prod"
key      = "eu-west/terraform. tfstate"
region     = "eu-west-1"
dynamodb_table = "iac-state-locks"
encrypt    = true
}
}

5) متغیرها، اسرار و اطلاعات حساس

متغیرها. tf + .tfvars برای محیط ؛ حساس = درست برای ارزش های خصوصی.
اسرار در Git ذخیره نمی شوند. از Secret Manager/KMS از طریق منبع داده یا ارائه دهنده استفاده کنید.
رمزگذاری پیش فرض: برای حجم/پشتیبان گیری/عکس های فوری/پایگاه داده.
چرخش: کلیدها و رمزهای عبور به طور خودکار چرخانده می شوند.

hcl variable "db_password" {
type   = string sensitive = true
}

data "external_secret" "db_password" {
conceptual secret source name = "prod/payments/db_password"
}

6) GitOps و CI/CD برای Terraform

PR flow: 'terraform fmt' → 'init' → 'validate' → 'tflint' → 'plan' with output to PR → manual approve → 'apply' from CI.
ارتقاء محیط زیست: ابتدا در «مرحله» تغییر می کند، سپس برچسب/ادغام در «prod».
سیاهههای مربوط و مصنوعات: صرفه جویی در طرح و دیفا، گزارش مصنوع.

مثال CI (قطعه):
yaml steps:
- run: terraform fmt -check
- run: terraform init -upgrade
- run: terraform validate
- run: tflint --enable-rule=terraform_standard_module_structure
- run: terraform plan -var-file=envs/stage/eu-west/vars. tfvars -out tfplan
- run: terraform show -no-color tfplan > plan. txt after April
- run: terraform apply tfplan

7) سیاست به عنوان کد (OPA/نگهبان)

هدف: به طور خودکار تغییرات ناامن/گران قیمت را رد می کند.

مثال هایی از سیاست ها:
  • رمزگذاری منابع مورد نیاز است.
  • IP عمومی - فقط از طریق لیست استثنا.
  • محدود کردن اندازه نمونه ها/خوشه ها بر اساس محیط.
  • برچسب های مورد نیاز: 'env', 'owner', 'cost _ center'.
ایده پشت قانون OPA (rego) این است:
rego deny[msg] {
input. resource. type == "db_instance"
not input. resource. encrypted msg:= "DB must be encrypted at rest"
}

8) آزمایش IAc

بررسی نحو terraform validate-Basic.
tflint - سبک/antipatterns/ارائه دهنده ویژگی.
Infracost - برآورد هزینه اولیه در روابط عمومی.
Terratest - تست ادغام (برو): بلند کردن/بررسی/تخریب پایه.
Kitchen-Terraform - تست واحد با منابع ثابت.
Drift-detection: برنامه ریزی دوره ای در هشدار فقط خواندنی و خارج از همگام سازی.

9) ماژول های معمولی برای پلت فرم iGaming

شبکه سازی

VPC/VNets/VPC-Peering، زیر شبکه های خصوصی/عمومی، مسیریابی، NAT/فایروال، گروه های امنیتی/NSG.
DNS/Failover: Route- политики، بررسی سلامت، مسیریابی مبتنی بر تأخیر.

داده ها

MySQL/PostgreSQL: Multi-AZ, PITR, 'auto _ minor _ version _ upgrade'.
Redis/Memcached: سیاست های چند AZ، عکس فوری/TTL.
Data Lake/Lakehouse: سطل ها، سیاست ها، جداول (کاتالوگ/متاستور).
ClickHouse/OLAP خوشه: shardiness/تکرار، سیاست های دیسک.

اتوبوس/صف

انواع کافکا/پولسار/مدیریت شده، ACL، نگهداری، طرح های رجیستری.

K8s

EKS/AKS/GKE с NodeGroups، taints/tolerations، IRSA/بار کاری هویت، ورود/سرویس مش، autoscaling.
ادغام اسرار خارجی، Prometheus/Grafana، Loki/ELK، cert-manager.

لبه/CDN

توزیع CDN، قوانین ذخیره سازی، WAF، کاهش ربات.

10) متغیرها/خروجی ها/افراد محلی - تمرین

ارزش های محاسبه شده (ماسک ها، نام ها)

خروجی به عنوان API ماژول: حداقل مورد نیاز است.
نامگذاری منابع '<env> - <region> - <domain> - <component>'.
Тэги: 'env'، 'مالک'، 'هزینه _ مرکز'، 'بحرانی'، 'pii'.

hcl locals {
name_prefix = "${var. env}-${var. region}-${var. service}"
}
resource "cloud_lb" "api" { name = "${locals. name_prefix}-lb" }

11) چند ابر و مناطق

انتزاع از طریق ماژول های مشابه، ارائه دهندگان مختلف: «aws»، «azurerm»، «google».
نام مستعار ارائه دهنده برای منابع بین منطقه ای (DR/تکرار).
تفاوت های سرویس توسط شرایط و phicheflags در ماژول ها بسته می شوند.
داده ها محلی سازی می شوند: سطل های فردی/DB بر اساس منطقه (EU/TR/LATAM).

hcl provider "aws" { region = "eu-west-1" alias = "eu" }
provider "aws" { region = "sa-east-1" alias = "latam" }

12) قابلیت مشاهده و هشدار به عنوان کد

داشبورد، قوانین هشدار (p95/p99، میزان خطا، CPU/IO)، مانیتورهای SLO.
دسترسی/حسابرسی سیاهههای مربوط (WORM)، معیارهای هزینه (توسط برچسب/namespace).
حوادث: اطلاعیه های چت، URL های runbooks در حاشیه نویسی منابع.

13) FinOps: ارزش تحت کنترل

Infracost در PR + هشدار بودجه.
سهمیه های محیطی: محدود کردن کلاس های نمونه/انبار.
بهداشت خودکار: TTL برای منابع توسعه، سیاست های نگهداری سطل/ورود به سیستم.
نقطه/قابل پیش بینی برای وظایف غیر بحرانی، رزرو برای Prod.

14) فرآیندهای مهاجرت/تغییر

'terraform import' for legal resources (بلافاصله پس از - 'plan '/' apply').
هنگام بازسازی برای جلوگیری از تخریب، مسدود می شود.
تغییرات صفر خرابی: دو نورد (آبی-سبز) برای خطوط بحرانی (DB/balancers).
روابط عمومی گام به گام: ابتدا گروه منابع جدید، سپس ترافیک، و سپس از بین بردن.

15) ایمنی و انطباق

حداقل امتیاز: ماژول ها فقط حقوق لازم را ایجاد می کنند، استفاده نمی کنند "

KMS در همه جا: رمزگذاری حجم/پشتیبان گیری/اسرار/ایالات.
اسکن ترافرم/IaC در CI (SAST برای IaC).
اسرار خارج از Git: مدیران مخفی تنها ؛ چرخش و حسابرسی دسترسی.
مناطق PII: دسترسی به برچسب ها/سیاست ها، ممنوعیت صادرات بین منطقه ای.

16) قالب نمونه

پایگاه داده رابطه ای با PITR (ایده):
hcl module "db" {
source   = "../../modules/mysql"
name    = "wallet"
multi_az  = true storage_gb = 500 pitr    = true backup_retention_days = 14 deletion_protection  = true
}
نظارت و هشدار SLO:
hcl module "slo_latency" {
source = "../../modules/monitoring/slo"
name  = "api-latency-p95"
target_ms = 250 window  = "30m"
alert_channels = ["chatops#incidents"]
}
توزیع WAF/CDN:
hcl module "cdn" {
source = "../../modules/cdn"
domain = "example. com"
waf_enabled = true cache_ttl  = 600
}

17) چک لیست پیاده سازی Terraform/IaC

1. ساختار مخزن را انتخاب کنید (ماژول monorepos + دایرکتوری محیط زیست).
2. پیکربندی حالت دور با قفل و رمزگذاری (KMS).
3. خط لوله GitOps را وارد کنید: fmt/validate/tflint/plan → review → apply.
4. یک کتابخانه ماژول (VPC، K8s، DB، صف، نظارت، CDN، اسرار) ایجاد کنید.
5. فعال کردن سیاست به عنوان کد (OPA/Sentinel) و IaC اسکن در CI.
6. سازماندهی اسرار از طریق مدیر، کلید - KMS، چرخش.
7. اضافه کردن آزمون: Terratest برای ماژول های بحرانی، Infracost در روابط عمومی.
8. SLO/هشدارها و «نظارت به عنوان کد» را تعریف کنید.
9. تنظیم سهمیه/بودجه و TTL برای منابع غیر بحرانی.
10. برنامه ریزی مهاجرت در مراحل (آبی-سبز/دو راه آهن).

18) ضد گلوله

دستی «دانه های برف» از منابع خارج از Terraform → رانش و حوادث زمانی که «اعمال».
ذخیره یک حالت به صورت محلی/بدون قفل → مسابقه و از دست دادن ثبات.
اسرار در Git/در 'tfvars' بدون رمزگذاری.
«God-module» برای صدها منبع → ناتوانی در آزمایش/استفاده مجدد.
مستقیم «اعمال» از لپ تاپ به مواد غذایی بدون PR و بررسی برنامه.
نادیده گرفتن سیاست به عنوان کد/اسکن → نشت، IP/سطل عمومی.

کمبود Infracost/بودجه: هزینه های غیر قابل پیش بینی

خلاصه

Terraform/IaC به پلت فرم iGaming قابلیت تکثیر، سرعت و ایمنی/هزینه کنترل شده را می دهد. طراحی مدولار، حالت دقیق و GitOps، سیاست های امنیتی، autotests و FinOps، زیرساخت ها را به یک «خط لوله» قابل اعتماد تبدیل می کند - انتشار سریع بدون خرابی، p99 قابل پیش بینی و آمادگی برای مسابقات پیک و الزامات قانونی.

Contact

با ما در تماس باشید

برای هرگونه سؤال یا نیاز به پشتیبانی با ما ارتباط بگیرید.ما همیشه آماده کمک هستیم!

Telegram
@Gamble_GC
شروع یکپارچه‌سازی

ایمیل — اجباری است. تلگرام یا واتساپ — اختیاری.

نام شما اختیاری
ایمیل اختیاری
موضوع اختیاری
پیام اختیاری
Telegram اختیاری
@
اگر تلگرام را وارد کنید — علاوه بر ایمیل، در تلگرام هم پاسخ می‌دهیم.
WhatsApp اختیاری
فرمت: کد کشور و شماره (برای مثال، +98XXXXXXXXXX).

با فشردن این دکمه، با پردازش داده‌های خود موافقت می‌کنید.