Logo GH

Terraform и Infrastructure as Code

(Бөлім: Технологиялар және Инфрақұрылым)

Қысқаша түйіндеме

Terraform - iGaming бұлтты инфрақұрылымын жаңғыртылатын және тексерілетін жасауға арналған IaC базалық құралы: VPC/кіші желілер, теңгерімдеушілер, БД/кластерлер, кезектер/шиналар, KMS/Secrets, Kubernetes-кластерлер, CDN және мониторинг. Табысқа модульдік сәулет, қатаң стейт және блоктау саясаты, GitOps-релиздерге көзқарас, Policy-as-Code, автоматтандырылған тестілеу және мөлдір FinOps сүйенеді.

1) iGaming үшін IaC қағидаттары

Декларативтілік: инфрақұрылым кодпен сипатталған; қол қадамдары жоқ.
Сәйкестік: қайталанған 'apply' бірдей нәтиже береді.
'dev/stage/prod' параметрлері бар бірыңғай кодтан орталарды бөлу.
Модульдердің композициясы: VPC, БД, кезектер, 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) Стейтті басқару (state) және блоктау

Қашықтағы backend (мысалы, объектілік сақтау орны) + бұғаттау (DynamoDB/Blob-lock) - 'apply' жарыстарының алдын алады.
Бэкендті нұсқалау және стейтті шифрлау (KMS).
Кіру ережелері: тек CI/CD және «infra owners» ғана 'apply' құқығына ие; әзірлеушілер - 'plan'.

Workspaces vs ортаның каталогтары:
  • Workspaces ұқсас орталар үшін ыңғайлы (көбейту),
  • Жеке каталогтар - нақты оқшауланған конфигурациялар мен әртүрлі топологиялар үшін.
backend мысалы. tf (жалпыланған):
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 консумпациясын data-source немесе провайдер арқылы пайдаланыңыз.
Әдепкі шифрлау: томдар/бекаптар/снапшоттар/дерекқорлар үшін.
Rotation: кілттер мен парольдер автоматты түрде айналады.

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

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

6) Terraform үшін GitOps және CI/CD

PR-флоу: 'terraform fmt' → 'init' → 'validate' → 'tflint' → 'plan' -пен PR → қол approve → 'apply' -ден CI.
Ортаны жылжыту: алдымен 'stage' дегенді, содан кейін 'prod' дегенді өзгерту.
Логи және артефактілер: жоспар мен диффаны сақтау, артефакт-есеп.

CI мысалы (үзік):
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 - тек ерекшеліктер тізімі арқылы.
  • Қоршау бойынша инстанциялардың/кластерлердің өлшемдерін шектеу.
  • Міндетті тегтер: 'env', 'owner', 'cost _ center'.
OPA (rego) ережесінің идеясы:
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: periodic 'plan' in read-only және рассинхрон кезінде хабарлау.

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, ретеншн, схема-тізілім.

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) Бақылау және аллергия код ретінде

Дашбордтар, алерт ережелері (p95/p99, error-rate, CPU/IO), SLO-мониторлар.
Қол жеткізу/аудит логтары (WORM), құн өлшемдері (by tag/namespace).
Оқиғалар: чат хабарламалары, runbooks URLs ресурстар аңдатпаларында.

13) FinOps: бақылаудағы құн

Infracost в PR + бюджеттік тәуекелдер.
Қоршаған орта бойынша квоталар: инстанциялар/қоймалар сыныптарын шектеу.
Авто-гигиена: Dev-ресурстарға арналған TTL, бакеттер/логтар ретенциясы саясаты.
Критикалық емес тапсырмалар үшін Spot/Preemptible, прод.

14) Көші-қон/өзгерістер процестері

Легаси-ресурстар үшін 'terraform import' (бірден - 'plan '/' apply').
'moved '/' removed' блоктары бұзылуды болдырмау үшін рефакторинг кезінде.
Zero-downtime өзгерістері: сыни контурлар үшін екі жақты тегістеу (blue-green) (БД/теңгерімдегіштер).
Қадамдық PR: алдымен жаңа ресурстық топ, содан кейін трафик, содан кейін бөлшектеу.

15) Қауіпсіздік және сәйкестік

Least privilege: модульдер тек қажетті құқықтарды жасайды, пайдаланбайды ".
KMS everywhere: томдарды/бэкаптарды/құпияларды/стейтті шифрлау.
CI-де Terraform/IaC сканері (IaC үшін SAST).
Git-тен тыс құпиялар: тек құпия менеджерлері; ротация және қол жеткізу аудиті.
PII-аймақтар: тегтер/қолжетімділік саясаты, өңіраралық экспортқа тыйым салу.

16) Үлгі үлгілері

PITR бар реляциялық ДБ (идея):
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-пайплайн енгізіңіз: fmt/validate/tflint/plan → review → apply.
4. Модульдер кітапханасын (VPC, K8s, БД, кезектер, мониторинг, CDN, құпиялар) қалыптастырыңыз.
5. Policy-as-Code (OPA/Sentinel) және IaC сканерлерін CI-ге қосыңыз.
6. Менеджер, кілттер - KMS, ротация арқылы құпияларды ұйымдастырыңыз.
7. Сыни модульдерге арналған Terratest, PR-ға Infracost тесттерін қосыңыз.
8. SLO/алерттерді және «мониторинг код ретінде» анықтаңыз.
9. Критикалық емес ресурстар үшін квоталарды/бюджеттерді және TTL баптаңыз.
10. Көші-қонды кезең-кезеңімен жоспарлаңыз (blue-green/екі рельстік).

18) Антипаттерндер

Терраформнан тыс ресурстардың қол «қар бүршіктері» → 'apply' кезіндегі дрейф және авария.
Стейтті жергілікті/бұғаттаусыз сақтау → жарыс және консистенттілікті жоғалту.
Шифрлаусыз Git/in '.tfvars' ішіндегі құпиялар.
Жүздеген ресурстарға арналған «God-модуль» → тестілеу/қайта пайдалану мүмкін еместігі.
Тікелей 'apply' ноутбуктен PR және жоспар-ревьсіз өнімдегі.
Policy-as-Code/сканерлерді елемеу → ағып кету, көпшілік IP/бакеттер.
Infracost/бюджеттердің болмауы → болжанбайтын құн.

Terraform/IaC iGaming-платформасына қайталанушылықты, жылдамдықты және бақыланатын қауіпсіздікті/құнды береді. Модульдік дизайн, қатаң стейт және GitOps, қауіпсіздік саясаты, автотесттер және FinOps инфрақұрылымды сенімді «конвейерге» айналдырады - тез жеткізілетін, болжамды p99 және ең жоғары турнирлер мен реттеуші талаптарға дайындық.

Contact

Бізбен байланысыңыз

Кез келген сұрақ немесе қолдау қажет болса, бізге жазыңыз.Біз әрдайым көмектесуге дайынбыз!

Telegram
@Gamble_GC
Интеграцияны бастау

Email — міндетті. Telegram немесе WhatsApp — қосымша.

Сіздің атыңыз міндетті емес
Email міндетті емес
Тақырып міндетті емес
Хабарлама міндетті емес
Telegram міндетті емес
@
Егер Telegram-ды көрсетсеңіз — Email-ге қоса, сол жерге де жауап береміз.
WhatsApp міндетті емес
Пішім: +ел коды және номер (мысалы, +7XXXXXXXXXX).

Батырманы басу арқылы деректерді өңдеуге келісім бересіз.