Logo GH

Terraform и Infrastructure as Code

(Bölmə: Texnologiya və Infrastruktur)

Qısa xülasə

Terraform - iGaming bulud infrastrukturunun təkrar və yoxlanıla bilən yaradılması üçün əsas IaC aləti: VPC/alt şəbəkələr, Balanslayıcılar, DB/klasterlər, növbələr/şinlər, KMS/Secrets, Kubernetes-klasterlər, CDN və monitorinq. Müvəffəqiyyət modul arxitekturası, sərt steyt və bloklama siyasəti, GitOps-reliz yanaşması, Policy-as-Code, avtomatlaşdırılmış test və şəffaf FinOps üzərində dayanır.

1) iGaming üçün IaC prinsipləri

Deklarativlik: infrastruktur kodla təsvir edilmişdir; əl addımları yoxdur.
İdempotentlik: təkrar 'apply' eyni nəticəni verir.
Mühitin bölünməsi: 'dev/stage/prod' parametrləri olan vahid koddan.
Modulların kompozisiyası: VPC, DB, növbə, K8s, monitorinq üçün vahid modul kataloqu.
Default təhlükəsizlik: şəxsi alt şəbəkələr, mTLS, minimum IAM hüquqları.
Müşahidə və xərclər: metriklər/alertlər/büdcələr də Terraform altında.

2) Anbar strukturu

Monorepo variantı (nümunə):

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/

Alternativ - modul repo (hər modul üçün ayrı bir anbar) + istehlakçılar.

3) Əsas modulluq (HCL-nümunə)

VPC modulu (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 istehlakı (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) State Management (state) və bloklama

Uzaqdan backend (məsələn, obyekt anbarı) + bloklama (DynamoDB/Blob-lock) - 'apply' yarışlarının qarşısını alır.
Arxa plan versiyası və steyt şifrələmə (KMS).
Giriş qaydaları: yalnız CI/CD və «infra owners» «apply» hüquqlarına malikdir; tərtibatçılar - 'plan'.

Workspaces vs ətraf mühit kataloqları:
  • Workspaces oxşar mühit üçün əlverişlidir (tiraj),
  • Ayrı-ayrı kataloqlar - aydın təcrid olunmuş konfiqurasiyalar və müxtəlif topologiyalar üçün.
Nümunə backend. tf (ümumiləşdirilmiş):
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) Dəyişənlər, sirlər və həssas məlumatlar

variables. tf + .tfvars mühit üçün; sensitive = private dəyərlər üçün true.
Sirlər Git-də saxlanılmır. Məlumat mənbəyi və ya provayder vasitəsilə Secret Manager/KMS konsumpsiyasından istifadə edin.
Default şifrələmə: cildlər/backup/snapshot/verilənlər bazaları üçün.
Rotation: açarlar və parollar avtomatik olaraq fırlanır.

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

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

6) Terraform üçün GitOps və CI/CD

PR-flow: 'terraform fmt' → 'init' → 'validate' → 'tflint' → 'plan' ilə PR → əl approve → 'apply' CI.
Ətraf mühitin təşviqi: əvvəlcə 'stage', sonra 'prod' etiketindəki dəyişikliklər.
Loqi və artefaktlar: plan və diffanın saxlanması, artefakt hesabatı.

CI nümunəsi (fraqment):
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)

Məqsəd: təhlükəli/bahalı dəyişikliklərin avtomatik olaraq kənara çıxması.

Siyasətçilərin nümunələri:
  • Resursların şifrələnməsi tələb olunur.
  • İctimai IP - yalnız istisnalar siyahısı vasitəsilə.
  • Ətraf mühitin ölçülərinin məhdudlaşdırılması.
  • Məcburi etiketlər: 'env', 'owner', 'cost _ center'.
OPA qaydaları ideyası (rego):
rego deny[msg] {
input. resource. type == "db_instance"
not input. resource. encrypted msg:= "DB must be encrypted at rest"
}

8) IaC test

terraform validate - sintaksisin əsas yoxlaması.
tflint - stil/anti-pattern/provayder-spesifik.
Infracost - PR-də dəyərin ilkin qiymətləndirilməsi.
Terratest - inteqrasiya testləri (Go): standı qaldırmaq/yoxlamaq/sökmək.
Kitchen-Terraform - resurs invariantları ilə modul testlər.
Drift Detect: Periodik 'plan' -da read-only və diskron zamanı xəbərdarlıq.

9) iGaming platforması üçün standart modullar

Şəbəkə

VPC/VNets/VPC-Peering, private/public sabnets, marşrutlaşdırma, NAT/Firewall, Security Groups/NSG.
DNS/Failover: Route-политики, health-checks, latency-based routing.

Məlumatlar

MySQL/PostgreSQL: Multi-AZ, PITR, `auto_minor_version_upgrade`.
Redis/Memcached: Multi-AZ, snapshot/TTL siyasətləri.
Data Lake/Lakehouse: baketlər, siyasətlər, cədvəllər (kataloq/metastor).
ClickHouse/OLAP klasterləri: şardlaşdırma/replikasiya, disk siyasətləri.

Şinlər/növbələr

Kafka/Pulsar/managed-variantları, ACL, retenshn, sxem-reyestr.

K8s

EKS/AKS/GKE с NodeGroups, taints/tolerations, IRSA/Workload Identity, Ingress/Service Mesh, autoscaling.
External Secrets, Prometheus/Grafana, Loki/ELK, cert-manager inteqrasiyası.

Edge/CDN

CDN distributions, caching qaydaları, WAF, bot mitiqasiya.

10) Variables/Outputs/locals - təcrübə

hesablanan dəyərlər üçün locals (maskalar, adlar).
API modul kimi outputs: minimum lazım.
Resursların adları: '<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) Multi-bulud və regionlar

Eyni modullar vasitəsilə abstraksiya, müxtəlif provayderlər: 'aws', 'azurerm', 'google'.
çapraz regional resurslar üçün Provider alias (DR/replikasiya).
Xidmətlərin fərqliliyi modullarda şərtlər və fitness ilə bağlanır.
Məlumatlar lokallaşdırılır: bölgələr üzrə ayrı-ayrı baketlər/DB (EU/TR/LATAM).

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

12) Bir kod kimi müşahidə və həyəcan

Daşbordlar, alert qaydaları (p95/p99, error-rate, CPU/IO), SLO monitorları.
Giriş/audit qeydləri (WORM), dəyər metrikası (by tag/namespace).
Hadisələr: chat bildirişləri, resursların şərhlərində runbooks URLs.

13) FinOps: nəzarət altında dəyəri

Infracost PR + büdcə riskləri.
Mühit kvotaları: instansiya/anbar siniflərinin məhdudlaşdırılması.
Avto-gigiyena: Dev-resurslar üçün TTL, baket/log retensiya siyasəti.
Qeyri-kritik vəzifələr üçün Spot/Preemptible, promosyon üçün rezervasiya.

14) Miqrasiya/dəyişiklik prosesləri

Legasi-resurslar üçün 'terraform import' (dərhal sonra - 'plan '/' apply').
'moved '/' removed' blokları məhv qarşısını almaq üçün refaktoring.
Zero-downtime dəyişikliklər: kritik konturlar (DB/balanslayıcılar) üçün ikiqat yuvarlanma (mavi-yaşıl).
Addım-addım PR: əvvəlcə yeni resurs qrupu, sonra trafik, sonra sökün.

15) Təhlükəsizlik və uyğunluq

Least privilege: modullar yalnız lazımi hüquqları yaradır, istifadə etmir ".
KMS everywhere: cildlər/backup/secrets/state şifrələmə.
CI-də Terraform/IaC (IaC üçün SAST).
Git xaricində sirləri: yalnız sirr menecerləri; rotasiya və giriş auditi.
PII zonaları: tag/giriş siyasəti, regionlararası ixracın qadağan edilməsi.

16) Nümunə nümunələri

PITR ilə Relational DB (ideya):
hcl module "db" {
source   = "../../modules/mysql"
name    = "wallet"
multi_az  = true storage_gb = 500 pitr    = true backup_retention_days = 14 deletion_protection  = true
}
Monitorinq və 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 paylanması:
hcl module "cdn" {
source = "../../modules/cdn"
domain = "example. com"
waf_enabled = true cache_ttl  = 600
}

17) Çek siyahısı tətbiq Terraform/IaC

1. Resepsiya strukturunu seçin (monorepo modulları + mühit kataloqları).
2. Bloklama və şifrələmə (KMS) ilə uzaqdan state qurun.
3. GitOps-paypline daxil edin: fmt/validate/tflint/plan → review → apply.
4. Modullar kitabxanasını (VPC, K8s, DD, növbələr, monitorinq, CDN, sirlər) formalaşdırın.
5. CI-də Policy-as-Code (OPA/Sentinel) və IaC skanerlərini daxil edin.
6. Menecer, açarlar - KMS, rotasiyalar vasitəsilə sirləri təşkil edin.
7. Testlər əlavə edin: Kritik modullar üçün Terratest, PR Infracost.
8. SLO/alertləri və «kod kimi monitorinqi» təyin edin.
9. Kritik olmayan resurslar üçün kvotalar/büdcələr və TTL qurun.
10. Miqrasiya mərhələləri planlaşdırın (mavi-yaşıl/iki rels).

18) Antipattern

«Snowflakes» resursları Terraform xaricində → drift və qəza 'apply'.
Lokal/kilidsiz steyt saxlamaq → yarış və davamlılıq itkisi.
Secrets in Git/in '.tfvars' şifrələmə olmadan.
Yüzlərlə resursda «God-modul» → sınaqdan keçirmək/yenidən istifadə etmək mümkün deyil.
PR və plan-review olmadan birbaşa 'apply' noutbukla.
Qeyri-nəzərdən Policy-as-Code/scan → sızma, ictimai IP/bakets.
Infracost/büdcələrin olmaması → gözlənilməz dəyər.

Nəticələr

Terraform/IaC iGaming platformasına təkrarlanabilirlik, sürət və nəzarət olunan təhlükəsizlik/dəyər verir. Modul dizaynı, ciddi state və GitOps, təhlükəsizlik siyasətləri, avtostestlər və FinOps infrastrukturu etibarlı bir "konveyer 'ə çevirir - downtime olmadan sürətli buraxılışlar, proqnozlaşdırıla bilən p99 və pik turnirlərə və tənzimləmə tələblərinə hazırlıq.

Contact

Bizimlə əlaqə

Hər hansı sualınız və ya dəstək ehtiyacınız varsa — bizimlə əlaqə saxlayın.Həmişə köməyə hazırıq!

Telegram
@Gamble_GC
İnteqrasiyaya başla

Email — məcburidir. Telegram və ya WhatsApp — istəyə bağlıdır.

Adınız istəyə bağlı
Email istəyə bağlı
Mövzu istəyə bağlı
Mesaj istəyə bağlı
Telegram istəyə bağlı
@
Əgər Telegram daxil etsəniz — Email ilə yanaşı orada da cavab verəcəyik.
WhatsApp istəyə bağlı
Format: ölkə kodu + nömrə (məsələn, +994XXXXXXXXX).

Düyməyə basmaqla məlumatların işlənməsinə razılıq vermiş olursunuz.