Yıllarca “bir sunucuyu nasıl kurdum” bilgisi, genellikle tek bir kişinin kafasında veya dağınık, güncelliğini yitirmiş bir Word dokümanında yaşadı. Infrastructure as Code (IaC), bu bilgiyi çalıştırılabilir, versiyonlanabilir koda dönüştürüyor.
IaC’nin Temel Vaadi: Tutarlılık ve Tekrarlanabilirlik
Elle yapılan sunucu kurulumlarında, “geliştirme ortamında çalışıyor ama üretimde çalışmıyor” sorunlarının büyük kısmı, iki ortam arasındaki küçük, fark edilmeyen yapılandırma farklarından kaynaklanır. IaC ile, aynı kod her ortamda çalıştırıldığında birebir aynı sonucu üretir.
Terraform: Altyapıyı Tanımlamak
Terraform, “hangi kaynakların (sunucu, ağ, depolama) var olması gerektiğini” bildirimsel (declarative) 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 ve tanımladığınız hedef duruma ulaşmak için gereken değişiklikleri (oluşturma, güncelleme, silme) otomatik hesaplar.
Ansible: Yapılandırmayı Uygulamak
Terraform “hangi sunucular var olsun” sorusuna cevap verirken, Ansible “bu sunucular üzerinde ne yapılandırılsı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'
Neden Bu Kombinasyon Değerli?
Terraform + Ansible birlikte kullanıldığında, sıfırdan bir ortamı (sunucular + ağ + yapılandırma) tamamen otomatik, tekrarlanabilir şekilde kurabilirsiniz. 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ırabilirsiniz.
Sahadan Bir Perspektif: Geleneksel Yönetimden Geçiş
Yıllardır GUI tabanlı araçlarla (Server Manager, vCenter) çalışan biri için IaC’ye geçiş bir zihniyet değişimi gerektiriyor — “tıkla ve yapılandır” yerine “tanımla ve uygula”. Bu geçişte küçük başlamayı öneriyorum: önce tekrar eden, düşük riskli bir görevi (örn. standart bir test ortamı kurulumu) kodlaştırıp, güven arttıkça kapsamı genişletmek.
Versiyon Kontrolünün Getirdiği Şeffaflık
IaC kodu Git gibi bir versiyon kontrol sistemine konduğunda, “bu sunucuda ne zaman, kim, ne değiştirdi” sorusunun cevabı artık institutional hafızada değil, commit geçmişinde net şekilde yazılı oluyor — denetim ve sorun giderme açısından paha biçilmez bir avantaj.
Sonuç
IaC, altyapı yönetimini “sanat” olmaktan çıkarıp mühendislik disiplinine dönüştürüyor. Terraform ile “ne olması gerektiğini”, Ansible ile “nasıl yapılandırılması gerektiğini” kodlaştırmak, hem hızı hem de güvenilirliği kurumsal ölçekte artırıyor.