Ansible ve Terraform: Altyapı Otomasyonunda Hangi İş, Hangi Araç?
Karşılaştırma

Ansible ve Terraform: Altyapı Otomasyonunda Hangi İş, Hangi Araç?

Hazırlayan: Mindset Institute EditörlüğüGüncellendi: 5 dk okuma

Terraform altyapıyı kurar, Ansible sunucuları yapılandırır. İki aracı yaklaşım, durum yönetimi ve kullanım alanı açısından karşılaştırın, birlikte kurgulayın.

Ortak zemin: altyapıyı kodla yönetmek

Ansible ve Terraform, elle yapılan sunucu ve bulut işlemlerini sürüm kontrolünde tutulan, gözden geçirilebilen ve tekrar çalıştırılabilen kod dosyalarına dönüştürür. İkisi de kod olarak altyapı (Infrastructure as Code) yaklaşımının araçlarıdır ve ikisi de istenen son durumu tarif etmeye dayanır.

Terraform, HashiCorp'un belgelerinde bulut ve kurum içi kaynakları sürümlenebilir, yeniden kullanılabilir yapılandırma dosyalarıyla tanımlamayı sağlayan bir araç olarak anlatılır. Geliştirici istenen son durumu bildirimsel olarak yazar, Terraform oraya ulaşmak için gereken adımları kendisi hesaplar.

Ansible ise Red Hat'in tanımıyla ajansız bir otomasyon aracıdır: yönettiği sunuculara ek yazılım kurulmasını gerektirmez, SSH üzerinden bağlanır, küçük programlar olan modülleri hedef makineye gönderip çalıştırır ve kaldırır. Görevler YAML biçimindeki playbook dosyalarında sırayla tanımlanır.

İki araç örtüşen alanlara sahip olsa da tasarım amaçları farklıdır: Terraform altyapı kaynaklarının yaşam döngüsünü, Ansible ise makinelerin içindeki yapılandırmayı ve operasyonel işleri yönetmek için öne çıkar.

Terraform nasıl çalışır?

Terraform iş akışı üç aşamadan oluşur: yazma, planlama ve uygulama. Kaynaklar HCL (HashiCorp Configuration Language) ile tanımlanır; plan komutu mevcut altyapı ile tanım arasındaki farkı gösterir, onaylanan değişiklik apply ile bağımlılık sırasına göre uygulanır.

Terraform'un iki temel yapı taşı vardır: • Sağlayıcılar (providers): Terraform'u AWS, Azure, Google Cloud, Kubernetes ya da GitHub gibi platformların API'lerine bağlayan eklentilerdir. • Durum dosyası (state): Terraform'un yönettiği gerçek altyapının kaydıdır. Hangi kaynağın oluşturulacağına, değiştirileceğine ya da silineceğine bu kayda bakarak karar verir.

Bu yapı Terraform'u ağ, sanal makine, veritabanı hizmeti, depolama, DNS kaydı ve yetki tanımı gibi kaynakların oluşturulmasında, değiştirilmesinde ve kaldırılmasında güçlü kılar. Bir kaynağı tanımdan sildiğinizde Terraform onu altyapıdan da kaldırmayı planlar. Durum dosyası ekip çalışmasında uzak bir depoda, kilitlemeyle birlikte tutulmalıdır; aksi halde iki kişinin aynı anda yaptığı değişiklikler çakışır.

Ansible nasıl çalışır?

Ansible'da yönetilen makineler bir envanter dosyasında listelenir. Playbook, bir ya da daha fazla “play” içerir; her play, envanterdeki belirli sunucu gruplarında sırayla çalışacak görevlerden oluşur. Her görev bir modül çağırır: paket kur, dosya kopyala, servis başlat, kullanıcı oluştur gibi.

Modüller istenen durumu tarif eder; sistem zaten o durumdaysa değişiklik yapılmaz, farklıysa uyumlu hale getirilir. Bu özellik aynı playbook'un güvenle tekrar çalıştırılabilmesini sağlar. Roller, görevleri yeniden kullanılabilir parçalara ayırır; örneğin bir “web sunucusu” rolü farklı projelerde aynen kullanılabilir.

Ansible'ın güçlü olduğu işler: • İşletim sistemi sıkılaştırma, paket ve yama yönetimi • Uygulama kurulumu ve yapılandırma dosyalarının yönetimi • Sıralı operasyonlar, örneğin sunucuları yük dengeleyiciden tek tek çıkarıp güncelleyerek geri almak • Ağ cihazları ve eski sistemler gibi API'si sınırlı hedeflerin otomasyonu

Ansible bulut kaynağı da oluşturabilir, ancak Terraform'daki gibi merkezi bir durum dosyası tutmaz; bu yüzden altyapının tamamının yaşam döngüsünü izlemek daha fazla disiplin ister.

Temel farklar: ölçüt ölçüt

  • Ana odak: Ansible / makinelerin içindeki yapılandırma ve operasyon. Terraform / bulut ve altyapı kaynaklarının oluşturulması ve yaşam döngüsü.
  • Yaklaşım: Ansible / görevler sırayla yazılır, her modül istenen durumu sağlar. Terraform / tamamen bildirimsel; sırayı bağımlılık grafiğine göre araç belirler.
  • Durum takibi: Ansible / merkezi durum dosyası yok, her çalıştırmada hedefin mevcut hali kontrol edilir. Terraform / durum dosyası tutulur, değişiklik planı bu kayda göre çıkarılır.
  • Değişiklik önizleme: Ansible / kontrol modu ile kuru çalıştırma yapılabilir. Terraform / plan çıktısı iş akışının merkezindedir ve kod incelemesine eklenir.
  • Kaynak silme: Ansible / silme için ayrıca görev yazılır. Terraform / tanımdan çıkarılan kaynak silme planına girer.
  • Bağlantı biçimi: Ansible / SSH ya da platform bağlantısıyla hedef makinelere erişir, ajan gerektirmez. Terraform / platform API'leriyle sağlayıcılar üzerinden konuşur.
  • Dil: Ansible / YAML playbook ve Jinja şablonları. Terraform / HCL.
  • Tipik kullanıcı: Ansible / sistem yöneticileri, ağ ve operasyon ekipleri. Terraform / bulut, platform ve DevOps ekipleri.

İkisini birlikte kullanmak

Yaygın ve sağlıklı kurguda Terraform altyapıyı kurar, Ansible içini yapılandırır. Örnek bir akış:

  • Terraform ağı, güvenlik gruplarını, sanal makineleri ve yönetilen veritabanını oluşturur
  • Terraform çıktıları, örneğin oluşan sunucuların adresleri, Ansible envanterine aktarılır ya da Ansible bulut sağlayıcısından dinamik envanter okur
  • Ansible işletim sistemi ayarlarını yapar, uygulamayı kurar, izleme ajanını yapılandırır
  • Her iki aracın kodu aynı sürüm kontrol deposunda ya da birbirine bağlı depolarda tutulur, CI/CD hattında önce Terraform plan ve apply, ardından Ansible playbook çalışır

Konteyner ve Kubernetes ağırlıklı ortamlarda Ansible'ın rolü daralabilir, çünkü uygulama yapılandırması imajın ve orkestrasyon tanımlarının içine taşınır. Buna karşın sanal makine, ağ cihazı ve kurum içi sunucu barındıran karma ortamlarda iki aracın birlikteliği sık görülür.

Karar ölçütleri ve sık yapılan hatalar

Karar verirken sorun: • Asıl ihtiyaç yeni bulut kaynakları oluşturmak mı, var olan sunucuları tutarlı tutmak mı? • Altyapıda yapılacak her değişikliğin önceden incelenip onaylanması gerekiyor mu? • Ortamda ağ cihazları, eski sistemler ya da API'si olmayan hedefler var mı? • Ekip YAML ve kabuk komutlarına mı, yoksa bildirimsel kaynak tanımlarına mı daha yakın?

Sık yapılan hatalar: • Terraform durum dosyasını yerel diskte tutmak ya da içinde gizli bilgi olduğunu unutup sürüm kontrolüne eklemek • Terraform kaynağını konsoldan elle değiştirmek; tanım ile gerçek altyapı arasında sapma oluşur • Ansible'da modül yerine her işi kabuk komutuyla yazmak; tekrar çalıştırılabilirlik kaybolur • Ansible ile bütün bulut altyapısını kurup silme ve değişiklik takibini sonradan aramak • Aynı kaynağı iki araca birden yönetmek; iki araç birbirinin değişikliğini geri alır

Mindset programlarında bu konular

Ansible ile Konfigürasyon Yönetimi programı Ansible temelleri ve mimarisiyle başlar; playbook tasarımı, rol mimarisi ve yeniden kullanım, dinamik envanter ve bulut entegrasyonu, AWX ve Ansible Automation Platform ile CI/CD ve GitOps ile Ansible başlıklarını işler.

Terraform ile Altyapı Otomasyonu programı Terraform temelleri ve HCL dili, durum yönetimi ve backend, modüler Terraform mimarisi, politika ve uyumluluk otomasyonu, CI/CD ile Terraform iş akışları ve çok bulutlu strateji modüllerinden oluşur. Kurumsal ölçekte Ansible çalıştırmak isteyen ekipler için Ansible Automation Platform (AWX) ile Kurumsal Otomasyon programı ayrıca yer alır.

İlgili Mindset programı

Ansible ile Konfigürasyon Yönetimi

Sık sorulanlar

Sık sorulan sorular

Terraform, Ansible'ın yerini alabilir mi?

Kısmen. Terraform sunucu oluşturulurken başlangıç betiği çalıştırabilir, ama sunucunun içindeki paket, dosya ve servislerin sürekli yönetimi için tasarlanmamıştır. Uzun ömürlü sunucularda yapılandırma yönetimi için Ansible gibi bir araç ya da değişmez imaj yaklaşımı gerekir.

Terraform ile oluşturduğum sunucuları Ansible'a nasıl tanıtırım?

İki yol yaygındır. Terraform çıktıları, örneğin oluşan sunucuların adresleri, Ansible envanterine aktarılabilir. Alternatif olarak Ansible bulut sağlayıcısından dinamik envanter okuyabilir; böylece yeni sunucular elle listeye eklenmeden playbook kapsamına girer. Aynı kaynağı iki araca birden yönettirmemek gerekir.

Değişmez altyapı yaklaşımında Ansible'a gerek kalır mı?

Değişmez altyapıda sunucular yerinde güncellenmez, yeni imajla değiştirilir. Bu durumda Ansible çoğunlukla imaj üretim aşamasında kullanılır; çalışan sunucuların yapılandırmasını sürekli düzeltme ihtiyacı azalır, ama imajın içeriğini kodla tanımlama ihtiyacı devam eder.

Terraform durum dosyası neden bu kadar önemli?

Terraform hangi kaynağı yönettiğini ve onun mevcut özelliklerini bu kayıttan bilir. Dosya kaybolursa ya da gerçek altyapıyla uyumsuz hale gelirse Terraform var olan kaynakları tanımayabilir ya da yeniden oluşturmaya çalışabilir; bu yüzden uzak depoda, kilitli ve yedekli tutulmalıdır.