Yan yana
TerraformvsAnsible
Terraform ile Ansible arasındaki fark nedir?
Güncellendi 2 dk okuma6 fark
Kısaca
Terraform bulut altyapısını tanımlayıp oluşturur ve bir state dosyasında izler; Ansible ise mevcut makineleri yapılandırır ve SSH üzerinden yazılım dağıtır.
Terraform
Terraform, kod olarak altyapı aracıdır; bulut kaynaklarını yapılandırma dosyalarında tarif edersiniz, tek komut onları buna göre oluşturur ya da günceller.
Terraform sayfasını okuAnsible
Ansible, YAML playbook'larını ajan kurmadan SSH üzerinden çalıştırarak sunucuları yapılandıran ve uygulama dağıtan açık kaynaklı bir otomasyon aracıdır.
Ansible sayfasını okuTerraform ve Ansible karşılaştırması
| Özellik | Terraform | Ansible |
|---|---|---|
| Ana iş | Altyapı oluşturmak (provisioning) | Makineleri yapılandırmak ve yazılım dağıtmak |
| Tarz | Bildirime dayalı: son durumu tarif edin | Görev listeleri, çoğunlukla idempotent modüller |
| Dil | HCL | YAML playbook'ları |
| State | Bir state dosyasında izlenir | Yok; her çalışmada makineleri kontrol eder |
| Nasıl bağlanır | Bulut ve servis API'leri | SSH ya da WinRM, agent'sız |
| Geliştiren | HashiCorp; OpenTofu açık bir çatallanmadır | Red Hat |
Fark, açıklamalı
İkisi de infrastructure as code araçlarıdır, ama farklı adımlara odaklanırlar. HashiCorp'un 2014'te yayımladığı Terraform esas olarak kaynak oluşturmayla (provisioning) ilgilidir: bir VPC, bir Kubernetes kümesi ya da bir DNS kaydı gibi istediğiniz kaynakları HCL dosyalarında tarif edersiniz; terraform apply da gerçeklik kodla eşleşene kadar her sağlayıcının API'si üzerinden onları oluşturur, değiştirir ya da siler.
İlk olarak 2012'de yayımlanan ve 2015'ten beri Red Hat'in parçası olan Ansible ise esas olarak yapılandırmayla ilgilidir: YAML ile yazılan playbook'lar paket kurmak, yapılandırma dosyalarını düzenlemek, kullanıcı oluşturmak ve servisleri yeniden başlatmak gibi görevleri listeler; Ansible da bunları mevcut makinelerde SSH üzerinden çalıştırır. Sunucularda bir agent gerektirmez ve modülleri idempotent olacak şekilde tasarlanmıştır; bir playbook'u iki kez çalıştırmak aynı sonucu verir.
Terraform oluşturduklarını kaydeden bir state dosyası tutar; böylece değişikliklerin kesin bir planını hesaplayabilir ve koddan kaybolan kaynakları kaldırabilir. Ansible state izlemez; her çalışmada makineleri kontrol eder ve eksik olanı uygular. Yaygın kalıbın ikisini birden kullanmak olmasının nedeni budur: sunucuları ve bulut servislerini oluşturmak için Terraform, üzerlerinde çalışanları kurmak için Ansible.
Sık yapılan bir yanlış, araçların birbirinin yerine kullanılabileceğini düşünmektir. Ansible bazı bulut kaynaklarını oluşturabilir, Terraform da betik çalıştırabilir, ama her biri kendi güçlü alanının dışında hantaldır. Container tabanlı kurulumlarda Ansible'ın rolü küçülür, çünkü imajlar Dockerfile'larla derlenir ve Kubernetes tarafından çalıştırılır. Terraform'un 2023'teki lisans değişikliğinden beri açık kaynaklı çatallanma OpenTofu da bir seçenektir.
Hangisini kullanmalısınız?
Terraform şu durumlarda doğru seçim:
- Sağlayıcılar arasında bulut kaynakları oluşturup yönetiyorsunuz.
- Neyin değişeceğini tam olarak gösteren bir plan istiyorsunuz.
- Ağları, veritabanlarını, DNS'i ve kümeleri kod olarak yönetiyorsunuz.
Ansible şu durumlarda doğru seçim:
- Sunucuları yapılandırıyor, paket kuruyor ve uygulama dağıtıyorsunuz.
- Şirket içindekiler dahil mevcut makineleri yönetiyorsunuz.
- SSH üzerinden agent'sız otomasyon istiyorsunuz.
Sık sorulan sorular
Terraform ve Ansible birlikte kullanılabilir mi?
Evet, çoğu zaman da kullanılır. Terraform altyapıyı oluşturur, sonra Ansible onun oluşturduğu sunucuları yapılandırır; bazen terraform apply'dan hemen sonra tetiklenerek.
Terraform bildirime dayalı, Ansible prosedürel mi?
Kabaca evet. Terraform istenen son durumu tarif eder ve adımları kendisi bulur. Ansible playbook'ları ise görevleri sırayla listeler, ama her modül harekete geçmeden önce mevcut durumu kontrol eder.
OpenTofu nedir?
HashiCorp'un Terraform'u 2023'te kaynağı görülebilir bir lisansa taşımasından sonra oluşturulan ve Linux Foundation altında sürdürülen, Terraform'un açık kaynaklı bir çatallanmasıdır. Terraform koduyla büyük ölçüde uyumludur.