Infrastructure as Code (IaC) Nedir?
Sunucularınızı manuel mi kuruyorsunuz? Her ortam farklı mı yapılandırılmış? Infrastructure as Code ile altyapınızı kod olarak tanımlayın, versiyon kontrolüne alın ve tek komutla tekrarlanabilir şekilde kurun.
IaC Tanımı
Infrastructure as Code, sunucu, ağ, veritabanı gibi altyapı bileşenlerini kod dosyaları ile tanımlama ve yönetme yaklaşımıdır. Manuel tıklama yerine deklaratif kod yazarsınız.
Geleneksel: Konsol → Tıkla → Ayarla → "Nasıl yaptığımı unuttum"
IaC: Kod yaz → Git push → CI/CD → Otomatik kurulum
Neden IaC?
1. Tekrarlanabilirlik
Aynı altyapıyı dev, staging, production ortamlarında birebir kurun.
2. Versiyon Kontrolü
Altyapı değişikliklerini Git ile takip edin. Kim, ne, ne zaman değiştirdi?
3. Hız
Yeni ortam kurulumu dakikalar içinde tamamlanır.
4. Tutarlılık
"Snowflake server" sorunu ortadan kalkar. Her ortam aynıdır.
Deklaratif vs İmperatif
| Yaklaşım | Açıklama | Örnek | |-----------|----------|-------| | Deklaratif | "Ne istiyorum" tanımla | Terraform, CloudFormation | | İmperatif | "Nasıl yapılacağını" yaz | Bash script, Ansible |
Terraform Örneği
Basit bir web sunucusu:
# main.tf
provider "google" {
project = "my-project"
region = "europe-west1"
}
# Cloud Run servisi
resource "google_cloud_run_service" "app" {
name = "my-app"
location = "europe-west1"
template {
spec {
containers {
image = "gcr.io/my-project/my-app:latest"
resources {
limits = {
memory = "512Mi"
cpu = "1"
}
}
}
}
}
}
# Public erişim
resource "google_cloud_run_service_iam_member" "public" {
service = google_cloud_run_service.app.name
location = google_cloud_run_service.app.location
role = "roles/run.invoker"
member = "allUsers"
}
output "url" {
value = google_cloud_run_service.app.status[0].url
}
Terraform komutları:
terraform init # Provider'ları indir
terraform plan # Değişiklikleri önizle
terraform apply # Uygula
terraform destroy # Her şeyi sil
IaC Araçları Karşılaştırması
| Araç | Dil | Cloud | Yaklaşım | |------|-----|-------|----------| | Terraform | HCL | Multi-cloud | Deklaratif | | Pulumi | TypeScript/Python | Multi-cloud | Programatik | | CloudFormation | YAML/JSON | Sadece AWS | Deklaratif | | Ansible | YAML | Herhangi | İmperatif | | CDK | TypeScript/Python | AWS/GCP | Programatik |
Terraform State Yönetimi
Terraform, altyapının mevcut durumunu state dosyasında tutar:
# Remote state (ekip çalışması için)
terraform {
backend "gcs" {
bucket = "my-terraform-state"
prefix = "production"
}
}
Best Practices
- Remote state kullanın — Yerel state dosyası ekip çalışmasına uygun değil
- Modüller oluşturun — Tekrarlayan altyapıyı modülerleştirin
- Environment ayrımı yapın — dev/staging/prod için ayrı state
- Plan çıktısını inceleyin —
terraform plansonucunu her zaman okuyun - Drift detection uygulayın — Manuel değişiklikleri tespit edin
- Secret management — Şifreleri state'e değil, Vault/Secret Manager'a koyun
Sonuç
IaC, modern DevOps'un temel taşıdır. Altyapınızı kod olarak yönetmek tekrarlanabilirlik, tutarlılık ve hız sağlar. Küçük projeler bile IaC'den fayda görür — bir sonraki deployment'ınızda farkı göreceksiniz.
Infrastructure as Code ve DevOps pratiklerini LabLudus platformunda öğrenin.