Bir sunucunun nasıl kurulduğu bilgisi genelde iki yerde yaşar: tek bir kişinin kafasında, ya da güncelliğini çoktan yitirmiş bir Word dokümanında. O kişi izinli olduğunda ya da işten ayrıldığında ne olacak? Infrastructure as Code (IaC), bu kırılgan bilgiyi çalıştırılabilir, versiyonlanabilir koda dönüştürerek soruyu ortadan kaldırıyor.
Neden Sadece “Güzel Bir Fikir” Değil
Elle yapılan kurulumlarda “geliştirmede çalışıyor, üretimde çalışmıyor” sorunlarının çoğu, iki ortam arasındaki küçük ve fark edilmeyen yapılandırma farklarından kaynaklanır. IaC ile aynı kod her ortamda çalıştırıldığında birebir aynı sonucu üretir — tutarlılık artık bir umut değil, garantidir.
Terraform: Ne Olması Gerektiğini Tanımlamak
Terraform, hangi kaynakların (sunucu, ağ, depolama) var olması gerektiğini bildirimsel bir dille tanımlar:
resource "aws_instance" "web_sunucu" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t3.medium"
tags = {
Name = "Web-Sunucu-Prod"
}
}
Bu kodu çalıştırdığınızda Terraform mevcut durumu kontrol eder, tanımlanan hedefe ulaşmak için gereken oluşturma/güncelleme/silme adımlarını kendisi hesaplar.
Ansible: Nasıl Yapılandırılacağını Uygulamak
Terraform “hangi sunucular var olsun” sorusuna cevap verirken, Ansible “bu sunucular üzerinde ne çalışsın, nasıl ayarlansın” sorusuna cevap verir:
- name: Web sunucularını yapılandır
hosts: web_sunuculari
tasks:
- name: Nginx kurulumu
apt:
name: nginx
state: present
- name: Güvenlik duvarı kuralı ekle
ufw:
rule: allow
port: '443'
İkisi birlikte kullanıldığında, sıfırdan bir ortamı (sunucu + ağ + yapılandırma) tamamen otomatik ve tekrarlanabilir şekilde kurabiliyorsunuz. Bir felaket kurtarma senaryosunda “3 gün süren manuel kurulum” yerine, aynı kodu çalıştırarak saatler içinde eşdeğer bir ortam ayağa kaldırmak mümkün hale geliyor.
Zihniyet Değişimi Gerektiriyor
Yıllardır GUI tabanlı araçlarla (Server Manager, vCenter) çalışmış biri için IaC’ye geçiş “tıkla ve yapılandır” alışkanlığından “tanımla ve uygula” disiplinine geçmek demek. Küçük başlamak işe yarıyor: önce tekrar eden, düşük riskli bir görevi (örneğin standart bir test ortamı kurulumu) kodlaştırıp, güven arttıkça kapsamı genişletmek.
Bir de görünmeyen ama değerli bir kazanç var: IaC kodu Git gibi bir versiyon kontrol sistemine konduğunda, “bu sunucuda ne zaman, kim, ne değiştirdi” sorusunun cevabı artık kimsenin hafızasında değil, commit geçmişinde yazılı oluyor. Sorun giderme ve denetim açısından bunun değerini abartmak zor.
Pratikte Ne Değişir
IaC, altyapı yönetimini kişiye bağlı bir “sanat”tan mühendislik disiplinine taşıyor. Terraform “ne olması gerektiğini”, Ansible “nasıl yapılandırılması gerektiğini” kodlaştırdığında, hem hız hem güvenilirlik kurumsal ölçekte artıyor.