Terraform и Infrastructure as Code
(Бөлүк: Технология жана инфраструктура)
Кыскача резюме
Terraform - iGaming булут инфраструктурасын түзүү үчүн IaC негизги куралы: VPC/көмөкчордондор, баланстоочулар, DD/кластерлер, кезектер/шиналар, KMS/Secrets, Kubernetes-кластерлер, CDN жана мониторинг. Ийгилик модулдук архитектурага, катуу стейт жана блокировка саясатына, GitOps-релиз мамилесине, Policy-as-Code, автоматташтырылган тестирлөөгө жана ачык-айкын FinOps таянат.
1) iGaming үчүн IaC негиздери
Декларативдүүлүк: инфраструктура код менен сүрөттөлгөн; кол кадамдар жок.
Демпотенттик: кайталап 'apply' бирдей натыйжа берет.
Айлана-чөйрөнү бөлүү: 'dev/stage/prod' параметрлери менен бирдиктүү коддон.
Модулдардын курамы: VPC, DD, кезек, 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/
Альтернатива - модулдук репо (ар бир модуль үчүн өзүнчө репозиторий) + керектөөчүлөр.
3) негизги модулдук (HCL-мисал)
VPC модулу (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 }
Модулдун керектөөсү (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) - 'apply' жарыштарын алдын алуу.
Бэкенд версиясы жана стейт шифрлөө (KMS).
Кирүү эрежелери: CI/CD жана "infra owners" гана 'apply' укуктарына ээ; иштеп чыгуучулар - 'plan'.
- Workspaces окшош чөйрөлөр үчүн ыңгайлуу (кайталоо),
- Өзүнчө каталогдор - так обочолонгон конфигурациялар жана ар кандай топологиялар үчүн.
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) Өзгөрмөлүү, сырлар жана сезимтал маалыматтар
variables. tf + .tfvars чөйрө үчүн; sensitive = жеке маанилери үчүн true.
Сырлар Git сакталган эмес. Маалымат булагы же провайдер аркылуу Secret Manager/KMS консумциясын колдонуңуз.
демейки шифрлөө: том/backaps/snapshot/маалымат базалары үчүн.
Rotation: ачкычтар жана сырсөздөр автоматтык түрдө айланат.
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' менен PR → кол менен approve → 'apply' CI.
Айлана-чөйрөнү жайылтуу: өзгөрүүлөр биринчи 'stage', андан кийин тег/мердж 'prod'.
Логи жана артефакттар: планды жана диффаны сактоо, артефакт-отчет.
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)
Максаты: кооптуу/кымбат өзгөрүүлөрдү автоматтык түрдө четтетүү.
Саясатчылардын мисалдары:- Ресурстарды шифрлөө милдеттүү.
- Коомдук IP - гана өзгөчөлүктөр тизмеси аркылуу.
- Айлана-чөйрөнүн ченемдерин/кластерлерин чектөө.
- Милдеттүү tags: '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 сыноо
terraform validate - синтаксис негизги текшерүү.
tflint - стили/каршы паттерн/провайдер-өзгөчөлүгү.
Infracost - PR алдын ала баалоо.
Terratest - интеграциялык тесттер (Go): стендди көтөрүү/текшерүү/бузуу.
Kitchen-Terraform - ресурстардын өзгөрүүсүз модулдук тесттер.
Drift-Detect: мезгил-мезгили менен "план" окуп-бир жолу жана кулактандыруу.
9) iGaming-платформа үчүн типтүү модулдары
Тармак
VPC/VNets/VPC-Peering, жеке/коомдук сабнеттер, багыттоо, NAT/Firewall, Security Groups/NSG.
DNS/Failover: Route-политики, health-checks, latency-based routing.
Маалыматтар
MySQL/PostgreSQL: Multi-AZ, PITR, `auto_minor_version_upgrade`.
Redis/Memcached: Multi-AZ, snapshot/TTL-саясат.
Data Lake/Lakehouse: бакеттер, саясатчылар, таблицалар (каталог/метастор).
ClickHouse/OLAP кластерлери: шардана/репликация, диск саясаты.
Шиналар/кезек
Kafka/Pulsar/managed-параметрлери, ACL, retenshn, схемалар-реестр.
K8s
EKS/AKS/GKE с NodeGroups, taints/tolerations, IRSA/Workload Identity, Ingress/Service Mesh, autoscaling.
External Secrets, Prometheus/Grafana, Loki/ELK, cert-manager.
Edge/CDN
CDN бөлүштүрүү, кэш эрежелери, WAF, ботторду митигациялоо.
10) Variables/Outputs/locals - практика
эсептелүүчү баалуулуктар үчүн locals (маскалар, ысымдар).
API модулу катары outputs: минималдуу зарыл.
Ресурстарды атоо: '<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) Көп булут жана региондор
Абстракция аркылуу бирдей модулдар, ар кандай провайдерлер: 'aws', 'azurerm', 'google'.
кросс-аймактык ресурстар үчүн Provider alias (DR/репликация).
Кызматтардын айырмачылыктары модулдардагы шарттар жана фичефлагдар менен жабылат.
Маалыматтар локализацияланат: региондор боюнча жеке бакеттер/БД (EU/TR/LATAM).
hcl provider "aws" { region = "eu-west-1" alias = "eu" }
provider "aws" { region = "sa-east-1" alias = "latam" }
12) Байкоо жана алерталар код катары
Dashbord, Алерт эрежелери (p95/p99, error-rate, CPU/IO), SLO-монитор.
Кирүү/аудит Логи (WORM), нарк метрикасы (by tag/namespace).
Окуялар: чат эскертмелер, runbooks ресурстардын аннотацияларында URLs.
13) FinOps: контролдоо боюнча наркы
PR + бюджеттик тобокелдиктер Infracost.
Айлана-чөйрө боюнча квоталар: инстанциялардын/кампалардын класстарын чектөө.
Auto-гигиена: TTL үчүн гигант-ресурстар, бакет/үймөктөрдүн Retention саясаты.
критикалык эмес тапшырмалар үчүн Spot/Preemptible, прод.
14) Миграция/өзгөрүү процесстери
'terraform import' легаси-ресурстар үчүн (кийин дароо - 'plan '/' apply').
'moved '/' removed' реактивдүү блоктор кыйроого жол бербөө үчүн.
Zero-downtime өзгөрүүлөр: критикалык контурлар (BD/баланстатуучулар) үчүн кош тоголок (көк-жашыл).
кадам PR: биринчи жаңы ресурстук топ, андан кийин жол, андан кийин демонтаждоо.
15) Коопсуздук жана шайкештик
Least privilege: модулдар гана туура укуктарды түзүү, колдонбойт ".
KMS everywhere: томдорду/backaps/сырларды/стейттерди шифрлөө.
Scan Terraform/CI IaC (IaC үчүн SAST).
Сырлар Git: гана сыр менеджерлери; айлануу жана кирүү аудити.
PII зоналары: тегдер/кирүү саясаты, аймактар аралык экспорттоого тыюу салуу.
16) үлгүлөрү мисалдар
PITR менен реляциялык DD (идея):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. Репозиторийдин структурасын тандаңыз (монорепо модулдары + айлана-чөйрөнүн каталогдору).
2. Кулпу жана шифрлөө (KMS) менен remote state жөндөө.
3. GitOps-paypline киргизүү: fmt/validate/tflint/plan → review → apply.
4. Модулдардын китепканасын түзүү (VPC, K8s, DD, кезек, мониторинг, CDN, сырлар).
5. Policy-as-Code (OPA/Sentinel) жана IaC сканерлерин CIге киргизиңиз.
6. менеджер аркылуу сырларды уюштуруу, ачкычтар - KMS, айлануу.
7. тесттер кошуу: критикалык модулдары үчүн Terratest, PR Infracost.
8. SLO/алерттерди жана "код катары мониторингди" аныктаңыз.
9. Критикалык эмес ресурстар үчүн квоталарды/бюджеттерди жана TTL түзүңүз.
10. Миграцияны этап-этабы менен пландаштырыңыз (көк-жашыл/эки рельстүү).
18) Антипаттерндер
Колдо "кар" ресурстары Terraform → drift жана кырсык 'apply'.
Steyt жергиликтүү/жок блокторду сактоо → жарыш жана туруктуулугун жоготуу.
Сырлар Git/in '.tfvars' шифрсиз.
"God-модулу" жүздөгөн ресурстар → тестирлөө/кайра пайдалануу мүмкүн эмес.
PR жана план-review жок продукт менен түздөн-түз 'apply' ноутбук.
Policy-as-Code/Scan → агып, коомдук IP/бакет четке кагуу.
Infracost/бюджеттердин жоктугу → күтүүсүз наркы.
Натыйжалары
Terraform/IaC iGaming платформасына ойноо жөндөмдүүлүгүн, ылдамдыгын жана көзөмөлгө алынган коопсуздук/наркын берет. Модулдук дизайн, катуу мамлекеттик жана GitOps, коопсуздук саясаты, AutoTests жана FinOps ишенимдүү "конвейер" үчүн инфраструктураны айлантат - тез релиздер жок, алдын ала p99 жана жогорку турнирлерге жана жөнгө салуучу талаптарга даяр.