Skip to main content
DevOps

Terraform ile Altyapı Yönetimi: Infrastructure as Code Kapsamlı Rehberi

Mart 29, 2026 5 dk okuma 6 views Raw
Ayrıca mevcut: en
Bulut altyapısı sunucu odası
İçindekiler

Infrastructure as Code (IaC) Nedir?

Infrastructure as Code (IaC), altyapı kaynaklarının manuel yapılandırma yerine kod dosyaları aracılığıyla tanımlanması, sağlanması ve yönetilmesi pratiğidir. Bu yaklaşım, yazılım geliştirme süreçlerindeki versiyon kontrolü, kod incelemesi ve sürekli entegrasyon gibi en iyi uygulamaları altyapı yönetimine taşır.

Geleneksel altyapı yönetiminde, sunucular ve ağ kaynakları el ile veya betiklerle yapılandırılırdı. Bu yaklaşım, insan hatalarına açık, tekrarlanması zor ve belgelenmesi güç bir süreçti. IaC, bu sorunları ortadan kaldırarak altyapıyı deterministik, tekrarlanabilir ve denetlenebilir hale getirir.

Terraform Nedir ve Nasıl Çalışır?

Terraform, HashiCorp tarafından geliştirilen açık kaynaklı bir Infrastructure as Code aracıdır. Bildirimsel (declarative) bir yaklaşım kullanır; yani altyapının istenen son durumunu tanımlarsınız, Terraform ise mevcut durumdan istenen duruma nasıl geçileceğini otomatik olarak hesaplar.

Terraform'un çalışma prensibi üç temel adımdan oluşur:

  1. Write (Yaz): HCL (HashiCorp Configuration Language) ile altyapı kaynaklarını tanımlayın
  2. Plan (Planla): terraform plan komutuyla yapılacak değişikliklerin önizlemesini görün
  3. Apply (Uygula): terraform apply komutuyla değişiklikleri gerçekleştirin

HCL (HashiCorp Configuration Language)

HCL, Terraform'un yapılandırma dilidir. JSON'un okunabilirliğini artırmak amacıyla tasarlanmış, insan dostu bir söz dizimine sahiptir. HCL'de temel yapı taşları bloklar, argümanlar ve ifadelerdir.

Temel Kaynak Tanımları

Terraform'da her altyapı kaynağı bir resource bloğu ile tanımlanır. Kaynak türü ve adı, kaynağı benzersiz şekilde tanımlar. Kaynak bloğunun içinde, kaynağın yapılandırma parametreleri belirtilir.

Değişkenler (variable), yapılandırmayı parametrik hale getirir. Girdi değişkenleri, modüllere dışarıdan değer aktarmak için kullanılır. Çıktı değişkenleri (output) ise bir modülün diğer modüllere veya kullanıcıya sunduğu değerleri tanımlar.

Veri Kaynakları ve İfadeler

Veri kaynakları (data), mevcut altyapı kaynaklarından bilgi okumak için kullanılır. Örneğin, mevcut bir VPC'nin ID'sini veya AMI bilgisini sorgulamak için data kaynakları kullanılır. HCL'de koşullu ifadeler, döngüler (for_each, count) ve fonksiyonlar gibi programlama yapıları da desteklenir.

Terraform Sağlayıcıları (Providers)

Sağlayıcılar, Terraform'un çeşitli bulut platformları ve hizmetlerle etkileşim kurmasını sağlayan eklentilerdir. Her sağlayıcı, ilgili platformun API'leriyle iletişim kurarak kaynakları oluşturur, okur, günceller ve siler.

SağlayıcıPlatformPopüler Kaynaklar
awsAmazon Web ServicesEC2, S3, RDS, Lambda, VPC
azurermMicrosoft AzureVM, Blob Storage, SQL Database
googleGoogle Cloud PlatformCompute Engine, GKE, Cloud SQL
kubernetesKubernetesDeployment, Service, ConfigMap
cloudflareCloudflareDNS, WAF, Workers

Terraform Registry, topluluk tarafından geliştirilen binlerce sağlayıcıyı barındırır. Bu sayede neredeyse her bulut hizmeti ve SaaS platformu Terraform ile yönetilebilir.

Durum (State) Yönetimi

Terraform state, altyapının mevcut durumunu izleyen kritik bir bileşendir. State dosyası, Terraform'un yapılandırma dosyalarındaki tanımları gerçek altyapı kaynaklarıyla eşleştirmesini sağlar.

Uzak State (Remote Backend)

Üretim ortamlarında state dosyasının yerel olarak saklanması ciddi riskler taşır. Uzak backend kullanarak state dosyasını merkezi ve güvenli bir konumda saklamak en iyi uygulamadır. Popüler uzak backend seçenekleri arasında Terraform Cloud, AWS S3 + DynamoDB (kilitleme için), Azure Blob Storage ve Google Cloud Storage bulunur.

State Kilitleme

Birden fazla geliştiricinin aynı altyapı üzerinde çalıştığı ortamlarda state kilitleme (state locking) mekanizması kritik önem taşır. Bu mekanizma, aynı anda iki kişinin state dosyasını değiştirmesini önleyerek veri tutarsızlığını engeller.

Modüller

Modüller, Terraform yapılandırmalarının yeniden kullanılabilir paketleridir. Bir modül, belirli bir altyapı bileşenini (örneğin VPC, Kubernetes kümesi veya veritabanı) kapsülleyen bir dizi Terraform dosyasıdır.

Modül Tasarım İlkeleri

  • Tek Sorumluluk: Her modül tek bir altyapı bileşenini yönetmelidir
  • Parametrik Yapı: Değişkenler ile modülü farklı ortamlarda kullanılabilir hale getirin
  • Çıktı Değerleri: Diğer modüllerin ihtiyaç duyabileceği bilgileri output olarak sunun
  • Versiyon Yönetimi: Modülleri sürümleyerek geriye dönük uyumluluk sağlayın
  • Dokümantasyon: README ve examples dizini ile modülün kullanımını açıklayın

Çalışma Alanları (Workspaces)

Terraform workspaces, aynı yapılandırmayı farklı ortamlar (geliştirme, test, üretim) için ayrı state dosyalarıyla yönetmenizi sağlar. Her workspace, kendi state dosyasına sahiptir ve birbirinden bağımsız olarak yönetilir.

Ancak workspaces'in sınırlamaları da vardır. Büyük ölçekli projelerde, ortamlar arasında önemli yapılandırma farklılıkları olduğunda, ayrı dizinler veya ayrı Git depoları kullanmak daha uygun olabilir. Workspaces, yapılandırmanın büyük ölçüde aynı olduğu ancak parametrelerin değiştiği senaryolar için idealdir.

En İyi Uygulamalar

Terraform ile başarılı altyapı yönetimi için aşağıdaki en iyi uygulamaları takip etmeniz önerilir:

  1. Versiyon Kontrolü: Tüm Terraform dosyalarını Git'te saklayın ve kod incelemesi sürecinden geçirin
  2. CI/CD Entegrasyonu: Terraform plan ve apply adımlarını CI/CD pipeline'larına entegre edin
  3. State'i Uzakta Saklayın: Üretim ortamlarında mutlaka uzak backend kullanın
  4. Sırları Yönetin: Hassas bilgileri Terraform dosyalarına yazmayın; HashiCorp Vault veya AWS Secrets Manager kullanın
  5. Modüler Tasarım: Tekrar eden yapılandırmaları modüllere dönüştürün
  6. Plan Çıktısını İnceleyin: Apply öncesi plan çıktısını dikkatle gözden geçirin
  7. Tagging Stratejisi: Tüm kaynaklara tutarlı etiketler ekleyin

Terraform, altyapı yönetimini kodlamaya dönüştürerek ekiplerin daha hızlı, güvenilir ve tekrarlanabilir şekilde altyapı oluşturmasını sağlar. Doğru uygulamalarla Terraform, DevOps süreçlerinizin temel taşı haline gelecektir.

Terraform Alternatifleri ve Karşılaştırma

Terraform'un yanı sıra Pulumi (genel amaçlı programlama dilleriyle IaC), AWS CloudFormation (AWS'e özel), Azure Bicep (Azure'a özel) ve Crossplane (Kubernetes-native IaC) gibi alternatifler de mevcuttur. Terraform'un en büyük avantajı çoklu bulut desteği ve geniş sağlayıcı ekosistemidir.

Sonuç

Terraform, Infrastructure as Code dünyasının en güçlü ve yaygın kullanılan aracıdır. HCL ile okunabilir yapılandırma dosyaları, zengin sağlayıcı ekosistemi, modüler tasarım desteği ve güçlü durum yönetimi ile altyapınızı güvenle kodlayabilirsiniz. DevOps kültürünü benimsemek ve altyapı otomasyonunu hayata geçirmek isteyen ekipler için Terraform, vazgeçilmez bir araçtır.

Bu yazıyı paylaş