Terraform i Инфраструктура ҳамчун Кодекс
(Қисм: Технология ва инфрасохтор)
Хулосаи мухтасар
Terraform воситаи асосии IA C барои эҷоди такрорӣ ва санҷидашавандаи инфрасохтори абрии IGaming мебошад: VPC/subnets, Balancers, пойгоҳи додаҳо/кластерҳо, навбатҳо/автобусҳо, KMS/Secrets, кластерҳои Kubernetes, CDN ва мониторинг. Муваффақият ба меъмории модулӣ, сиёсати қатъии давлатӣ ва қулф, равиши Gitops ба релизҳо, Policy-as-Code, санҷиши автоматикӣ ва шаффофи FIN асос ёфтааст.
1) Принсипҳои IAC барои IGaming
Эъломия: инфрасохторе, ки бо рамз тавсиф шудааст; қадамҳои дастӣ вуҷуд надоранд.
Idempotency: такрори 'татбиқ' натиҷаи якхела медиҳад.
Ҷудосозии муҳитҳо: 'dev/stage/prod' аз як рамз бо параметрҳо.
Таркиби модул: феҳристи ягонаи модулҳо барои VPC, DB, навбатҳо, 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 (модулҳо/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) Идоракунии давлатӣ ва қуфлҳо
Қафои дурдаст (масалан, нигоҳдории объект) + қуфлҳо (Dynamo
Версияи пушти сар ва рамзгузории давлатӣ (KMS).
Қоидаҳои дастрасӣ: танҳо CI/CD ва "соҳибони инфра" ҳуқуқҳои "татбиқ" доранд; таҳиягарон - 'нақша'.
- Ҷойҳои корӣ барои муҳитҳои шабеҳ қулай мебошанд (нусхабардорӣ),
- Феҳристҳои алоҳида - барои конфигуратсияҳои возеҳ ҷудошуда ва топологияҳои гуногун.
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) Тағирёбандаҳо, асрори ва маълумоти ҳассос
тағирёбанда. tf + .tfvars барои муҳитҳо; ҳассос = барои арзишҳои хусусӣ дуруст аст.
Асрҳо дар Git нигоҳ дошта намешаванд. Мудири махфӣ/KMS-ро ба воситаи манбаъи маълумот ё провайдер истифода баред.
Рамзгузории пешфарз: барои ҳаҷм/нусха/сурат/пойгоҳи додаҳо.
Гардиш: калидҳо ва паролҳо ба таври худкор иваз карда мешаванд.
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: 'terraform fmt' → 'init' → 'тасдиқ' → 'tflint' → 'нақша' бо баромади PR → дастури тасдиқшуда → 'татбиқ' аз CI.
Пешбурди муҳити зист: аввал дар 'марҳила' тағир меёбад, баъд дар '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 ҷамъиятӣ - танҳо тавассути рӯйхати истисноӣ.
- Маҳдуд кардани андозаи намунаҳо/кластерҳо аз рӯи муҳит.
- Барчаспҳои талабшаванда: 'env', 'соҳиб', 'cost _ center'.
rego deny[msg] {
input. resource. type == "db_instance"
not input. resource. encrypted msg:= "DB must be encrypted at rest"
}
8) Санҷиши IAC
санҷиши terraform-Basic синтаксис.
tint - услуб/антипаттернҳо/мушаххасоти провайдер.
Инфракост - сметаи пешакии хароҷот дар PR.
Terratest - санҷишҳои ҳамгироӣ (Гузаштан): бардоред/санҷед/вайрон кунед.
Ошхона-Terraform - санҷишҳои воҳид бо инвариантҳои захираҳо.
Кашфи кашфиёт: нақшаи даврӣ дар ҳушдори танҳо барои хондан ва берун аз синхронизатсия.
9) Модулҳои маъмулӣ барои платформаи IGaming
Шабака
VPC/VN .ets/VPC-Peering, зершабақаҳои хусусӣ/ҷамъиятӣ, масир, NAT/Firewall, Гурӯҳҳои Амният/NSG.
DNS/Нокомӣ: Маршрут-политики, муоинаи саломатӣ, масир дар асоси таъхир.
Маълумот
My-SQL/PostgrE SQL: Multi-AZ, PITR, 'auto _ minor _ version _ upgrade'.
Redis/Memcached: Сиёсати Multi-AZ, сурат/TTL.
Кӯли маълумот/Lakehouse: сатилҳо, сиёсатҳо, ҷадвалҳо (каталог/метастор).
Кластерҳои клик/OLAP: shardiness/replication, сиёсати диск.
Автобусҳо/Навбатҳо
Кафка/Пулсар/вариантҳои идорашаванда, ACL, нигоҳдорӣ, схемаҳои сабти ном.
K8s
EKS/AKS/GKE с гиреҳҳо, taints/таҳаммулпазирӣ, IRSA/Workload Identity, Ingress/Service Mesh, autoscaling.
Интегратсияи асрори беруна, Прометей/Графана, Loki/ELK, сертификат-менеҷер.
Edge/CDN
Тақсимоти CDN, қоидаҳои кэш, WAF, кам кардани бот.
10) Тағирёбандаҳо/Натиҷаҳо/аҳолии маҳаллӣ - амалия
маҳаллӣ барои арзишҳои ҳисобшуда (ниқобҳо, номҳо).
баромадҳо ҳамчун модули API: ҳадди аққал талаб карда мешавад.
Номи захираҳо '<env> - <минтақа> - <домейн> - <компонент>'.
Теги: 'env', 'соҳиб', 'cost _ center', 'танқид', 'pii'.
hcl locals {
name_prefix = "${var. env}-${var. region}-${var. service}"
}
resource "cloud_lb" "api" { name = "${locals. name_prefix}-lb" }
11) Бисёр абр ва минтақаҳо
Абстраксия тавассути модулҳои якхела, провайдерҳои гуногун: 'aws', 'azurerm', 'google'.
Тахаллуси провайдер барои захираҳои байниминтақавӣ (DR/нусхабардорӣ).
Тафовутҳои хидматӣ бо шароит ва phicheflags дар модулҳо баста мешаванд.
Маълумот локализатсия карда мешаванд: сатилҳои инфиродӣ/DB аз рӯи минтақа (EU/TR/LATAM).
hcl provider "aws" { region = "eu-west-1" alias = "eu" }
provider "aws" { region = "sa-east-1" alias = "latam" }
12) Мушоҳида ва огоҳӣ ҳамчун рамз
Панели панелҳо, қоидаҳои ҳушдор (p95/p99, хатогӣ, CPU/IO), мониторҳои SLO.
Гузоришҳои дастрасӣ/аудит (WORM), ченакҳои хароҷот (аз рӯи барчасп/фазои ном).
Ҳодисаҳо: огоҳиномаҳои чат, дафтарҳои URL дар эзоҳҳои захираҳо.
13) FIN Ops: Арзиши таҳти назорат
Инфракост дар огоҳиҳои PR + буҷа.
Квотаҳои муҳити зист: маҳдуд кардани синфҳои намуна/анбор.
Гигиенаи худкор: TTL барои захираҳои dev, сиёсати нигоҳдории сатил/журнал.
Spot/Афзалият барои вазифаҳои ғайримуқаррарӣ, фармоиш барои Prod.
14) Равандҳои муҳоҷират/тағирот
'terraform захираҳои ҳуқуқии воридоти' for (фавран пас аз - 'нақша '/' татбиқ').
'moved '/' хориҷ' ҳангоми refactoring барои пешгирӣ кардани нобудшавӣ.
Тағироти сифр-вақти корӣ: ғалтаки дукарата (кабуд-сабз) барои контурҳои интиқодӣ (DB/тавозунҳо).
Қадам ба қадам PR: гурӯҳи нави захираҳо аввал, баъд трафик, баъд аз он.
15) Бехатарӣ ва риояи
Имтиёзи камтарин: модулҳо танҳо ҳуқуқҳои заруриро эҷод мекунанд, истифода намебаранд. "
KMS дар ҳама ҷо: рамзгузории ҳаҷм/нусхаҳои эҳтиётӣ/асрҳо/давлатҳо.
Санҷиши Terraform/Ia
Асрори берун аз 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).
3. Ба лӯлаи Git- Ops ворид шавед: fmt/validate/tflint/plan → review → apply.
4. Сохтани китобхонаи модулӣ (VPC, K8s, DB, навбатҳо, мониторинг, CDN, асрори).
5. Фаъол кардани сканҳои Policy-as-Code (OPA/Sentinel) ва IA-C дар CI.
6. Асрорро ба воситаи менеҷер, калидҳо - KMS, гардишҳо ташкил кунед.
7. Санҷишҳо илова кунед: Terratest барои модулҳои интиқодӣ, Infracost дар PR.
8. SLO/огоҳиҳо ва "мониторингро ҳамчун рамз" муайян кунед.
9. Барои захираҳои ғайримуқаррарӣ квотаҳо/буҷетҳо ва TTL таъсис диҳед.
10. Муҳоҷиратро дар марҳилаҳо ба нақша гиред (кабуд-сабз/ду роҳи оҳан).
18) Антипаттернҳо
Дастури "барфпӯши барфӣ" -и захираҳо берун аз Terraform → drift ва садамаҳо ҳангоми "татбиқ".
Нигоҳ доштани давлат дар маҳал/бе қуфлҳо → мусобиқа ва аз даст додани пайдарҳамӣ.
Асрҳо дар Git/дар '.tfvars' бе рамзгузорӣ.
"Худо-модул" барои садҳо захираҳо → имконнопазирии озмоиш/истифодаи такрорӣ.
Бевосита аз ноутбук ба хӯрок бидуни PR муроҷиат кунед ва баррасии нақшаҳоро ба нақша гиред.
Нодида гирифтани Policy-as-Code/скан § ихроҷ, IP/сатилҳои ҷамъиятӣ.
Набудани Infracost/буҷетҳо § арзиши пешгӯинашаванда.
Хулоса
Terraform/Ia Тарҳрезии модулӣ, ҳолати қатъӣ ва GITOPS, сиёсати амният, автотестҳо ва финҳо инфрасохторро ба "лӯлаи" боэътимод табдил медиҳанд - релизҳои зуд бидуни вақти паст, пешгӯишаванда p99 ва омодагӣ ба мусобиқаҳои қуллаҳо ва талаботи танзим.