Terraform Nedir ve Neden Kullanmalısınız?

Terraform, HashiCorp tarafından geliştirilen açık kaynaklı bir Infrastructure as Code (IaC) aracıdır. Altyapınızı kod olarak tanımlayarak, manuel konfigürasyon hatalarını %70'e varan oranlarda azaltabilirsiniz. Bu sayede, birden fazla ortam (development, staging, production) arasında tutarlı yapıların oluşturulması ve sürdürülmesi mümkün olur.
Terraform’un en büyük avantajı, plan komutu ile değişiklikleri önceden görüp onaylayabilmenizdir. Böylece, yanlış bir konfigürasyonun prodüksiyona gitmesi riski minimuma iner. Ayrıca, state dosyası sayesinde mevcut altyapı durumu her zaman izlenir ve ekip içinde senkronizasyon sağlanır.
Türkiye’de VDS sunucu paketleri ve fiziksel sunucu (dedicated server) gibi hizmetleri otomatikleştirerek maliyet tasarrufu ve hızlı ölçeklenebilirlik elde edebilirsiniz.
Temel Kavramlar ve Terminoloji
Terraform kullanmaya başlamadan önce bazı temel kavramları öğrenmek önemlidir:
- Provider: AWS, Azure, Google Cloud gibi bulut sağlayıcılarını ve on-premise çözümleri yönetmek için kullanılan eklentidir.
- Resource: Gerçek altyapı öğesidir; örneğin bir
aws_instancebir EC2 sanal makinesini temsil eder. - Module: Tekrar kullanılabilir yapı taşlarıdır. Büyük projelerde kodun tekrarını önler.
- State: Terraform’un altyapının mevcut durumunu sakladığı dosyadır. Remote backend (ör.
S3veyaTerraform Cloud) ile paylaşılmalıdır.
Bu terimler, WordPress hosting gibi spesifik hizmetlerin otomasyonunda da aynı mantıkla çalışır; sadece provider ve resource tipleri değişir.
Terraform Kurulumu ve İlk Proje Oluşturma
Terraform’u kurmak oldukça basittir. Resmi sitesinden zip dosyasını indirip sistem PATH’ine ekleyebilirsiniz. Linux ve macOS kullanıcıları için brew install terraform komutu da işe yarar.
İlk projenizi oluştururken şu adımları izleyin:
- Çalışma dizini oluşturun ve
main.tfdosyasını ekleyin. - Provider tanımlaması yapın; örnek:
provider "aws" { region = "eu-west-1" }. - İlk resource olarak bir VPC veya basit bir EC2 instance ekleyin.
terraform initile gerekli pluginleri indirin.terraform planile değişiklikleri önizleyin, ardındanterraform applyile uygulayın.
Bu adımları tamamladığınızda, altyapınız kodla yönetilmeye başlar ve AMD Ryzen VDS sunucular gibi yüksek performanslı ortamlarınızı da aynı yöntemle tanımlayabilirsiniz.
Modüllerle Yeniden Kullanılabilir Altyapı Tasarımı

Projeler büyüdükçe aynı yapı taşlarını tekrar tekrar tanımlamak yerine modüller oluşturmak mantıklıdır. Modüller, parametre alarak farklı ortamlara uyum sağlar ve kodun bakımını kolaylaştırır.
Örneğin, bir VPC modülü şu şekilde tanımlanabilir:
module "vpc" {
source = "./modules/vpc"
cidr = var.vpc_cidr
tags = var.common_tags
}
Bu modülü farklı projelerde sadece source ve değişkenleri değiştirerek kullanabilirsiniz. Böyle bir yaklaşım, kurumsal hosting çözümlerinde aynı ağ yapılandırmasını birden çok müşteriye hızlıca sunmanızı sağlar.
State Yönetimi ve Uzaktan Backend Kullanımı
Terraform’un en kritik bileşeni state dosyasıdır. Yerel bir dosya olarak saklandığında ekip içinde senkronizasyon sorunları ortaya çıkabilir. Bu sorunu çözmek için remote backend kullanmanız önerilir.
En yaygın backend seçenekleri:
| Backend | Avantaj | Dezavantaj |
|---|---|---|
| AWS S3 + DynamoDB | Yüksek erişilebilirlik, kilitleme desteği | AWS hesabı gerektirir |
| Terraform Cloud | Kolay UI, ekip yönetimi | Ücretli planlar sınırlı |
| Azure Blob Storage | Azure ortamlarıyla entegrasyon | Azure bağımlılığı |
Remote backend sayesinde, birden fazla geliştirici aynı anda apply yaparken state kilitleme mekanizması çakışmaları önler. Özellikle e-ticaret hosting gibi yüksek trafiğe sahip projelerde bu güvenlik kritik bir faktördür.
Gerçek Dünya Senaryosu: Çok Katmanlı Web Uygulaması
Bir e-ticaret sitesini düşünün; ön yüz (React), API katmanı (Node.js) ve veri tabanı (PostgreSQL) ayrı ayrı sunucularda çalışıyor. Bu altyapıyı Terraform ile aşağıdaki gibi tanımlayabilirsiniz:
- VPC ve alt ağları (public, private) oluşturun.
- Load balancer (ALB) ve güvenlik grupları tanımlayın.
- EC2 instance'ları için
aws_autoscaling_groupvelaunch_templatekullanın. - RDS PostgreSQL için
aws_db_instanceoluşturun. - Gizli anahtarları ve ortam değişkenlerini
AWS Secrets Managerile yönetin.
Bu yapı sayesinde, yeni bir özellik eklemek için sadece ilgili modülü güncellemek yeterli olur; tüm ortam otomatik olarak senkronize edilir. Ayrıca, WAF güvenlik duvarı ekleyerek DDoS ve OWASP Top 10 saldırılarına karşı koruma sağlarsınız.
En Yaygın Hatalar ve Maliyet Etkileri
Terraform kullanırken sıkça yapılan hatalar şunlardır:
- State dosyasının versiyon kontrolüne eklenmesi: Bu, hassas bilgiler sızdırabilir ve ekip içinde çakışmalara yol açar.
- Provider sürüm uyumsuzluğu: Yeni bir provider sürümü çıktığında,
terraform init -upgradeyapılmazsa beklenmeyen hatalar ortaya çıkar. - Kaynakların hard‑code edilmesi: Değişkenler kullanılmadığında, aynı kod farklı ortamlar için yeniden yazılır ve bakım maliyeti artar.
Bu hatalar, ortalama bir projede %30’a varan ek maliyet ve 2‑3 gün gecikmeye neden olabilir. Bu nedenle, versiyonlama, değişken yönetimi ve remote backend gibi en iyi uygulamalara sadık kalmak kritik önemdedir.
Sıkça Sorulan Sorular
Terraform’da state dosyası nasıl güvenli bir şekilde saklanır?
State dosyasını S3 gibi şifreli bir depolama alanına ve DynamoDB ile kilitleme mekanizmasıyla saklamak en güvenli yöntemdir. Ayrıca, erişim politikalarını IAM üzerinden sıkılaştırarak sadece yetkili kullanıcıların erişimini sağlayabilirsiniz.
Modül kullanmanın dezavantajları var mı?
Modüller kodun tekrarını önlese de, aşırı soyutlama yönetimi zorlaştırabilir. Özellikle çok katmanlı modüller arasında bağımlılıkların takibi iyi yapılmazsa, değişiklikler beklenmedik yan etkiler yaratabilir.
Terraform Cloud ücretsiz planı yeterli mi?
Ücretsiz plan temel özellikleri (remote backend, plan çıktısı paylaşımı) sunar ancak ekip sayısı ve çalışma alanı (workspace) limiti vardır. Büyük ölçekli projeler için Terraform Enterprise veya S3 backend tercih edilmelidir.
Terraform ile mevcut altyapıyı nasıl import ederim?
terraform import komutu ile var olan kaynakları state dosyasına ekleyebilirsiniz. Örneğin, bir EC2 instance’ı import etmek için terraform import aws_instance.my_instance i-1234567890abcdef0 komutunu kullanın.
Sonuç ve Bir Sonraki Adımınız
Terraform, altyapınızı kodla yöneterek hataları azaltır, ölçeklenebilirliği artırır ve ekip içinde iş birliğini kolaylaştırır. Bu makalede temel kavramları, kurulum adımlarını, modül kullanımını ve gerçek dünya senaryosunu inceledik. Şimdi, kendi projeniz için bir Terraform çalışma alanı (workspace) oluşturun, remote backend’i yapılandırın ve ilk modülünüzü yazın. Böylece, altyapınızın otomasyonunu tam anlamıyla hayata geçirmiş olacaksınız.