← Blog'a Dön
DEVOPS

Infrastructure as Code (IaC) Nedir? Terraform ve Altyapı Otomasyonu

F. Çağrı Bilgehan13 Şubat 202610 dk okuma
iacterraformaltyapıotomasyon

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

  1. Remote state kullanın — Yerel state dosyası ekip çalışmasına uygun değil
  2. Modüller oluşturun — Tekrarlayan altyapıyı modülerleştirin
  3. Environment ayrımı yapın — dev/staging/prod için ayrı state
  4. Plan çıktısını inceleyin — terraform plan sonucunu her zaman okuyun
  5. Drift detection uygulayın — Manuel değişiklikleri tespit edin
  6. 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.

İlgili Yazılar

What Is Infrastructure as Code? Terraform & Automation Guide

IaC explained: Terraform, Pulumi, CloudFormation for infrastructure automation, version control, and repeatable deployments.

DevOps Nedir? Kültür, Araçlar ve Kariyer Rehberi

DevOps nedir, neden önemlidir ve nasıl uygulanır? DevOps kültürü, CI/CD pipeline, Infrastructure as Code ve DevOps mühendisi kariyer yolu.