ÖZET
Terraform ile Bulut Altyapısı Yönetimi: Adım Adım Rehber 2026
Terraform kullanarak AWS, Azure veya GCP üzerinde bulut altyapınızı kod ile nasıl yöneteceğinizi öğrenin.
Keywords: Terraform, IaC, Bulut Otomasyonu
İÇİNDEKİLER
1. Arka Plan: Neden Kod Olarak Altyapı (IaC) ve Terraform?
2. Terraform’a Giriş ve Temel Kavramlar
3. Kurulum ve İlk Bulut Kaynağınızı Oluşturma
4. İleri Düzey Terraform Kullanımı ve En İyi Uygulamalar
5. Çoklu Bulut Sağlayıcıları ile Entegrasyon (AWS, Azure, GCP)
6. DevOps Süreçlerine Terraform Entegrasyonu
7. Pratik Uygulama ve Kullanım Senaryoları
8. Sıkça Sorulan Sorular
9. Sonuç ve Gelecek Öngörüsü
GİRİŞ
Arka Plan: Neden Kod Olarak Altyapı (IaC) ve Terraform?
Günümüzün hızla değişen dijital dünyasında, işletmelerin rekabetçi kalabilmek için çevik, ölçeklenebilir ve güvenilir IT altyapılarına sahip olmaları kritik öneme sahiptir. Geleneksel olarak, sunucuların, ağların ve depolama birimlerinin manuel olarak yapılandırılması zaman alıcı, hataya açık ve maliyetli bir süreçti. Ancak, 2026 itibarıyla, Kod Olarak Altyapı (Infrastructure as Code – IaC) yaklaşımı, bu zorlukların üstesinden gelmek için endüstri standardı haline gelmiştir.
IaC, altyapının yönetimini ve provizyonunu kod aracılığıyla, yani yazılım geliştirme prensipleriyle (versiyon kontrolü, test etme, modülerlik) ele almayı ifade eder. Bu, altyapınızın yapılandırmasını metin dosyalarında tanımlayarak, tekrarlanabilir, tutarlı ve otomatize edilmiş dağıtımlar yapmanızı sağlar. Bu sayede, “konfigürasyon kayması” (configuration drift) gibi sorunlar ortadan kalkar ve çevik DevOps süreçleri desteklenir.
Bu bağlamda, HashiCorp tarafından geliştirilen Terraform, bulut ve şirket içi altyapıyı yönetmek için en popüler ve güçlü IaC araçlarından biri olarak öne çıkmaktadır. Terraform, deklaratif bir yaklaşımla çalışır; yani, “ne istediğinizi” tanımlarsınız, “nasıl yapılacağını” değil. Terraform, bu istediğiniz durumu mevcut altyapınızla karşılaştırır ve gerekli değişiklikleri otomatik olarak yapar.
ÖNEMLİ NOKTA
2026 yılında IaC, manuel altyapı yönetiminin yerini alarak, dağıtım hızını %70’e kadar artırabilir ve insan kaynaklı hata oranını %50’den fazla azaltabilir. Terraform, bu dönüşümün merkezinde yer alan, bulut agnostik bir çözümdür.
Bu rehberde, Terraform’un temel prensiplerinden başlayarak, AWS, Azure ve Google Cloud Platform (GCP) gibi önde gelen bulut sağlayıcıları üzerinde gerçek dünya uygulamalarına kadar adım adım ilerleyeceğiz. Amacımız, bu güçlü aracı etkin bir şekilde kullanarak bulut altyapınızı otomatize etme ve yönetme becerilerini kazanmanızı sağlamaktır. Kwontrol olarak, bu dönüşüm yolculuğunuzda size rehberlik etmekten mutluluk duyarız.

TEMEL KAVRAMLAR
Terraform’a Giriş ve Temel Kavramlar
Terraform, altyapı kaynaklarının oluşturulması, değiştirilmesi ve yok edilmesi için kullanılan açık kaynaklı bir IaC aracıdır. HashiCorp Configuration Language (HCL) adı verilen kendi deklaratif dilini kullanarak çalışır. Bu dil, kolay okunabilir ve yazılabilir olmasıyla bilinir.
Terraform’un Temel Bileşenleri
Terraform’u anlamak için bazı temel bileşenleri bilmek önemlidir:
1. Provider (Sağlayıcı): Terraform’un AWS, Azure, GCP, VMware, Kubernetes gibi farklı platformlarla etkileşim kurmasını sağlayan eklentilerdir. Her sağlayıcı, o platforma özgü kaynakları yönetmek için API’lerle iletişim kurar. Örneğin, AWS sağlayıcısı EC2 örnekleri, S3 kovaları ve VPC’ler oluşturabilir.
2. Resource (Kaynak): Yönetmek istediğiniz altyapı bileşenleridir. Bir AWS EC2 örneği, bir Azure Sanal Makinesi, bir GCP depolama kovası veya bir Kubernetes dağıtımı birer kaynaktır. Kaynaklar, HCL dosyalarında tanımlanır ve Terraform tarafından provizyon edilir.
3. Data Source (Veri Kaynağı): Terraform tarafından yönetilmeyen veya başka bir Terraform konfigürasyonu tarafından oluşturulmuş mevcut altyapı kaynakları hakkında bilgi almak için kullanılır. Örneğin, mevcut bir VPC’nin ID’sini almak veya bir AMI (Amazon Machine Image) hakkında bilgi edinmek için veri kaynakları kullanabilirsiniz.
4. Module (Modül): Bir veya daha fazla kaynak tanımını bir araya getiren, yeniden kullanılabilir bir Terraform konfigürasyonudur. Modüller, karmaşık altyapı tanımlarını basitleştirmek, kod tekrarını azaltmak ve tutarlılığı sağlamak için kritik öneme sahiptir. Kendi modüllerinizi oluşturabilir veya Terraform Registry’deki halka açık modülleri kullanabilirsiniz.
5. State (Durum): Terraform, yönettiği altyapının mevcut durumunu bir “state” dosyasında (varsayılan olarak terraform.tfstate) saklar. Bu dosya, Terraform’un gerçek dünya altyapısı ile konfigürasyonunuz arasında bir haritalama yapmasını sağlar. Bu sayede, bir sonraki terraform apply komutunda hangi değişikliklerin yapılması gerektiğini bilir.
Diğer IaC Araçları ile Karşılaştırma
Terraform’u diğer IaC araçlarıyla karşılaştırmak, neden bu kadar popüler olduğunu daha iyi anlamamızı sağlar. İşte bazı popüler IaC araçlarının karşılaştırması:
IaC Araçları Karşılaştırması
Terraform — Bulut agnostik, deklaratif, HCL dilini kullanır, geniş sağlayıcı desteği, güçlü modül sistemi.
AWS CloudFormation — Sadece AWS için, JSON/YAML, deklaratif, derin AWS entegrasyonu, öğrenme eğrisi biraz daha dik.
Azure Resource Manager (ARM) Templates — Sadece Azure için, JSON, deklaratif, Azure’a özel derin entegrasyon.
Pulumi — Bulut agnostik, imperatif (Python, TypeScript, Go vb. dilleri kullanır), geleneksel yazılımcılar için daha tanıdık.
Ansible — Konfigürasyon yönetimi odaklı, imperatif, SSH üzerinden çalışır, IaC için de kullanılabilir ancak daha çok mevcut sistemleri yapılandırma amaçlıdır.
ÖNEMLİ NOKTA
Terraform’un en büyük avantajı, farklı bulut sağlayıcıları ve şirket içi ortamlar arasında tutarlı bir IaC deneyimi sunabilmesidir. Bu “çoklu bulut” yeteneği, 2026 itibarıyla işletmelerin %60’ından fazlası tarafından tercih edilmektedir.

İLK ADIMLAR
Kurulum ve İlk Bulut Kaynağınızı Oluşturma
Terraform ile çalışmaya başlamak oldukça basittir. İlk olarak, Terraform CLI’ı (Command Line Interface) sisteminize kurmanız ve ardından temel komutları kullanarak ilk bulut kaynağınızı oluşturmanız gerekmektedir.
Terraform Kurulumu
Terraform’u işletim sisteminize kurmak için HashiCorp’un resmi web sitesindeki talimatları takip etmek en güvenilir yoldur. Genellikle, indirdiğiniz sıkıştırılmış dosyayı açıp Terraform yürütülebilir dosyasını sistem PATH’inize eklemeniz yeterlidir. İşte farklı işletim sistemleri için kısa bir özet:
Windows:
1. Terraform web sitesinden uygun sürümü indirin.
2. İndirdiğiniz zip dosyasını açın (örn. C:\terraform dizinine).
3. Bu dizini sistem PATH değişkeninize ekleyin.
macOS (Homebrew ile):
KOD AÇIKLAMASI
Homebrew kullanarak Terraform’u macOS’a kurma komutu.
brew tap hashicorp/tap
brew install hashicorp/tap/terraformLinux (Debian/Ubuntu için):
KOD AÇIKLAMASI
Linux sistemlerde (Debian/Ubuntu türevleri) Terraform’u resmi HashiCorp deposundan kurma komutları.
sudo apt update && sudo apt install -y gnupg software-properties-common
wget -O- https://apt.releases.hashicorp.com/gpg | \
gpg --dearmor | \
sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg
gpg --no-default-keyring \
--keyring /usr/share/keyrings/hashicorp-archive-keyring.gpg \
--fingerprint
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] \
https://apt.releases.hashicorp.com $(lsb_release -cs) main" | \
sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update
sudo apt install terraformKurulumu doğrulama: terraform -v komutunu çalıştırarak sürüm bilgisini görebilirsiniz.
İlk AWS EC2 Örneğini Oluşturma
Şimdi, Terraform ile basit bir AWS EC2 örneği oluşturalım. Bunun için AWS hesabınızın yapılandırılmış (AWS CLI veya ortam değişkenleri aracılığıyla) olması gerekmektedir.
Proje Yapısı
main.tf — Ana Terraform konfigürasyon dosyası.
variables.tf — Değişken tanımlamaları.
Yeni bir dizin oluşturun (örn. my-first-terraform) ve içine main.tf adında bir dosya oluşturun:
KOD AÇIKLAMASI
Bu Terraform kodu, AWS üzerinde bir EC2 örneği (t2.micro tipi, Ubuntu sunucusu) ve bir güvenlik grubu oluşturur. Güvenlik grubu, SSH (22) ve HTTP (80) portlarından gelen trafiğe izin verir.
# main.tf
# AWS sağlayıcısını yapılandır
provider "aws" {
region = "us-east-1" # Kaynakların oluşturulacağı AWS bölgesini belirtin
}
# Güvenlik grubu kaynağını tanımla (SSH ve HTTP erişimi için)
resource "aws_security_group" "web_sg" {
name = "web_server_security_group"
description = "SSH and HTTP access"
ingress {
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"] # Tüm IP'lerden SSH erişimine izin ver (sadece test amaçlı!)
}
ingress {
from_port = 80
to_port = 80
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"] # Tüm IP'lerden HTTP erişimine izin ver
}
egress {
from_port = 0
to_port = 0
protocol = "-1" # Tüm giden trafiğe izin ver
cidr_blocks = ["0.0.0.0/0"]
}
tags = {
Name = "web_server_sg"
}
}
# EC2 örneği kaynağını tanımla
resource "aws_instance" "web_server" {
ami = "ami-053b0d53c279acc90" # Ubuntu Server 22.04 LTS (HVM) - us-east-1 bölgesinde geçerli bir AMI ID
instance_type = "t2.micro"
vpc_security_group_ids = [aws_security_group.web_sg.id] # Güvenlik grubunu ata
tags = {
Name = "MyWebServer"
Environment = "Development"
}
user_data = <<-EOF
#!/bin/bash
sudo apt update -y
sudo apt install -y apache2
sudo systemctl start apache2
sudo systemctl enable apache2
echo "<h1>Hello from Terraform on AWS!</h1>" | sudo tee /var/www/html/index.html
EOF
}
# EC2 örneğinin genel IP adresini çıktı olarak tanımla
output "web_server_public_ip" {
description = "The public IP address of the web server"
value = aws_instance.web_server.public_ip
}Şimdi, terminalinizi my-first-terraform dizinine getirin ve şu komutları sırasıyla çalıştırın:
Terraform İş Akışı
1 terraform init — Çalışma dizinini başlatır, sağlayıcı eklentilerini indirir.
2 terraform plan — Yapılacak değişiklikleri gösteren bir yürütme planı oluşturur.
3 terraform apply — Planı uygular ve altyapı kaynaklarını oluşturur/değiştirir.
4 terraform destroy — Terraform tarafından yönetilen tüm kaynakları siler.
ÖNEMLİ NOKTA
Terraform’un plan komutu, kaynaklarınızı oluşturmadan veya değiştirmeden önce ne olacağını görmenizi sağlar. Bu, beklenmedik değişiklikleri önlemek için hayati bir adımdır.
İLERİ DÜZEY
İleri Düzey Terraform Kullanımı ve En İyi Uygulamalar
Terraform’un temelini öğrendikten sonra, daha karmaşık ve gerçek dünya senaryolarında etkin bir şekilde kullanmak için ileri düzey özelliklerine ve en iyi uygulamalarına dalalım.
Modüller: Yeniden Kullanılabilir Altyapı Blokları
Modüller, Terraform’un en güçlü özelliklerinden biridir. Kendi modüllerinizi oluşturarak veya Terraform Registry’deki mevcut modülleri kullanarak kod tekrarını azaltabilir, altyapı tanımlarınızı daha düzenli hale getirebilir ve ekip içinde tutarlılığı sağlayabilirsiniz. Örneğin, bir web sunucusu (EC2, güvenlik grubu, yük dengeleyici) için bir modül oluşturup, bu modülü farklı projelerde veya ortamlarda (geliştirme, test, üretim) tekrar tekrar kullanabilirsiniz.
KOD AÇIKLAMASI
Bu örnek, mevcut bir modülü projenize nasıl dahil edeceğinizi ve değişkenler aracılığıyla nasıl yapılandıracağınızı gösterir. Burada AWS VPC modülü kullanılmıştır.
# main.tf (ana konfigürasyon dosyanızda)
module "vpc" {
source = "terraform-aws-modules/vpc/aws" # Terraform Registry'den bir modül
version = "3.18.1" # Modülün belirli bir sürümünü kullanın
name = "my-prod-vpc"
cidr = "10.0.0.0/16"
azs = ["us-east-1a", "us-east-1b", "us-east-1c"]
private_subnets = ["10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"]
public_subnets = ["10.0.101.0/24", "10.0.102.0/24", "10.0.103.0/24"]
enable_nat_gateway = true
single_nat_gateway = true
enable_vpn_gateway = false
tags = {
Environment = "Production"
ManagedBy = "Terraform"
}
}Uzaktan Durum Yönetimi (Remote State)
Yerel .tfstate dosyası, tek başına geliştirme için uygun olsa da, ekip ortamlarında veya CI/CD süreçlerinde sorunlara yol açabilir. Bu nedenle, Terraform durum dosyasını merkezi ve güvenli bir konumda saklamak, eşzamanlı değişiklikleri yönetmek (locking) ve hassas verileri korumak için Uzaktan Durum Yönetimi kullanılır. AWS S3, Azure Blob Storage, GCP Cloud Storage veya Terraform Cloud gibi çözümler tercih edilir.
KOD AÇIKLAMASI
Bu kod bloğu, Terraform durum dosyasını AWS S3 kovasında nasıl saklayacağınızı ve DynamoDB kullanarak kilit mekanizmasını nasıl etkinleştireceğinizi gösterir. Bu, birden fazla kişinin aynı altyapı üzerinde güvenli bir şekilde çalışmasını sağlar.
# backend.tf
terraform {
backend "s3" {
bucket = "my-terraform-state-bucket-2026" # Benzersiz bir kova adı seçin
key = "dev/network/terraform.tfstate" # Durum dosyasının yolu
region = "us-east-1"
encrypt = true # Şifrelemeyi etkinleştir
dynamodb_table = "terraform-lock-table" # Kilit mekanizması için DynamoDB tablosu
}
}ÖNEMLİ NOKTA
Uzaktan durum yönetimi, ekip ortamlarında %95’e varan oranda çakışmaları önleyerek işbirliğini artırır ve altyapı dağıtımlarınızın tutarlılığını garanti eder.
Veri Kaynakları (Data Sources) ve Değişkenler
Veri Kaynakları: Mevcut kaynakları içe aktarmak veya onlar hakkında bilgi almak için kullanılır. Örneğin, mevcut bir VPC’nin ID’sini almak veya belirli bir etiketle işaretlenmiş bir AMI’yi bulmak için. Bu, Terraform’un mevcut altyapınızla entegre olmasını sağlar.
Değişkenler: Terraform konfigürasyonlarını dinamik hale getirmek ve yeniden kullanılabilirliği artırmak için değişkenler kullanılır. Örneğin, farklı ortamlarda (dev, prod) farklı örnek tipleri veya bölge ayarları kullanabilirsiniz. variables.tf dosyasında tanımlanır ve terraform.tfvars veya komut satırı argümanlarıyla değerleri atanır.
SORUN 01
Farklı Ortamlar İçin Konfigürasyon Çoğaltma
Geliştirme, test ve üretim ortamları için neredeyse aynı altyapıyı her seferinde sıfırdan yazmak, kod tekrarına ve tutarsızlıklara yol açar, bu da bakım maliyetlerini artırır.
ÇÖZÜM — Modüller ve Değişkenler ile Parametrik Yapılandırma
# variables.tf
variable "environment" {
description = "Deployment environment (dev, staging, prod)"
type = string
default = "dev"
}
variable "instance_type" {
description = "EC2 instance type"
type = string
default = "t2.micro"
}
# main.tf (örnek kullanım)
resource "aws_instance" "web_server" {
ami = "ami-053b0d53c279acc90"
instance_type = var.instance_type
tags = {
Name = "${var.environment}-web-server"
Environment = var.environment
}
}
ÇOKLU BULUT
Çoklu Bulut Sağlayıcıları ile Entegrasyon (AWS, Azure, GCP)
Terraform’un en önemli özelliklerinden biri, tek bir araçla birden fazla bulut sağlayıcısını yönetme yeteneğidir. Bu, şirketlerin satıcı kilitlenmesinden kaçınmasına, en iyi hizmetleri farklı sağlayıcılardan almasına ve felaket kurtarma senaryoları için daha esnek çözümler oluşturmasına olanak tanır. Her bir bulut sağlayıcısı için Terraform sağlayıcıları (providers) kullanılır.
Provider Yapılandırmaları
Her sağlayıcı, provider bloğu içinde yapılandırılır. Kimlik doğrulama genellikle ortam değişkenleri, AWS CLI yapılandırması, Azure CLI oturumu veya GCP gcloud aracı aracılığıyla otomatik olarak yapılır. Ancak, açıkça da belirtebilirsiniz.
KOD AÇIKLAMASI
Bu örnek, AWS, Azure ve GCP sağlayıcılarını aynı Terraform konfigürasyonunda nasıl tanımlayacağınızı gösterir. Farklı bulutlardaki kaynakları aynı anda yönetmek için bu yapılandırma gereklidir.
# providers.tf
# AWS Provider
provider "aws" {
region = "us-east-1"
# access_key = "YOUR_ACCESS_KEY" # Genellikle ortam değişkenleri tercih edilir
# secret_key = "YOUR_SECRET_KEY"
}
# Azure Provider
provider "azurerm" {
features {} # AzureRM 2.x'ten itibaren bu boş blok zorunlu
# subscription_id = "YOUR_SUBSCRIPTION_ID" # Genellikle Azure CLI oturumundan alınır
# client_id = "YOUR_CLIENT_ID"
# client_secret = "YOUR_CLIENT_SECRET"
# tenant_id = "YOUR_TENANT_ID"
}
# Google Cloud Provider
provider "google" {
project = "your-gcp-project-id" # GCP Proje ID'nizi buraya yazın
region = "us-central1"
# credentials = file("path/to/your/service-account.json") # Genellikle gcloud auth application-default login ile yapılır
}Basit Bir Çoklu Bulut Uygulama Örneği: Depolama Kovaları
Her bir bulut sağlayıcısında basit bir depolama kovası oluşturalım. Bu, Terraform’un çoklu bulut yeteneğinin temel bir göstergesidir.
KOD AÇIKLAMASI
Bu kod, AWS S3, Azure Blob Storage ve GCP Cloud Storage’da birer depolama kovası (bucket) oluşturur. Her bulut sağlayıcısına özgü kaynak tanımlamalarını görebilirsiniz.
# main.tf (çoklu bulut depolama)
# AWS S3 Kovası
resource "aws_s3_bucket" "aws_bucket" {
bucket = "kwontrol-aws-storage-bucket-2026-unique" # Global olarak benzersiz olmalı
acl = "private"
tags = {
Environment = "MultiCloud"
Provider = "AWS"
}
}
# Azure Depolama Hesabı ve Blob Kovası
resource "azurerm_resource_group" "rg" {
name = "kwontrol-multicloud-rg"
location = "East US"
}
resource "azurerm_storage_account" "azure_sa" {
name = "kwontrolmulticloudsa26" # Global olarak benzersiz olmalı (3-24 karakter, küçük harf)
resource_group_name = azurerm_resource_group.rg.name
location = azurerm_resource_group.rg.location
account_tier = "Standard"
account_replication_type = "GRS"
}
resource "azurerm_storage_container" "azure_container" {
name = "kwontrol-azure-container"
storage_account_name = azurerm_storage_account.azure_sa.name
container_access_type = "private"
}
# GCP Cloud Storage Kovası
resource "google_storage_bucket" "gcp_bucket" {
name = "kwontrol-gcp-storage-bucket-2026-unique" # Global olarak benzersiz olmalı
location = "US-CENTRAL1"
project = "your-gcp-project-id" # Kendi proje ID'nizi girin
force_destroy = true # Kovayı içindeki nesnelerle birlikte silmeye izin verir (dikkatli kullanın!)
uniform_bucket_level_access = true
}
# Çıktılar
output "aws_bucket_name" {
value = aws_s3_bucket.aws_bucket.id
}
output "azure_container_url" {
value = azurerm_storage_container.azure_container.resource_manager_id
}
output "gcp_bucket_url" {
value = google_storage_bucket.gcp_bucket.self_link
}Çoklu Bulutun Avantajları
Satıcı Kilitlenmesinden Kaçınma — Tek bir bulut sağlayıcısına bağımlılığı azaltır.
En İyi Hizmetleri Kullanma — Her bulutun kendine özgü güçlü yanlarından faydalanma esnekliği sunar.
Felaket Kurtarma — Bir bulut bölgesinin veya sağlayıcısının çökmesi durumunda iş sürekliliğini sağlar.
Maliyet Optimizasyonu — İş yüklerini en uygun maliyetli bulut sağlayıcısına dağıtma imkanı verir.
ÖNEMLİ NOKTA
2026 yılı itibarıyla, büyük işletmelerin %75’i çoklu bulut stratejileri benimsemiştir. Terraform, bu karmaşık ortamları tek bir kod tabanı üzerinden yönetmek için vazgeçilmez bir araç haline gelmiştir.

DEV OPS SÜREÇLERİ
DevOps Süreçlerine Terraform Entegrasyonu
Terraform, modern DevOps yaklaşımlarının temelini oluşturan otomasyon ve sürekli dağıtım (CI/CD) süreçleriyle mükemmel bir uyum içindedir. Altyapıyı kod olarak tanımlayarak, altyapı değişikliklerini uygulama kodu değişiklikleri gibi ele alabilir, test edebilir ve otomatik olarak dağıtabilirsiniz.
CI/CD Pipeline Entegrasyonu
Terraform’u bir CI/CD pipeline’ına entegre etmek, altyapı dağıtımlarınızın hızını ve güvenilirliğini önemli ölçüde artırır. İşte popüler CI/CD araçları ile entegrasyon örnekleri:
GitHub Actions ile Örnek:
KOD AÇIKLAMASI
Bu GitHub Actions iş akışı, bir kod deposuna yapılan her push işleminde Terraform kodunuzu başlatır, planlar ve onay gerektiren bir adımda uygular. Bu, altyapı değişikliklerinin otomatik olarak gözden geçirilmesini ve dağıtılmasını sağlar.
# .github/workflows/terraform.yml
name: 'Terraform CI/CD'
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
terraform:
name: 'Terraform Plan & Apply'
runs-on: ubuntu-latest
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_DEFAULT_REGION: 'us-east-1'
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup Terraform
uses: hashicorp/setup-terraform@v2
with:
terraform_version: 1.5.7 # Belirli bir Terraform sürümünü kullanın
- name: Terraform Init
id: init
run: terraform init
- name: Terraform Format
id: fmt
run: terraform fmt -check
- name: Terraform Plan
id: plan
run: terraform plan -no-color -out=tfplan
continue-on-error: true
- name: Update Pull Request
uses: actions/github-script@v6
if: github.event_name == 'pull_request'
with:
script: |
// Plan çıktısını PR yorumu olarak ekle
const output = `#### Terraform Plan <details><summary>Ayrıntılar</summary><pre>${process.env.PLAN_OUTPUT}</pre></details>`;
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: output
})
env:
PLAN_OUTPUT: ${{ steps.plan.outputs.stdout }}
- name: Terraform Apply
if: github.ref == 'refs/heads/main' && github.event_name == 'push'
run: terraform apply -auto-approve tfplanGüvenlik ve Uyumluluk
IaC ile altyapıyı yönetirken güvenlik ve uyumluluk en önemli konulardan biridir. Yanlış yapılandırılmış bir kaynak, ciddi güvenlik açıklarına yol açabilir. Bu nedenle, Terraform kodunuzu güvenlik en iyi uygulamalarına göre denetlemek için araçlar kullanmalısınız:
TFSEC: Terraform güvenlik açıkları tarayıcısı. Kodunuzdaki bilinen güvenlik sorunlarını (örn. herkese açık S3 kovaları) tespit eder.
Checkov: Daha geniş bir güvenlik ve uyumluluk denetimi sağlar, çeşitli IaC araçlarını destekler.
HashiCorp Sentinel: Terraform Enterprise için politikalar aracılığıyla güvenlik ve uyumluluk kurallarını zorunlu kılar. Örneğin, belirli bir bölge dışında kaynak oluşturmayı veya belirli etiketlerin eksik olmasını engelleyebilirsiniz.
UYARI
Terraform kodunuzu bir CI/CD pipeline’ında -auto-approve bayrağı ile çalıştırmak, dikkatli yapılmadığında istenmeyen ve maliyetli değişikliklere yol açabilir. Mutlaka bir onay adımı veya uygun yetkilendirme mekanizmaları kullanın.
ÖNEMLİ NOKTA
Terraform’un CI/CD entegrasyonu, altyapı dağıtım süresini %80 oranında azaltarak, geliştiricilerin daha hızlı inovasyon yapmasına ve operasyonel yükü hafifletmesine olanak tanır.

UYGULAMA SENARYOLARI
Pratik Uygulama ve Kullanım Senaryoları
Terraform’un esnekliği, onu çok çeşitli pratik kullanım senaryoları için ideal bir araç haline getirir. İşte 2026’da sıkça karşılaşılan bazı uygulama alanları:
1. Ölçeklenebilir Web Uygulaması Altyapısı
Bir web uygulamasının dağıtımı genellikle birden fazla bileşeni içerir: sanal makineler veya konteynerler, yük dengeleyiciler, veritabanları, depolama ve ağ yapılandırmaları. Terraform ile tüm bu bileşenleri tek bir deklaratif konfigürasyon dosyası setinde tanımlayabilir ve saniyeler içinde dağıtabilirsiniz.
Senaryo: Otomatik Ölçeklenen Web Uygulaması
AWS Auto Scaling Group, Application Load Balancer, RDS veritabanı ve S3 statik web sitesi için Terraform modülleri kullanarak tamamen otomatize edilmiş, yüksek erişilebilir bir web altyapısı kurmak.
2. Veritabanı Oluşturma ve Yönetimi
Bulut sağlayıcılarının yönetilen veritabanı hizmetleri (AWS RDS, Azure SQL Database, GCP Cloud SQL) Terraform ile kolayca provizyon edilebilir ve yapılandırılabilir. Bu, veritabanı sunucularını manuel olarak kurma ve bakımını yapma yükünü ortadan kaldırır.
Senaryo: Üretim Veritabanı Kurulumu
AWS RDS PostgreSQL örneği, otomatik yedeklemeler, çoklu erişilebilirlik alanı dağıtımı ve güvenlik grubu kuralları ile Terraform tarafından yönetilerek, üretim hazır bir veritabanı ortamı sağlamak.
3. Ağ Altyapısı Otomasyonu
Sanal özel bulutlar (VPC/VNet), alt ağlar, yönlendirme tabloları, güvenlik grupları ve VPN bağlantıları gibi ağ bileşenleri Terraform ile tamamen otomatize edilebilir. Bu, karmaşık ağ yapılandırmalarının tutarlı ve hatasız bir şekilde dağıtılmasını sağlar.
Senaryo: Güvenli Şirket Ağı
GCP VPC, alt ağlar, güvenlik duvarı kuralları ve VPN gateway yapılandırması ile şirket içi ağa güvenli erişim sağlayan bir bulut ağı oluşturmak.
4. Geliştirme/Test Ortamı Sağlama
Geliştiricilerin hızlı bir şekilde izole edilmiş geliştirme veya test ortamları oluşturabilmesi, yazılım geliştirme döngüsünü hızlandırır. Terraform ile bu ortamlar dakikalar içinde “spin up” edilebilir ve iş bittiğinde kolayca “spin down” edilerek maliyet tasarrufu sağlanabilir.
Senaryo: Geliştirici Sandbox Ortamı
Her geliştirici için Azure’da izole bir Sanal Ağ, bir Sanal Makine ve bir depolama hesabı içeren kişisel bir sandbox ortamını Terraform ile otomatize etmek.
ÖNEMLİ NOKTA
Terraform’un esnekliği sayesinde, ortalama bir işletme, altyapı provizyon sürelerini %90 oranında azaltarak, yeni ürün ve hizmetlerin pazara sunulma süresini kısaltabilir.
Sıkça Sorulan Sorular
Q. Terraform öğrenmek ne kadar sürer?
Temel kavramları ve basit bir bulut kaynağını oluşturmayı birkaç günde öğrenebilirsiniz. İleri düzey konular ve en iyi uygulamalar için birkaç hafta veya ay pratik yapmak gerekebilir.
Q. Terraform ücretsiz mi?
Evet, Terraform’un temel CLI aracı açık kaynaklı ve ücretsizdir. HashiCorp Terraform Cloud ve Enterprise sürümleri, ekip işbirliği, güvenlik politikaları ve daha gelişmiş özellikler için ücretli planlar sunar.
Q. Terraform ile hangi bulut sağlayıcılarını yönetebilirim?
Terraform, AWS, Azure, Google Cloud Platform (GCP) gibi büyük bulut sağlayıcılarının yanı sıra VMware, Kubernetes, Oracle Cloud, Alibaba Cloud gibi yüzlerce farklı sağlayıcıyı destekler.
Q. Terraform güvenli mi?
Terraform’un kendisi güvenli bir araçtır. Güvenlik, kodunuzu nasıl yazdığınıza, hassas verileri nasıl yönettiğinize (örneğin, şifreleri kodda saklamamak), uzaktan durum dosyasını nasıl koruduğunuza ve güvenlik tarama araçlarını kullanıp kullanmadığınıza bağlıdır.
SONUÇ
Sonuç ve Gelecek Öngörüsü
Bu rehberde, Terraform’un temellerinden başlayarak ileri düzey kullanımına, çoklu bulut entegrasyonuna ve DevOps süreçlerindeki kritik rolüne kadar geniş bir yelpazeyi ele aldık. Gördüğümüz gibi, Terraform, 2026’da modern bulut altyapısı yönetiminin vazgeçilmez bir aracıdır. Manuel yapılandırmanın getirdiği riskleri ve verimsizlikleri ortadan kaldırarak, işletmelerin daha hızlı, daha güvenilir ve daha maliyet etkin bir şekilde inovasyon yapmasına olanak tanır.
Kod olarak altyapı yaklaşımı, IT dünyasında bir paradigma değişimi yaratmıştır ve Terraform bu değişimin öncülerinden biridir. Modüler yapısı, geniş sağlayıcı desteği ve güçlü topluluk desteği sayesinde, küçük startup’lardan büyük kurumsal firmalara kadar her ölçekteki organizasyon için uygun bir çözümdür.
Gelecekte, IaC ve Terraform’un rolünün daha da büyümesi beklenmektedir. Sunucusuz mimariler, konteyner orkestrasyonu (Kubernetes) ve yapay zeka/makine öğrenimi altyapılarının yönetimi gibi alanlarda da Terraform’un kullanımı yaygınlaşacaktır. Otomasyon, güvenlik ve uyumluluk gereksinimleri arttıkça, Terraform gibi araçlar, karmaşık bulut ortamlarını yönetmek için anahtar rol oynamaya devam edecektir.
Kwontrol olarak, bulut ve DevOps yolculuğunuzda Terraform’u etkin bir şekilde kullanmanız için size destek olmaya devam edeceğiz. Bu rehberin, bulut altyapınızı kod ile yönetme konusunda size sağlam bir başlangıç noktası sunmasını umuyoruz.
Okuduğunuz için teşekkürler!
Terraform ile bulut altyapısı yönetimi konusunda uzmanlaşmak, 2026 ve sonrasında DevOps mühendisleri için kritik bir beceridir. Bu rehberin size değerli bilgiler sağladığını umarız.
Soru veya geri bildiriminiz mi var? Aşağıya yorum bırakın!