Terraform и Kod Olarak Altyapı
(Bölüm: Teknoloji ve Altyapı)
Kısa Özet
Terraform, iGaming bulut altyapısının tekrarlanabilir ve doğrulanabilir şekilde oluşturulması için temel IaC aracıdır: VPC/alt ağlar, Dengeleyiciler, veritabanları/kümeler, kuyruklar/veri yolları, KMS/Sırlar, Kubernetes kümeleri, CDN ve izleme. Başarı, modüler bir mimariye, sıkı devlet ve kilit politikalarına, GitOps'un sürümlere yaklaşımı, Kod Olarak Politika, otomatik testler ve şeffaf FinOps'a dayanmaktadır.
1) iGaming için IaC ilkeleri
Bildirimsel: kod tarafından tanımlanan altyapı; Manuel adımlar yoktur.
Idempotency: tekrarlanan 'uygula' aynı sonucu verir.
Ortamların ayrılması: Parametreli tek bir koddan 'dev/stage/prod'.
Modül kompozisyonu: VPC, DB, kuyruklar, K8s, izleme için tek bir modül kataloğu.
Varsayılan güvenlik: özel alt ağlar, mTLS, minimum IAM hakları.
Gözlemlenebilirlik ve maliyet: metrikler/uyarılar/bütçeler de Terraform altındadır.
2) Depo yapısı
Monorepo varyantı (örnek):
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/
Alternatif modüler bir repo (her modül için ayrı bir depo) + tüketicidir.
3) Temel modülerlik (HCL örneği)
VPC modülü (modüller/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 }
Modül tüketimi (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) Devlet yönetimi ve kilitler
Uzak arka uç (örneğin, nesne depolama) + kilitler (DynamoDB/Blob-lock) - 'uygula' yarışlarını önleyin.
Arka uç sürüm oluşturma ve durum şifreleme (KMS).
Erişim kuralları: Yalnızca CI/CD ve "infra sahipleri" 'geçerli' haklara sahiptir; Geliştiriciler - "plan".
- Çalışma alanları benzer ortamlar için uygundur (çoğaltma),
- Ayrı dizinler - açıkça izole edilmiş yapılandırmalar ve farklı topolojiler için.
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) Değişkenler, sırlar ve hassas veriler
değişkenler. Ortamlar için tf + .tfvars; hassas = özel değerler için doğrudur.
Sırlar Git'te saklanmaz. Veri kaynağı veya sağlayıcı aracılığıyla Gizli Yönetici/KMS'yi kullanın.
Varsayılan şifreleme: birimler/yedeklemeler/anlık görüntüler/veritabanları için.
Döndürme: anahtarlar ve şifreler otomatik olarak döndürülür.
hcl variable "db_password" {
type = string sensitive = true
}
data "external_secret" "db_password" {
conceptual secret source name = "prod/payments/db_password"
}
6) GitOps ve Terraform için CI/CD
PR akışı: 'terraform fmt', 'init', 'validate', 'tflint', 'plan', çıktı ile PR, manuel onayla, CI'dan 'uygula'.
Çevre promosyonu: önce 'aşama'da değişiklikler, ardından' prod'da etiketleme/birleştirme.
Günlükler ve eserler: plan ve diffa kaydetme, eser-rapor.
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) Kod Olarak Politika (OPA/Sentinel)
Amaç: Güvenli olmayan/pahalı değişiklikleri otomatik olarak reddetmek.
Politikalara örnekler:- Kaynak şifrelemesi gereklidir.
- Genel IP - sadece istisna listesi üzerinden.
- Örneklerin/kümelerin boyutunu ortama göre sınırlama.
- Gerekli etiketler: '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 testi
Terraform validate-Basic sözdizimi kontrolü.
Renk tonu - stil/antipatterns/sağlayıcı-özgüllük.
Infracost - PR'da ön maliyet tahmini.
Terratest - entegrasyon testleri (Go): standı kaldırın/kontrol edin/yıkın.
Kitchen-Terraform - kaynak değişmezleri ile birim testleri.
Sürüklenme algılama: salt okunur ve senkronize olmayan uyarıda periyodik 'plan'.
9) iGaming platformu için tipik modüller
Ağ
VPC/VNets/VPC-Peering, özel/genel alt ağlar, yönlendirme, NAT/Güvenlik Duvarı, Güvenlik Grupları/NSG.
DNS/Yük Devretme: Rota- политики, sağlık kontrolleri, gecikme tabanlı yönlendirme.
Veri
MySQL/PostgreSQL: Multi-AZ, PITR, 'auto _ minor _ version _ upgrade'.
Redis/Memcached: Multi-AZ, snapshot/TTL politikaları.
Veri Gölü/Lakehouse: kovalar, politikalar, tablolar (katalog/metastor).
ClickHouse/OLAP kümeleri: parçalama/çoğaltma, disk ilkeleri.
Otobüsler/Kuyruklar
Kafka/Pulsar/yönetilen varyantlar, ACL, saklama, kayıt şemaları.
K8s
EKS/AKS/GKE с NodeGroups, taints/tolerations, IRSA/Workload Identity, Ingress/Service Mesh, autoscaling.
Dış Sırların Entegrasyonu, Prometheus/Grafana, Loki/ELK, cert-manager.
Kenar/CDN
CDN dağıtımı, önbellekleme kuralları, WAF, bot azaltma.
10) Değişkenler/Çıktılar/yereller - uygulama
Hesaplanan değerler için yerliler (maskeler, isimler).
modül API olarak çıktı: minimum gereklidir.
Kaynak adlandırma '<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) Çoklu bulut ve bölgeler
Aynı modüller, farklı sağlayıcılar aracılığıyla soyutlama: 'aws', 'azurerm', 'google'.
Bölgeler arası kaynaklar için sağlayıcı takma adı (DR/replication).
Hizmet farklılıkları, koşullarla ve modüllerdeki phicheflags ile kapatılır.
Veriler lokalize edilmiştir: bireysel kovalar/bölgelere göre DB (EU/TR/LATAM).
hcl provider "aws" { region = "eu-west-1" alias = "eu" }
provider "aws" { region = "sa-east-1" alias = "latam" }
12) Kod olarak gözlemlenebilirlik ve uyarılar
Panolar, uyarı kuralları (p95/p99, hata oranı, CPU/IO), SLO monitörleri.
Erişim/denetim günlükleri (WORM), maliyet metrikleri (etiket/ad alanına göre).
Olaylar: sohbet bildirimleri, kaynak ek açıklamalarındaki runbook URL'leri.
13) FinOps: Değer Kontrol Altında
PR + bütçe uyarılarında Infracost.
Çevre kotaları: örnek/depo sınıflarını sınırlamak.
Otomatik hijyen: Dev kaynaklar için TTL, kova/günlük tutma politikaları.
Spot/Kritik olmayan görevler için önlenebilir, Prod için rezervasyon.
14) Göç/Değişim Süreçleri
Yasal kaynaklar için 'terraform import' (hemen sonra - 'plan'/' apply').
Yıkımı önlemek için yeniden düzenleme yaparken 'moved'/' removed' blokları.
Sıfır kesinti süresi değişiklikleri: Kritik konturlar (DB/dengeleyiciler) için çift haddeleme (mavi-yeşil).
Adım adım PR: Önce yeni kaynak grubu, sonra trafik, sonra söküm.
15) Güvenlik ve uyumluluk
En az ayrıcalık: Modüller yalnızca gerekli hakları yaratır, kullanmaz
Her yerde KMS: birimlerin/yedeklerin/sırların/durumların şifrelenmesi.
CI'de Terraform/IaC taraması (IaC için SAST).
Git Dışındaki Sırlar: Sadece Gizli Yöneticiler rotasyon ve erişim denetimi.
PII bölgeleri: erişim etiketleri/politikaları, bölgeler arası ihracat yasağı.
16) Örnek şablonlar
PITR (fikir) ile ilişkisel veritabanı:hcl module "db" {
source = "../../modules/mysql"
name = "wallet"
multi_az = true storage_gb = 500 pitr = true backup_retention_days = 14 deletion_protection = true
}
İzleme ve SLO uyarısı:
hcl module "slo_latency" {
source = "../../modules/monitoring/slo"
name = "api-latency-p95"
target_ms = 250 window = "30m"
alert_channels = ["chatops#incidents"]
}
WAF/CDN dağılımı:
hcl module "cdn" {
source = "../../modules/cdn"
domain = "example. com"
waf_enabled = true cache_ttl = 600
}
17) Terraform/IaC Uygulama Kontrol Listesi
1. Arşiv yapısını seçin (modül monorepos + ortam dizinleri).
2. Uzak durumu kilitler ve şifreleme (KMS) ile yapılandırın.
3. GitOps-pipeline girin: fmt/validate/tflint/plan - review.
4. Bir modül kitaplığı oluşturun (VPC, K8s, DB, kuyruklar, izleme, CDN, sırlar).
5. CI'da Kod Olarak Politika (OPA/Sentinel) ve IaC taramalarını etkinleştirin.
6. Yönetici aracılığıyla sırları organize edin, anahtarlar - KMS, rotasyonlar.
7. Test ekle: Kritik modüller için Terratest, PR'da Infracost.
8. SLO/uyarıları ve "kod olarak izleme'yi tanımlayın.
9. Kritik olmayan kaynaklar için kotalar/bütçeler ve TTL oluşturun.
10. Aşamalar halinde göçleri planlayın (mavi-yeşil/iki raylı).
18) Antipatterns
Terraform dışındaki kaynakların manuel "kar taneleri" - "uygulandığında" sürüklenme ve kazalar.
Bir durumu yerel olarak/kilitsiz depolamak - yarış ve tutarlılık kaybı.
Şifresiz Git/in '.tfvars' sırlar.
Yüzlerce kaynak için "Tanrı-modülü" - test/yeniden kullanamama.
PR ve plan incelemesi olmadan dizüstü bilgisayardan yemeğe doğrudan 'uygulayın'.
Kod Olarak İlkenin Yoksayılması/taranması - sızıntılar, genel IP/kovalar.
Infracost/bütçelerin eksikliği - öngörülemeyen maliyet.
Özet
Terraform/IaC, iGaming platformuna tekrarlanabilirlik, hız ve kontrollü güvenlik/maliyet sağlar. Modüler tasarım, sıkı durum ve GitOps, güvenlik politikaları, autotest'ler ve FinOps, altyapıyı güvenilir bir "boru hattı'na dönüştürür - kesinti olmadan hızlı sürümler, öngörülebilir p99 ve zirve turnuvaları ve düzenleyici gereklilikler için hazırlık.