Logo GH

Terraform и Infrastructure as Code

(Bölüm: Tehnologiýalar we infrastruktura)

Gysgaça gysgaça

Terraform - iGaming bulut infrastrukturasyny döretmek üçin IaC esasly gural: VPC/kiçi torlar, Balanslaýjylar, BD/klasterler, nobatlar/tekerler, KMS/Secrets, Kubernetes-klasterler, CDN we gözegçilik. Üstünlik modully arhitektura, berk döwlet we blokirleme syýasaty, GitOps-relizlere çemeleşme, Policy-as-Code, awtomatlaşdyrylan synag we aç-açan FinOps-a esaslanýar.

1) iGaming üçin IaC ýörelgeleri

Deklaratiw: infrastruktura kod bilen beýan edilýär; el ädimleri ýok.
Idempotentlik: gaýtalanýan 'apply' şol bir netijäni berýär.
Gurşawy bölmek: 'dev/stage/prod' parametrleri bolan bir koddan.
Modullaryň düzümi: VPC, DB, nobatlar, K8s, gözegçilik üçin modullaryň ýeke-täk katalogy.
Howpsuzlyk: hususy kiçi ulgamlar, mTLS, iň az IAM hukuklary.
Syn edilişi we bahasy: metrikler/alertler/býudjetler - Terraform-yň aşagynda.

2) Repozitoryň gurluşy

Monorepo warianty (mysal):

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/

Alternatiwa - modully repo (her modul üçin aýratyn ammar) + sarp edijiler.

3) Esasy modullylyk (HCL-mysal)

VPC moduly (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 }
Modulyň sarp edilmegi (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) Döwlet dolandyryşy we gulplama

Uzakdaky backend (mysal üçin, obýekt ammary) + blokirleme (DynamoDB/Blob-lock) - 'apply' ýaryşlarynyň öňüni alýar.
Arka tarapy wersiýalaşdyrmak we döwlet şifrlemek (KMS).
Giriş düzgünleri: diňe CI/CD we "infra owners" -iň 'apply' hukugy bar; işläp düzüjiler - 'plan'.

Workspaces vs daşky gurşaw kataloglary:
  • Workspaces şuňa meňzeş gurşaw üçin amatly (köpeltmek),
  • Aýry-aýry kataloglar - anyk izolirlenen konfigurasiýalar we dürli topologiýalar üçin.
Backend mysaly. tf (jemlenen):
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) Üýtgeýän, syrly we duýgur maglumatlar

variables. tf + .tfvars gurşaw üçin; Şahsy gymmatlyklar üçin sensitive = true.
Git-de syrlar saklanmaýar. Maglumat çeşmesi ýa-da üpjün ediji arkaly Secret Manager/KMS konsumpsiýasyny ulanyň.
Variant şifrlemek: jildler/bellikler/snapshotlar/maglumatlar bazalary üçin.
Rotation: açarlar we parollar awtomatiki usulda aýlanýar.

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

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

6) Terraform üçin GitOps we CI/CD

PR-flow: 'terraform fmt' → 'init' → 'validate' → 'tflint' → 'plan' PR → el bilen approve → 'apply' CI-den.
Daşky gurşawy mahabatlandyrmak: ilki 'stage', soňra 'prod' belgi/merj.
Loglar we artefaktlar: meýilnamany we diffany saklamak, artefakt-hasabat.

CI mysaly (bölek):
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)

Maksat: howply/gymmat üýtgeşmeleriň awtomatiki gyşarylmagy.

Syýasatçylaryň mysallary:
  • Resurslary şifrlemek hökmanydyr.
  • Köpçülige açyk IP - diňe kadadan çykmalar sanawy arkaly.
  • Daşky gurşaw boýunça instansiýalaryň/klasterleriň ölçeglerini çäklendirmek.
  • Hökmany bellikler: 'env', 'owner', 'cost _ center'.
OPA (rego) düzgüniniň pikiri:
rego deny[msg] {
input. resource. type == "db_instance"
not input. resource. encrypted msg:= "DB must be encrypted at rest"
}

8) IaC synagy

terraform validate - sintaksisiň esasy barlagy.
tflint - stil/anti-pattern/üpjün ediji-aýratynlyk.
Infracost - PR-daky bahanyň deslapky bahasy.
Terratest - integrasiýa synaglary (Go): stendi götermek/barlamak/ýykmak.
Kitchen-Terraform - çeşmeleriň üýtgemegi bilen modully synaglar.
Drift-detekt: periodiki 'plan' -da read-only we diskron wagtynda duýduryş.

9) iGaming-platforma üçin adaty modullar

Tor

VPC/VNets/VPC-Peering, hususy/köpçülige açyk sabnetler, marşrutlaşdyrma, NAT/Firewall, Howpsuzlyk toparlary/NSG.
DNS/Failover: Route-политики, health-checks, latency-based routing.

Maglumatlar

MySQL/PostgreSQL: Multi-AZ, PITR, `auto_minor_version_upgrade`.
Redis/Memcached: Multi-AZ, snapshot/TTL-syýasatlar.
Data Lake/Lakehouse: baketler, syýasatlar, tablisalar (katalog/metastor).
ClickHouse/OLAP klasterleri: şardlamak/köpeltmek, disk syýasatlary.

Tekerler/nobatlar

Kafka/Pulsar/managed-wariantlar, ACL, retenşn, shema-reýestr.

K8s

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

Edge/CDN

CDN-paýlanyşy, kesmek düzgünleri, WAF, bot mitigasiýalary.

10) Variables/Outputs/locals - tejribe

Hasaplanan gymmatlyklar (maskalar, atlar) üçin locals.
modul API hökmünde outputs: iň az zerur.
Resurslaryň ady: '<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) Köp bulut we sebitler

Şol bir modullar, dürli üpjün edijiler arkaly abstraksiýa: 'aws', 'azurerm', 'google'.
Sebitleýin resurslar üçin provider alias (DR/replikasiýa).
Hyzmatlaryň tapawudy modullardaky şertler we aýratynlyklar bilen ýapylýar.
Maglumatlar lokallaşdyrylýar: sebitler boýunça aýry-aýry baketler/BD (EU/TR/LATAM).

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

12) Synlamak we alertler kod hökmünde

Daşbordlar, alertleriň düzgünleri (p95/p99, error-rate, CPU/IO), SLO-monitorlar.
Giriş/audit ýazgylary (WORM), baha ölçegleri (by tag/namespace).
Wakalar: söhbetdeşlik habarnamalary, çeşmeleriň düşündirişlerinde runbooks URLs.

13) FinOps: gözegçilik astynda bahasy

Infracost v PR + býudjet aladalary.
Daşky gurşaw boýunça kwotalar: instantlaryň/ammaryň synplarynyň çäklendirilmegi.
Awto-arassaçylyk: Dev-çeşmeler üçin TTL, baketleriň/loglaryň retensiýa syýasaty.
Möhüm däl meseleler üçin Spot/Preemptible, prob üçin ätiýaçlyk.

14) Migrasiýa/üýtgetmek prosesleri

'terraform import' legasi-resurslar üçin (derrew - 'plan '/' apply').
'moved '/' removed' bloklar bozulmazlyk üçin refaktoringde.
Zero-downtime üýtgeşmeleri: kritiki konturlar üçin goşa tegelek (blue-green) (DB/balanslaýjylar).
Ädimme-ädim PR: ilki täze çeşme topary, soň traffik, soň sökmek.

15) Howpsuzlyk we laýyklyk

Least privilege: modullar diňe zerur hukuklary döredýär, ulanmaýar ".
KMS everywhere: jildleri/bellikleri/syrlary/state şifrlemek.
CI-de Terraform/IaC (IaC üçin SAST).
Syr ýok Git: diňe syr dolandyryjylary; aýlanyş we giriş auditi.
PII-zonalar: taglar/giriş syýasaty, sebitara eksportyň gadagan edilmegi.

16) Şablon mysallary

PITR bilen relýasiýa DB (ideýa):
hcl module "db" {
source   = "../../modules/mysql"
name    = "wallet"
multi_az  = true storage_gb = 500 pitr    = true backup_retention_days = 14 deletion_protection  = true
}
Gözegçilik we 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 paýlanyşy:
hcl module "cdn" {
source = "../../modules/cdn"
domain = "example. com"
waf_enabled = true cache_ttl  = 600
}

17) Terraform/IaC girizmegiň çek-sanawy

1. Repozitoryň gurluşyny saýlaň (monorepo modullary + gurşaw kataloglary).
2. Blokirleme we şifrlemek (KMS) bilen remote state sazlaň.
3. GitOps-paypline giriň: fmt/validate/tflint/plan → review → apply.
4. Modullaryň kitaphanasyny dörediň (VPC, K8s, DD, nobatlar, gözegçilik, CDN, syrlar).
5. CI-de Policy-as-Code (OPA/Sentinel) we IaC skanerlerini goşuň.
6. Dolandyryjy, açarlar - KMS, aýlawlar arkaly syrlary guraň.
7. Synaglary goşuň: Kritik modullar üçin Terratest, PR-da Infracost.
8. SLO/alertleri we "gözegçilik kod hökmünde" kesgitläň.
9. Kritiki däl çeşmeler üçin kwotalary/býudjetleri we TTL-leri sazlaň.
10. Göçmegi tapgyrlaýyn meýilleşdiriň (gök-ýaşyl/iki demir ýol).

18) Antipatternler

Resurslaryň "gar bölekleri" Terraform → 'apply' -da süýşmek we heläkçilikler.
Steýtiň lokal/bloksyz saklanmagy → ýaryş we yzygiderliligiň ýitmegi.
Git/v '.tfvars' -da şifrlenmedik syrlar.
Ýüzlerçe resurs üçin "God-modul" → synagdan geçirip/gaýtadan ulanyp bolmaýar.
Gönüden-göni 'apply' -dan PR we meýilnama-revýusyz önüme.
Policy-as-Code/skanerleri äsgermezlik → syzmak, köpçülige açyk IP/baketler.
Infracost/býudjetleriň ýoklugy → öňünden aýdyp bolmajak çykdajy.

Netijeler

Terraform/IaC iGaming platformasyna gaýtalanma, tizlik we gözegçilik edilýän howpsuzlyk/baha berýär. Modully dizaýn, berk döwlet we GitOps, howpsuzlyk syýasaty, awtotestler we FinOps infrastrukturany ygtybarly "konweýerine" öwürýär - düşewüntsiz, öňünden aýdyp boljak p99 we iň ýokary ýaryşlara we kadalaşdyryjy talaplara taýynlyk.

Contact

Biziň bilen habarlaşyň

Islendik sorag ýa-da goldaw boýunça bize ýazyp bilersiňiz.Biz hemişe kömek etmäge taýýar.

Telegram
@Gamble_GC
Integrasiýany başlamak

Email — hökmany. Telegram ýa-da WhatsApp — islege görä.

Adyňyz obýýektiw däl / islege görä
Email obýýektiw däl / islege görä
Tema obýýektiw däl / islege görä
Habar obýýektiw däl / islege görä
Telegram obýýektiw däl / islege görä
@
Eger Telegram görkezen bolsaňyz — Email-den daşary şol ýerden hem jogap bereris.
WhatsApp obýýektiw däl / islege görä
Format: ýurduň kody we belgi (meselem, +993XXXXXXXX).

Düwmäni basmak bilen siz maglumatlaryňyzyň işlenmegine razylyk berýärsiňiz.