Terraform ile Altyapı Otomasyonu: Bulut Kaynaklarını Kodla Yönetme Rehberi

Sunucu kurmak, ağ ayarlarını yapılandırmak veya depolama alanı tanımlamak için saatlerinizi bulut sağlayıcıların web konsollarında tıklayarak geçirdiğiniz oldu mu? Peki ya tüm altyapınızı birkaç kod satırıyla tanımlayıp, dakikalar içinde aynı yapıyı farklı ortamlarda hatasızca kurabilseydiniz? İşte tam da bu noktada Terraform altyapı otomasyonu devreye giriyor. Altyapının Kod Olarak Yönetilmesi (IaC) felsefesinin en güçlü temsilcilerinden biri olan Terraform, bulut kaynaklarını deklaratif bir dil ile tanımlamanıza ve tamamen otomatik olarak yönetmenize olanak tanır. CloudFormation gibi sağlayıcıya bağımlı araçların aksine, Terraform’un modüler yapısıyla AWS, Azure ve GCP üzerindeki kaynakları aynı anda yönetebilirsiniz. Bu rehberde, Terraform altyapı otomasyonuna sıfırdan başlayacak, kurulumdan modüllere kadar tüm kritik adımları uygulamalı olarak öğreneceksiniz.

Terraform Nedir?

HashiCorp tarafından geliştirilen Terraform, altyapıyı güvenli ve öngörülebilir bir şekilde oluşturmayı, değiştirmeyi ve sürümlemeyi sağlayan açık kaynaklı bir Infrastructure as Code aracıdır. En büyük gücü, HCL (HashiCorp Configuration Language) adı verilen, okunması ve yazılması JSON’a göre çok daha kolay olan deklaratif bir konfigürasyon dili kullanmasıdır. Siz sadece ulaşmak istediğiniz nihai altyapı durumunu tanımlarsınız; kaynakların hangi sırayla oluşturulacağını veya bağımlılıklarını Terraform kendisi çözer. Bunu yaparken, gerçek dünyadaki kaynaklarla eşleşen terraform.tfstate dosyasını kullanır ve sağlayıcı (provider) mimarisi sayesinde yüzlerce farklı platformla iletişim kurabilir.

Terraform Kurulumu

Terraform’a başlamak için öncelikle CLI aracını sisteminize kurmanız gerekiyor. İşletim sisteminize göre en güncel adımları resmi HashiCorp dokümantasyonunda bulabilirsiniz, ancak genel süreç şu şekildedir:

  • macOS (Homebrew): brew tap hashicorp/tap ve ardından brew install hashicorp/tap/terraform
  • Windows (Chocolatey): choco install terraform
  • Linux (Ubuntu/Debian): Resmi depoyu ekleyip sudo apt-get update && sudo apt-get install terraform

Kurulum tamamlandıktan sonra terminalinize terraform version yazarak doğrulama yapabilirsiniz. Bir sonraki adım, kullanacağınız bulut sağlayıcısının kimlik bilgilerini ayarlamaktır. Örneğin, AWS kullanmak için aws configure komutu ile Access Key ve Secret Key’inizi tanımlamanız veya bu bilgileri ortam değişkeni olarak (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY) sisteminize eklemeniz yeterlidir.

İlk Terraform Konfigürasyonu: Bir Sunucu Oluşturma

Artık Terraform ile ilk kaynağınızı oluşturmaya hazırsınız. Boş bir dizinde main.tf adında bir dosya oluşturun ve aşağıdaki gibi bir AWS EC2 sunucu tanımı yapın. Bu, Terraform altyapı otomasyonu yolculuğunuzun ilk somut adımı olacak.

# Provider tanımı: Bulut sağlayıcı ve kullanılacak bölge
provider "aws" {
  region = "eu-west-1"
}

# Kaynak tanımı: Bir AWS EC2 sunucu örneği
resource "aws_instance" "web" {
  ami           = "ami-0abcdef1234567890" # Bölgeye uygun bir AMI ID'si
  instance_type = "t2.micro"

  tags = {
    Name = "IlkTerraformSunucum"
  }
}

Dosyayı kaydettikten sonra terminalde sırasıyla aşağıdaki üç temel komutu çalıştırın:

  1. terraform init: Proje dizininizi başlatır ve aws sağlayıcısını indirir.
  2. terraform plan: Yapmayı planladığınız değişiklikleri size gösterir. Kaynak ekleme, değiştirme veya silme işlemlerini burada önizlersiniz.
  3. terraform apply: Planı onaylayarak altyapıyı gerçekten oluşturur.

İşiniz bittiğinde, beklenmeyen maliyetlerden kaçınmak için terraform destroy komutu ile tüm kaynakları temizleyebilirsiniz.

Değişkenler ve Çıktılarla Çalışma

Gerçek dünya projelerinde hiçbir şey sabit kodlanmış olarak kalmaz. Terraform’un esnekliğini artırmak için değişkenleri kullanırız. variables.tf dosyası oluşturarak sunucu tipi veya AWS bölgesi gibi değerleri parametrik hale getirebilirsiniz:

# variables.tf
variable "aws_region" {
  description = "AWS bölgesi"
  type        = string
  default     = "eu-west-1"
}

variable "instance_type" {
  description = "EC2 sunucu tipi"
  type        = string
  default     = "t2.micro"
}

Benzer şekilde, oluşturulan kaynaklara ait bilgileri (örneğin, sunucunun IP adresini) almak için outputs.tf dosyası kullanılır:

# outputs.tf
output "web_server_ip" {
  description = "Web sunucusunun public IP adresi"
  value       = aws_instance.web.public_ip
}

Bu yapı sayesinde, farklı ortamlar (test, staging, prodüksiyon) için ayrı .tfvars dosyaları oluşturarak aynı kodu tekrar yazmadan yönetebilirsiniz.

Modüllerle Ölçeklenebilir Yapı

Temel seviyede bile, altyapı kodunuzun hızla karmaşıklaştığını fark edeceksiniz. Modüller, tekrar kullanılabilir altyapı bileşenleri oluşturmanın en temiz yoludur. Bir modülü, tıpkı bir programlama dilindeki fonksiyon gibi düşünebilirsiniz. Örneğin, her seferinde sıfırdan bir sanal ağ (VPC) yazmak yerine, Terraform Registry’den doğrulanmış bir AWS VPC modülünü birkaç satırda projenize dahil edebilirsiniz. Kendi modülünüzü oluşturmak istediğinizde ise, yeni bir dizine ilgili .tf dosyalarını yerleştirip, ana proje dosyanızdan bu dizini çağırmanız yeterlidir. Bu yaklaşım, altyapı otomasyonu süreçlerinizi ekip içinde standardize etmenin ve hataları en aza indirmenin anahtarıdır.

State Yönetimi ve Remote Backend

Terraform’un en kritik ve hassas bileşeni, altyapınızın anlık haritasını tutan state dosyasıdır (terraform.tfstate). Bu dosyayı yerel bilgisayarınızda tutmak, özellikle bir ekiple çalışırken büyük riskler taşır: yanlışlıkla silinebilir, üzerine yazılabilir veya güvenlik açığı oluşturabilir. Bu sorunları çözmek için remote backend kullanılır. State dosyanızı bir AWS S3 bucket’ında saklayıp, aynı anda iki kişinin değişiklik yapmasını engellemek için DynamoDB ile state kilitleme mekanizmasını şu şekilde kurabilirsiniz:

# backend.tf
terraform {
  backend "s3" {
    bucket         = "sirketim-tfstate-bucket"
    key            = "web/terraform.tfstate"
    region         = "eu-west-1"
    dynamodb_table = "terraform-state-lock"
    encrypt        = true
  }
}

Bu yapılandırma, profesyonel ve iş birliğine dayalı bir Terraform altyapı otomasyonu için olmazsa olmazdır.

Sonuç

Bu rehberde, Terraform’un temel yapı taşlarını kurulumdan modül kullanımına ve uzak state yönetimine kadar ele aldık. Manuel süreçlerden kurtulup, altyapınızı kodunuzun bir uzantısı haline getirmek, sadece operasyonel mükemmelliğe değil, aynı zamanda benzersiz bir hız ve güvenilirliğe ulaşmanızı sağlar. Sonraki adımlarınız, CI/CD pipeline’larına Terraform’u entegre etmek, Terraform Cloud ile iş akışlarınızı merkezileştirmek ve Sentinel ile politika bazlı denetimler uygulamak olabilir. Altyapı otomasyonunun gücünü keşfetmeye bugün başlayın.