← Back to Blog
DEVOPS

Immutable Infrastructure Nedir?

F. Çağrı BilgehanJanuary 18, 20269 min read
immutable infrastructuredevopspackerterraform

Immutable Infrastructure Nedir? Değiştirme, Yeniden Oluştur

Sunucularınıza SSH ile bağlanıp değişiklik mi yapıyorsunuz? Konfigürasyon kayması (drift) mı yaşıyorsunuz? Immutable Infrastructure ile sunuculara dokunmayın — değiştirmek yerine yeniden oluşturun.

Mutable vs Immutable

Mutable (Geleneksel)

Server oluştur → SSH ile bağlan → Güncelle → Yamala → Yapılandır
                 (aylar sonra sunucu "kardanadam" olur)

Sorun: Sunucu drift — ortamlar birbirinden farklılaşır
  Dev:    nginx 1.20, node 18, openssl 1.1
  Prod:   nginx 1.22, node 16, openssl 3.0  ← WTF?

Immutable (Modern)

Image oluştur (nginx + node + app) → Deploy
Güncelleme? → Yeni image oluştur → Eski'yi sil, yeni'yi deploy
                 (her sunucu aynı image'dan, her zaman temiz)

Nasıl Çalışır?

1. Build: Packer ile golden image oluştur
   └─ OS + runtime + app + config = tek image

2. Deploy: Terraform ile altyapıyı kur
   └─ Image'dan yeni sunucu başlat

3. Update: Yeni image oluştur + eski sunucuları değiştir
   └─ Blue-Green veya Rolling update ile

4. Asla SSH yapma!

Packer ile Golden Image

source "amazon-ebs" "web" {
  ami_name      = "web-app-{{timestamp}}"
  instance_type = "t3.medium"
  source_ami    = "ami-0abcdef1234567890"
  ssh_username  = "ubuntu"
}

build {
  sources = ["source.amazon-ebs.web"]

  provisioner "shell" {
    inline = [
      "sudo apt-get update",
      "sudo apt-get install -y nginx nodejs",
      "sudo systemctl enable nginx"
    ]
  }

  provisioner "file" {
    source      = "./app/"
    destination = "/var/www/app/"
  }
}

Container = Immutable Infrastructure

Docker container'ları doğal olarak immutable'dır:

FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --production
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
docker build → Image (değişmez)
docker run   → Container (yeni instance)
Güncelleme   → Yeni image build → Eski container'ı sil

Karşılaştırma

| Özellik | Mutable | Immutable | |---------|---------|-----------| | Güncelleme | SSH + patch | Yeni image + deploy | | Drift riski | Yüksek | Yok | | Geri alma | Zor | Önceki image'a dön | | Tekrarlanabilirlik | Düşük | %100 | | Debug | Kolay (SSH) | Log + monitoring gerekli | | Güvenlik | Açık bağlantı noktaları | SSH yok, saldırı yüzeyi küçük |

Pets vs Cattle

| Pets (Evcil Hayvan) | Cattle (Sığır) | |---------------------|----------------| | Her sunucunun adı var | Sunucular numaralı | | Özenle bakılır | Otomatik yönetilir | | Bozulunca tamir edilir | Bozulunca yenisi oluşturulur | | Mutable | Immutable |

Araçlar

| Araç | Rol | |------|-----| | Packer | Image oluşturma | | Docker | Container image | | Terraform | Altyapı provisioning | | Ansible | Image build sırasında yapılandırma | | Kubernetes | Container orkestrasyon |

Zorluklar

  • State yönetimi — Veritabanı, dosya depolama immutable değil
  • Build süresi — Her değişiklikte yeni image
  • Loglama — Sunucu silinince loglar kaybolur → merkezi log
  • Debug — SSH yoksa sorun tespiti zorlaşır → observability

Best Practices

  1. Asla SSH yapmayın — Log ve monitoring ile sorun çözün
  2. CI/CD pipeline'da image build — Manuel image oluşturmayın
  3. Merkezi loglama — ELK, Loki, Datadog
  4. Blue-Green deploy — Geri alma kolaylığı
  5. Image versiyonlama — Her image'a versiyon ve tarih etiketi
  6. State'i ayırın — Veritabanı ve dosyalar ayrı yönetilmeli

Sonuç

Immutable Infrastructure, konfigürasyon kaymasını ortadan kaldırır ve her ortamın birebir aynı olmasını garanti eder. Container'lar bu yaklaşımı doğal olarak uygular. Sunuculara dokunmayın — yeniden oluşturun.

Immutable Infrastructure ve DevOps pratiklerini LabLudus platformunda öğrenin.

Related Posts

IaC Nedir?

Infrastructure as Code nedir ve neden kullanılır?

What Is Infrastructure as Code? Terraform & Automation Guide

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