Terraform + Ansible + CI ile End-to-End DevOps Pipeline

Modern DevOps dünyasında sadece uygulama deploy etmek yeterli değil. Altyapının, konfigürasyonun ve deployment süreçlerinin tamamının otomatik olması bekleniyor.
Bu yazıda gerçek hayatta kullanılan bir senaryo üzerinden: Terraform ile altyapı kuracağız, Ansible ile konfigürasyon ve deploy yapacağız, GitHub Actions CI pipeline ile her şeyi tek git push ile çalıştıracağız.
Senaryo
Hedeflediğimiz tam otomatik akış şu şekilde çalışıyor:
- Geliştirici kodu GitHub'a push eder
- CI pipeline tetiklenir
- Terraform AWS üzerinde sunucuyu oluşturur
- Ansible sunucuya bağlanır, Docker kurar ve uygulamayı ayağa kaldırır
- Uygulama production'da çalışır
Terraform altyapıyı tanımlar; Ansible ise o altyapıyı konfigüre eder. İki araç birbirini mükemmel tamamlar: Terraform "ne var" sorusunu yanıtlarken, Ansible "nasıl ayarlanmış" sorusunu yanıtlar.
1. Terraform ile Altyapı Kurulumu
AWS üzerinde bir EC2 instance oluşturup public IP'sini dışarı açıyoruz. Ansible bu IP'yi kullanarak sunucuya bağlanacak.
Output bloğu, sonraki adımlarda Ansible'ın kullanacağı IP adresini pipeline'a aktarır.
2. Ansible ile Konfigürasyon ve Deploy
Terraform sunucuyu oluşturduktan sonra Ansible devreye girer. Docker kurulumunu yapar ve uygulama container'ını başlatır.
Playbook idempotent yapıdadır; aynı playbook birden fazla çalıştırılsa da sonuç değişmez. Bu, güvenli re-deploy yapılabilmesi için kritiktir.
3. CI — GitHub Actions Pipeline
Her şeyi birleştiren GitHub Actions workflow'u. Main branch'e her push'ta otomatik tetiklenir.
Sonuç
Bu üç araç bir araya geldiğinde tam anlamıyla "push to deploy" deneyimi ortaya çıkıyor. Geliştirici yalnızca kod yazar; altyapının ayağa kalkması, sunucunun hazırlanması ve uygulamanın deploy edilmesi tamamen otomatik gerçekleşir.
- Terraform → Altyapı (ne var?)
- Ansible → Konfigürasyon (nasıl ayarlanmış?)
- GitHub Actions → Orkestrasyon (ne zaman ve hangi sırayla?)
Bu pattern, küçük startup'lardan büyük kurumsal ekiplere kadar ölçeklenen, battle-tested bir DevOps altyapısının temelini oluşturur.