Logo GH

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 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 консумциясын колдонуңуз.
демейки шифрлөө: том/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'.
Логи жана артефакттар: планды жана диффаны сактоо, артефакт-отчет.

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 - гана өзгөчөлүктөр тизмеси аркылуу.
  • Айлана-чөйрөнүн ченемдерин/кластерлерин чектөө.
  • Милдеттүү tags: '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: мезгил-мезгили менен "план" окуп-бир жолу жана кулактандыруу.

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 жана жогорку турнирлерге жана жөнгө салуучу талаптарга даяр.

Contact

Биз менен байланышыңыз

Кандай гана суроо же колдоо керек болбосун — бизге кайрылыңыз.Биз дайым жардам берүүгө даярбыз!

Telegram
@Gamble_GC
Интеграцияны баштоо

Email — милдеттүү. Telegram же WhatsApp — каалооңузга жараша.

Атыңыз милдеттүү эмес
Email милдеттүү эмес
Тема милдеттүү эмес
Билдирүү милдеттүү эмес
Telegram милдеттүү эмес
@
Эгер Telegram көрсөтсөңүз — Emailден тышкары ошол жактан да жооп беребиз.
WhatsApp милдеттүү эмес
Формат: өлкөнүн коду жана номер (мисалы, +996XXXXXXXXX).

Түшүрүү баскычын басуу менен сиз маалыматтарыңыздын иштетилишине макул болосуз.