Terraform и Infrastructure as Code
(Bo’lim: Texnologiyalar va infratuzilma)
Qisqacha xulosa
Terraform - iGaming bulutli infratuzilmasini yaratish uchun IaC bazaviy vositasi: VPC/kichik tarmoqlar, Balanslovchilar, DB/klasterlar, navbatlar/shinalar, KMS/Secrets, Kubernetes-klasterlar, CDN va monitoring. Muvaffaqiyat modulli arxitektura, qattiq steyt va blokirovka siyosati, GitOps-relizlarga yondashuv, Policy-as-Code, avtomatlashtirilgan test va shaffof FinOps-ga asoslanadi.
1) iGaming uchun IaC tamoyillari
Deklarativlik: infratuzilma kod bilan tavsiflangan; qo’lda qadamlar yo’q.
Idempotentlik: takroriy’apply’bir xil natija beradi.
Atrof-muhitni ajratish:’dev/stage/prod’.
Modullar kompozitsiyasi: VPC, DB, navbatlar, K8s, monitoring uchun yagona modullar katalogi.
Andoza xavfsizlik: shaxsiy kichik tarmoqlar, mTLS, minimal IAM huquqlari.
Kuzatuv va narx: metrika/alerta/byudjetlar ham Terraform ostida.
2) Repozitoriyning tuzilishi
Monorepo varianti (misol):
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/
Muqobil modulli repo (har bir modul uchun alohida repozitoriya) + iste’molchilar.
3) Asosiy modullilik (HCL-misol)
VPC moduli (modules/vpc/main. 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 }
Modul isteʼmoli (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) Steytni boshqarish (state) va blokirovka qilish
Masofadagi backend (masalan, obyekt ombori) + blokirovka (DynamoDB/Blob-lock) -’apply’poygalarining oldini oladi.
Steytni shifrlash (KMS).
Kirish qoidalari: faqat CI/CD va «infra owners»’apply’huquqiga ega; ishlab chiquvchilar -’plan’.
- Workspaces o’xshash muhitlar uchun qulay (ko’paytirish),
- Alohida kataloglar - aniq ajratilgan konfiguratsiyalar va turli topologiyalar uchun.
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) O’zgaruvchan, sirli va sezgir ma’lumotlar
variables. tf + .tfvars atrof-muhit uchun; sensitive = true.
Sirlar Git’da saqlanmaydi. Secret Manager/KMS konsumpsiyasidan data-source yoki provayder orqali foydalaning.
Andoza shifrlash: Jildlar/backaplar/snapshotlar/maʼlumotlar bazalari uchun.
Rotation: kalitlar va parollar avtomatik ravishda almashtiriladi.
hcl variable "db_password" {
type = string sensitive = true
}
data "external_secret" "db_password" {
conceptual secret source name = "prod/payments/db_password"
}
6) Terraform uchun GitOps va CI/CD
PR-flou:’terraform fmt’→’init’→’validate’→’tflint’→’plan’bilan PR → qo’lda approve →’apply’ni CI’dan chiqarish.
Atrof-muhitni targ’ib qilish: avval’stage’, so’ngra’prod’dagi tag/merj.
Loglar va artefaktlar: reja va diffni saqlash, artefakt-hisobot.
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) Policy-as-Code (OPA/Sentinel)
Maqsad: xavfsiz/qimmat o’zgarishlarni avtomatik ravishda rad etish.
Siyosatchilar misollari:- Manbalarni shifrlash shart.
- Ommaviy IP - faqat istisnolar ro’yxati orqali.
- Atrof-muhit bo’yicha instansiyalar/klasterlar o’lchamlarini cheklash.
- Majburiy teglar:’env’,’owner’,’cost _ center’.
rego deny[msg] {
input. resource. type == "db_instance"
not input. resource. encrypted msg:= "DB must be encrypted at rest"
}
8) IaC testlari
terraform validate - sintaksisning bazaviy tekshiruvi.
tflint - uslub/antipattern/provayder-spetsifikasi.
Infracost - PR qiymatini dastlabki baholash.
Terratest - integratsion testlar (Go): stendni ko’tarish/tekshirish/buzish.
Kitchen-Terraform - resurslarning invariantlari bilan modulli testlar.
Drift-detekt: periodik «plan» v read-only va diskron paytida ogohlantirish.
9) iGaming platformasi uchun namunaviy modullar
Tarmoq
VPC/VNets/VPC-Peering, shaxsiy/ommaviy sabnetlar, marshrutizatsiya, NAT/Firewall, Security Groups/NSG.
DNS/Failover: Route-политики, health-checks, latency-based routing.
Ma’lumotlar
MySQL/PostgreSQL: Multi-AZ, PITR, `auto_minor_version_upgrade`.
Redis/Memcached: Multi-AZ, snapshot/TTL siyosati.
Data Lake/Lakehouse: buketlar, siyosatlar, jadvallar (katalog/metastor).
ClickHouse/OLAP klasterlari: shardlash/replikatsiya, disk siyosati.
Shinalar/navbatlar
Kafka/Pulsar/managed-variantlar, ACL, retenshn, sxema-reyestr.
K8s
EKS/AKS/GKE с NodeGroups, taints/tolerations, IRSA/Workload Identity, Ingress/Service Mesh, autoscaling.
External Secrets, Prometheus/Grafana, Loki/ELK, cert-manager integratsiyasi.
Edge/CDN
CDN tarqatish, keshlash qoidalari, WAF, bot mitigatsiyalari.
10) Variables/Outputs/locals - amaliyot
Hisoblanadigan qiymatlar uchun locals (niqoblar, nomlar).
modul API sifatida outputs: minimal talab.
Manbalarning nomi:’<env> - <region> - <domain> - <component>’.
Тэги: `env`, `owner`, `cost_center`, `criticality`, `pii`.
hcl locals {
name_prefix = "${var. env}-${var. region}-${var. service}"
}
resource "cloud_lb" "api" { name = "${locals. name_prefix}-lb" }
11) Ko’p bulut va mintaqalar
Bir xil modullar, turli provayderlar orqali abstraksiya:’aws’,’azurerm’,’google’.
Provider alias kross-mintaqaviy resurslar uchun (DR/replikatsiyalar).
Servislarning farqlari modullardagi shartlar va fitneflaglar bilan yopiladi.
Ma’lumotlar mahalliylashtiriladi: hududlar bo’yicha alohida baketalar/DB (EU/TR/LATAM).
hcl provider "aws" { region = "eu-west-1" alias = "eu" }
provider "aws" { region = "sa-east-1" alias = "latam" }
12) Kuzatuv va alertlar kod sifatida
Dashbordlar, alertlar qoidalari (p95/p99, error-rate, CPU/IO), SLO-monitorlar.
Kirish/audit daftarlari (WORM), qiymat metrikasi (by tag/namespace).
Hodisalar: chat xabarnomalari, manbalar izohlaridagi runbooks URLlari.
13) FinOps: nazorat ostidagi qiymat
Infracost v PR + budjet alertlari.
Atrof-muhit bo’yicha kvotalar: instans/ombor sinflarini cheklash.
Avto-gigiyena: Dev-resurslar uchun TTL, baket/log retensiyasi siyosati.
Nekritik vazifalar uchun Spot/Preemptible, prod uchun zaxiralash.
14) Migratsiya/o’zgartirish jarayonlari
legasi-resurslar uchun’terraform import’(darhol -’plan ’/’ apply’).
’moved ’/’ removed’ refaktoring bloklari buzilishdan saqlanadi.
Zero-downtime oʻzgarishlar: kritik konturlar uchun ikki marta yoyish (blue-green) (BD/balanschilar).
Bosqichma-bosqich PR: avval yangi resurs guruhi, keyin trafik, keyin demontaj.
15) Xavfsizlik va muvofiqlik
Least privilege: modullar faqat kerakli huquqlarni yaratadi, foydalanmaydi ".
KMS everywhere: jildlar/backaplar/sirlar/steytlarni shifrlash.
Terraform/IaC SCI (IaC uchun SAST).
Sirlar Git: faqat maxfiy menejerlar; rotatsiya va foydalanish auditi.
PII-zonalar: teglar/kirish siyosati, mintaqalararo eksportni taqiqlash.
16) Namunalar
PITR bilan relyasion DB (g’oya):hcl module "db" {
source = "../../modules/mysql"
name = "wallet"
multi_az = true storage_gb = 500 pitr = true backup_retention_days = 14 deletion_protection = true
}
Monitoring va SLO-alert:
hcl module "slo_latency" {
source = "../../modules/monitoring/slo"
name = "api-latency-p95"
target_ms = 250 window = "30m"
alert_channels = ["chatops#incidents"]
}
WAF/CDN tarqatish:
hcl module "cdn" {
source = "../../modules/cdn"
domain = "example. com"
waf_enabled = true cache_ttl = 600
}
17) Terraform/IaC joriy etish chek-varaqasi
1. Repozitorning tuzilishini tanlang (monorepo modullar + muhit kataloglari).
2. Bloklash va shifrlash (KMS) bilan remote state moslamalarini moslash.
3. GitOps-payplayni kiriting: fmt/validate/tflint/plan → review → apply.
4. Modullar kutubxonasini (VPC, K8s, DD, navbatlar, monitoring, CDN, sirlar) shakllantiring.
5. Policy-as-Code (OPA/Sentinel) va IaC skanerlarini CI ga kiriting.
6. Sirlarni menejer, kalitlar - KMS, rotatsiyalar orqali tashkil qiling.
7. Testlarni qo’shing: Kritik modullar uchun Terratest, PRda Infracost.
8. SLO/alertlar va «monitoring kod sifatida».
9. Tanqidiy boʻlmagan resurslar uchun kvotalar/byudjetlar va TTLni moslashtiring.
10. Migratsiyani bosqichma-bosqich rejalashtiring (blue-green/ikki rels).
18) Antipatternlar
Qo’lda «qor» resurslari Terraform → dreyf va avariyalar’apply’dan tashqarida.
Steytni lokal/blokirovkasiz saqlash → poyga va konsistentsiyani yo’qotish.
Shifrlanmagan Git/v’.tfvars’dagi sirlar.
Yuzlab resurslarga mo’ljallangan «God-modul» → sinovdan o’tkazish/qayta foydalanish imkonsizligi.
To’g «ridan-to’g» ri’apply’s noutbukni prodga PR va reja-reviussiz.
Policy-as-Code/skanerlarni e’tiborsiz qoldirish → oqish, ommaviy IP/baketalar.
Infracost/byudjetlarning yo’qligi → oldindan aytib bo’lmaydigan qiymat.
Yakunlar
Terraform/IaC iGaming platformasiga takrorlanuvchanlik, tezlik va nazorat qilinadigan xavfsizlik/qiymat beradi. Modulli dizayn, qattiq steyt va GitOps, xavfsizlik siyosati, avtotestlar va FinOps infratuzilmani ishonchli «konveyer» ga aylantiradi - tezkor relizlar, oldindan aytib bo’ladigan p99 va eng yuqori turnir va tartibga solish talablariga tayyorlik.