Logo GH

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ı vs ortam dizinleri:
  • Ç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.
Örnek arka uç. Tf (genelleştirilmiş):
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.

Örnek CI (fragman):
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'.
OPA (rego) kuralının arkasındaki fikir şudur:
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

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.

Contact

Bizimle iletişime geçin

Her türlü soru veya destek için bize ulaşın.Size yardımcı olmaya her zaman hazırız!

Telegram
@Gamble_GC
Entegrasyona başla

Email — zorunlu. Telegram veya WhatsApp — isteğe bağlı.

Adınız zorunlu değil
Email zorunlu değil
Konu zorunlu değil
Mesaj zorunlu değil
Telegram zorunlu değil
@
Telegram belirtirseniz, Email’e ek olarak oradan da yanıt veririz.
WhatsApp zorunlu değil
Format: +ülke kodu ve numara (örneğin, +90XXXXXXXXX).

Butona tıklayarak veri işlemenize onay vermiş olursunuz.