Logo GH

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 vs muhit kataloglari:
  • Workspaces o’xshash muhitlar uchun qulay (ko’paytirish),
  • Alohida kataloglar - aniq ajratilgan konfiguratsiyalar va turli topologiyalar uchun.
Backend namunasi. tf (umumlashtirilgan):
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.

CI misoli (parcha):
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’.
OPA (rego) qoidasi g’oyasi:
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.

Contact

Biz bilan bog‘laning

Har qanday savol yoki yordam bo‘yicha bizga murojaat qiling.Doimo yordam berishga tayyormiz.

Telegram
@Gamble_GC
Integratsiyani boshlash

Email — majburiy. Telegram yoki WhatsApp — ixtiyoriy.

Ismingiz ixtiyoriy
Email ixtiyoriy
Mavzu ixtiyoriy
Xabar ixtiyoriy
Telegram ixtiyoriy
@
Agar Telegram qoldirilgan bo‘lsa — javob Email bilan birga o‘sha yerga ham yuboriladi.
WhatsApp ixtiyoriy
Format: mamlakat kodi va raqam (masalan, +998XXXXXXXX).

Yuborish orqali ma'lumotlaringiz qayta ishlanishiga rozilik bildirasiz.