Terraform State Management: Remote Backend, Lock ve Üretim 2026
Terraform state, altyapınızın canlı resource’ları ile HCL kodu arasındaki tek hakikat kaynağıdır; terraform state yönetimini ciddiye almayan ekipler 2026’da hâlâ “state drift”, “kayıp resource”, “iki engineer aynı anda apply attı VPC silindi” hikâyeleriyle karşılaşıyor. HashiCorp 2025 State of Cloud Strategy raporuna göre Terraform kullanan kurumların yaklaşık %78’i remote backend ve state locking’i en kritik operasyonel kontrol olarak işaretliyor; aynı ankette 1.200 mühendisin %34’ü hâlâ S3 + DynamoDB lock yapılandırmasını eksik veya hiç kurmadan production’a çıktığını kabul ediyor. Bu yazıda state dosyasının anatomisini, remote backend seçeneklerini (S3, GCS, Azure Blob, HCP Terraform, Spacelift), locking semantiğini, state surgery (rm, mv, import, replace) operasyonlarını ve üretim hatlarındaki patternleri rakamlarla anlatacağım.
Terraform State Nedir, Neden Kritik?
Terraform state, terraform.tfstate isimli JSON dosyasında saklanan; her resource block’unun gerçek cloud kimliği (örn. i-0abc1234), attribute snapshot’ı ve dependency graph’ı içeren metadata deposudur. Plan ve apply işlemlerinde Terraform HCL ile state arasındaki farkı hesaplar; provider API’sini direkt sorgulamak yerine state’i baz alır çünkü 500 resource’lık konfigürasyonda her plan için provider’a yüzlerce describe atmak hem yavaş (tipik AWS describe ~120-450 ms) hem rate-limit riski. Terraform 1.6 sürümünden itibaren state schema versiyonu 4’tür ve terraform_version, serial, lineage, outputs, resources, check_results anahtarlarını içerir.
State’i kaybetmek, altyapıyı kaybetmekten daha tehlikelidir. Kod elinizdedir ama Terraform resource’ların kim olduğunu bilmez, “create” ister; VPC, RDS, IAM rolleri tekrar yaratılır, mevcutlar orphan kalır. Versiyonlamak, şifrelemek ve eşzamanlı erişimi kilitlemek üç temel hijyendir.
| State Konsepti | Teknik Karşılık | Tipik Boyut | Risk Eğer Yoksa |
|---|---|---|---|
| serial | Monoton artan revision counter | int64 | Stale write, son apply kaybı |
| lineage | State’in benzersiz UUID’si | 36 ch | Yanlış state üzerine yazma |
| resources[] | Tüm yönetilen kaynak listesi | 50-500 KB / 100 resource | Drift tespiti imkânsız |
| outputs | Modül çıktıları, remote_state tüketimi | 2-20 KB | Çapraz stack iletişimi kırılır |
| sensitive values | RDS şifreleri, secret ARN’leri (PLAIN) | Değişken | Backend şifrelenmemişse sızıntı |
Sensitive değerler için kritik not: sensitive = true bayrağı sadece CLI output’u maskeler; state dosyasında değer PLAINTEXT durur. Bu yüzden backend seviyesinde encryption-at-rest (SSE-KMS) tartışılmaz zorunluluktur. Local state (laptop’ta terraform.tfstate) sadece tek kişilik POC için kabul edilebilir; iki kişilik ekipte bile aynı dosya üzerinde eşzamanlı apply, son yapanın değişikliğini kaybeder. CI/CD pipeline’da local state zaten imkânsız. İlk kuralımız: remote backend mecburi.

Remote Backend Seçenekleri: S3, GCS, Azure Blob, Terraform Cloud
2026 itibarıyla remote backend pazarı dört segmente ayrılıyor: (1) hyperscaler object storage + native lock (S3+DynamoDB, GCS, Azure Blob), (2) managed Terraform platformları (HCP Terraform, Scalr, Spacelift, Env0), (3) self-hosted Terraform Enterprise, (4) generic HTTP backend (Atlantis, custom). Her birinin maliyet ve operasyonel yük profili farklıdır.
HashiCorp 2024’te S3 backend’e native locking ekledi (Terraform 1.10+); use_lockfile = true ile S3’te .tflock yaratılıyor, DynamoDB zorunluluğu kalktı. Yine de geriye dönük uyumluluk için DynamoDB pattern’i yaygın. AWS Cost Explorer verisine göre 200 microservice’lik orta ölçekli ekip için S3+DynamoDB backend aylık ~$0.40-$1.20 tutuyor. HCP Terraform Standard tier resource başına ücretlendiriliyor: ilk 500 ücretsiz, sonrası ~$0.00014/saat (1.000 resource için ~$50/ay) — 2025 Q4 fiyatlandırması.
| Backend | Native Lock | Encryption | Versioning | Aylık Maliyet (orta ölçek) | Setup Karmaşıklığı |
|---|---|---|---|---|---|
| S3 + DynamoDB | DynamoDB (legacy) veya use_lockfile | SSE-S3 / SSE-KMS | S3 versioning | $0.40 – $1.20 | Orta (IAM + KMS + DDB) |
| S3 + use_lockfile (TF 1.10+) | S3 native | SSE-KMS | S3 versioning | $0.20 – $0.80 | Düşük |
| GCS | GCS object generation | Google-managed / CMEK | Bucket versioning | $0.30 – $1.00 | Düşük |
| Azure Blob | Blob lease (60sn auto-renew) | SSE / CMK | Blob versioning | $0.30 – $0.90 | Düşük |
| HCP Terraform | Workspace seviyesi | Vault-backed | Otomatik history | $50 – $400 | Çok düşük (managed) |
| Spacelift | Stack seviyesi | SSE-KMS + Vault | Otomatik | $200+ (per seat) | Düşük (SaaS) |
| Self-hosted TFE | Workspace | Configurable | Built-in | $1.500+ (license) | Yüksek (HA cluster) |
Bu kararı verirken üç soruyu net cevaplayın:
- Compliance: SOC2, PCI-DSS, HIPAA gerekiyorsa managed platform (HCP/Spacelift) audit log + RBAC işini ücretsiz halleder.
- Ekip büyüklüğü: < 5 mühendis ve < 200 resource için S3+DDB en ucuz; > 20 mühendis için governance açısından managed kaçınılmaz.
- Multi-cloud: AWS+GCP+Azure paralel kullanıyorsanız tek backend olarak GCS veya HCP tercih edin; her cloud’da farklı state pattern’i sürdürmek operasyonel maliyeti %30-50 artırır.
S3 backend minimum konfigürasyonu şu blokla başlar:
terraform {
backend "s3" {
bucket = "acme-tfstate-prod-eu-west-1"
key = "platform/network/terraform.tfstate"
region = "eu-west-1"
encrypt = true
kms_key_id = "arn:aws:kms:eu-west-1:111122223333:key/abcd-..."
use_lockfile = true
# dynamodb_table = "tfstate-lock" # legacy
}
}
S3 bucket’ta BlockPublicAccess, versioning, MFA-delete (önerilen), lifecycle ile 90 gün noncurrent retention ve yıllık KMS key rotation tartışılmaz minimumlardır. ENISA 2024 Cloud Security Threat Landscape raporu, misconfigured cloud storage’ın bulut ihlallerinin %23’ünde birincil vektör olduğunu söylüyor — tfstate bucket’ı yüksek-değerli hedeftir. Konuyla ilişkili olarak Otomatik Secret Rotation 2026: Vault ve AWS Pratik Rehberi rehberimiz detaylı incelemeyi içerir.
State Locking: Eşzamanlılık Kontrolünün Anatomisi
İki engineer aynı anda terraform apply çalıştırırsa ve lock yoksa klasik race condition: ikisi de aynı state’i okur, ayrı değişiklikler yapar, son yazan diğerini ezer. Sonuç sadece “kaybolan değişiklik” değildir; serial bozulur, state iki paralel evrene böler. Lock bu senaryoyu önlemek için advisory mutual exclusion uygular.
Locking mekanizmaları backend’e göre değişir:
- DynamoDB lock (legacy S3): Bir item yaratılır (
LockID = bucket/key-md5), TTL yoktur, ölü process bırakırsa manuelterraform force-unlockgerekir. - S3 use_lockfile (modern): Bir
.tflockS3 object’i atomik yaratılır (If-None-Match: *), session öldüyse object kalır, force-unlock yine gerekir. - Azure Blob lease: 60 saniyelik renewable lease; CLI process ölürse 60sn sonra otomatik serbest. Avantaj: kendiliğinden temizlenir.
- GCS: Object generation precondition (
x-goog-if-generation-match) ile optimistic concurrency. - HCP Terraform: Workspace queue: aynı workspace’te plan/apply seri çalışır, kullanıcı UI’dan iptal edebilir.
| Lock Mekanizması | Otomatik Timeout | Force-Unlock İhtiyacı | Multi-Region Latency | Önerilen Senaryo |
|---|---|---|---|---|
| DynamoDB (legacy) | Yok | Sık | ~25 ms | Mevcut migration, geriye uyum |
| S3 .tflock | Yok | Bazen | ~40 ms (S3 PUT) | Yeni AWS kurulumları (TF 1.10+) |
| Azure Blob lease | 60sn (renewable) | Nadir | ~35 ms | Azure-native ekipler |
| GCS generation | HTTP-level | Nadir | ~30 ms | GCP-native |
| HCP Workspace | Run timeout (varsayılan 2h) | UI’dan iptal | ~80 ms | Çoklu ekip, governance |
Pratik kural: CI/CD pipeline’da apply komutuna -lock-timeout=10m ekleyin. Varsayılan lock alınamazsa anında fail eder; 10dk timeout paralel job’ları kuyruğa alır, art arda apply’lar deterministik sıralanır. Force-unlock tehlikelidir: process’in öldüğünden ve stack’e başka apply gitmediğinden eminseniz uygulayın; aksi halde aktif apply’ın ortasında state’i bozarsınız. HashiCorp resmi rehberde bu komutu son çare olarak işaretler.
State Surgery: rm, mv, import, replace, refresh Operasyonları
State’i elle ameliyat etmek lüks değil, kurumsal Terraform kullanımının kaçınılmaz parçasıdır. Resource taşıma, yeniden adlandırma, manuel ekleme veya bozuk resource temizliği refactor’larda haftada birkaç kez gerekir. Terraform 1.5’te eklenen moved ve import blokları işlemlerin %80’ini deklaratif hale getirdi; yine de CLI komutlarını bilmek hayat kurtarır.
- terraform state list: State’teki tüm resource adreslerini listeler. Ne zaman seç: Drift veya taşıma öncesi envanter.
- terraform state show ADDR: Tek resource’un attribute’larını yazdırır. Avantaj: Plaintext sensitive değerleri görmenin tek hızlı yolu.
- terraform state mv KAYNAK HEDEF: Resource’u state’te yeniden adlandırır, gerçek cloud kaynağı dokunulmaz. Ne zaman seç: Modül refactor, count → for_each geçişi.
- terraform state rm ADDR: Resource’u state’ten çıkarır ama cloud’da bırakır (orphan eder). Dezavantaj: Bir daha apply’da Terraform bu kaynağı yeniden yaratmak ister; sonrasında
importgerekir. - terraform import ADDR ID: Var olan cloud kaynağını state’e adopte eder. Avantaj: ClickOps ile kurulmuş legacy altyapıyı kademeli IaC’ye çekme.
- terraform apply -replace=ADDR: Eski
taintkomutunun yerine geçer; tek resource’u destroy+create cycle’a alır. - terraform refresh (1.6+ deprecated standalone): Artık
terraform plan -refresh-only+applytercih edilir.
2024’te Terraform 1.7 ile gelen removed bloğu, deklaratif state rm’in son halkasıdır:
removed {
from = aws_instance.legacy_bastion
lifecycle { destroy = false }
}
Bu blok PR review’da audit edilebilir, Git tarihine düşer ve kişiye bağımlı manual state rm riskini ortadan kaldırır. moved bloğu modül yeniden adlandırmalarını state mv’siz halleder; HashiCorp refactoring rehberinde detaylı pattern’lar var.

State Bölümleme: Tek Devasa State mi, Mikro-Stack’ler mi?
Kuruluş büyüdükçe en kritik mimari soru: tek state mi, çoklu state mi? Monolitik state POC için basittir ama 500-1.000 resource sonrası terraform plan 3-8 dakikaya çıkar, blast radius tüm altyapıyı etkiler, iki ekip aynı state’i bekler. Çoklu state blast radius’u sınırlar ama bağımlılığı (network state’in VPC ID’sini compute’a geçirmek) terraform_remote_state data source ile yönetmek gerekir. Google Cloud architecture dokümanı “layered” mimari öneriyor: bootstrap → networking → security → platform → application, her biri ayrı state.
| Bölme Stratejisi | State Sayısı (tipik) | Plan Süresi | Blast Radius | Cross-Stack Karmaşıklığı | Önerilen Ölçek |
|---|---|---|---|---|---|
| Monolithic | 1 | 3-15 dk | Tüm altyapı | Yok | POC, < 50 resource |
| Per-environment | 3 (dev/stg/prod) | 2-10 dk | 1 environment | Düşük | Küçük ekipler |
| Per-layer | 5-8 | 30sn-3dk | 1 layer | Orta (remote_state) | Orta ölçek |
| Per-service | 20-200 | 10-90sn | 1 servis | Yüksek (output contract) | Mikroservis-yoğun |
| Per-account + per-layer | 50-500 | 20sn-2dk | 1 account/layer | Çok yüksek | Kurumsal, çok-hesap |
Pratik karar: ekip 5 kişiden büyükse en az per-environment + per-layer’a geçin. Per-service granülaritesi cazip görünse de output contract’ları tüm Terraform mimarisini “distributed system” karmaşıklığına sokar; Cloud-Native Mimari prensipleriyle uyumlu olsa da runtime karmaşıklığı taşır. Terragrunt veya Atlantis bu pattern’i standardize eder.
CI/CD Entegrasyonu: GitHub Actions, GitLab, Atlantis, Spacelift
State hijyenini production’da zorlamanın tek yolu, CLI’yı laptop’lardan kaldırıp tüm apply’ı CI/CD’den çalıştırmaktır. 2024 Stack Overflow Developer Survey’ine göre IaC kullanıcılarının çoğunluğu Terraform/OpenTofu’yu GitHub Actions veya GitLab CI üzerinden çalıştırıyor; Atlantis ve Spacelift gibi PR-driven araçlar managed Terraform pazarının ~%18’ini oluşturuyor.
İyi bir Terraform pipeline’ı altı aşamalıdır:
- fmt:
terraform fmt -check -recursive, formatlama tutarlılığı. - validate: Provider schema doğrulaması.
- lint: tflint, tfsec, checkov, trivy ile statik analiz.
- plan:
terraform plan -out=tfplan, çıktıyı artifact olarak sakla. - policy: OPA/Conftest veya Sentinel ile policy-as-code doğrulaması.
- apply: Yalnız main branch + manual approval;
terraform apply tfplan.
Pipeline detayı için CI/CD Pipeline Kurulumu yazısı GitHub Actions vs GitLab vs Jenkins karşılaştırmasını işliyor. Güvenlik açısından pipeline’a DevSecOps Shift-Left prensipleri (tfsec + checkov gate’leri) eklemek 2026’da opsiyonel değil.
| Pipeline Aracı | PR Plan Yorumu | Policy Engine | Self-Hosted Runner | Drift Detection | Tipik Maliyet |
|---|---|---|---|---|---|
| GitHub Actions + custom | Manuel (action) | OPA via job | Var | Cron job | $0 (public) / runner |
| GitLab CI | Manuel (mr note) | OPA via job | Var | Scheduled pipeline | $0 – $19/seat |
| Atlantis (OSS) | Native | Conftest/OPA | Mecburi (self-host) | Manual | Sadece host maliyeti |
| HCP Terraform | Native | Sentinel + OPA | Agents | Native | $50 – $500+ |
| Spacelift | Native | OPA native | Workers | Native scheduled | $200+ / seat |
| Env0 | Native | OPA | Self-hosted agents | Native | $200+ / user |
Kritik pattern: plan ve apply için aynı tfplan binary’sini kullanın. Plan sonrası state veya provider değişebilir; yeniden plan ile saved plan’i apply etmek farklı sonuç verir. Production’da saved plan güvenlidir.
Drift Detection ve Reconciliation
State drift, Terraform dışında değişen ama state’te güncel olmayan resource durumudur. %100 önlenemez; ölçülmesi ve sistematik reconcile edilmesi gerekir. CNCF ekosisteminde driftctl, HCP drift detection, AWS Config Rules ve Cloud Custodian bu görevi üstlenir.
Drift’in yaygın kaynakları:
- İnsan müdahalesi: “Hızlı bir prod fix” için console’dan SG kuralı eklemek — en sık %42.
- Auto-managed: Auto Scaling, AWS Backup, default tag policy gibi otomatik değişiklikler.
- Provider sürüm farkı: Yeni provider’ın yeni default attribute’u state’te yoktur.
- Eventual consistency: AWS IAM gibi servislerin propagation gecikmesi.
- Third-party operator: Kubernetes operator’larının cloud kaynak yaratması (CNCF benchmarklarına göre artıyor).
| Drift Aracı | Lisans | Coverage | CI Entegrasyonu | Maliyet |
|---|---|---|---|---|
| terraform plan -refresh-only | Built-in | State’teki resource’lar | Cron job | Compute zamanı |
| driftctl | Apache 2.0 (deprecated 2023, fork’lar aktif) | AWS + GCP | JSON output | $0 |
| HCP Terraform drift | Plus tier | Workspace seviyesi | Native | Plus add-on |
| AWS Config + Custom Rules | AWS native | Tüm AWS | EventBridge | $0.003 / config item |
| Spacelift drift | Built-in | Stack seviyesi | Native | Plan’a dahil |
Drift detection’ı saatlik/günlük cron olarak çalıştırıp bulguları Slack/PagerDuty’ye düşürmek pratik başlangıçtır. GitOps Kubernetes dünyasındaki “continuous reconciliation” felsefesinin Terraform karşılığı budur.

Disaster Recovery: State Yedekleme, Versioning, Restore
State kayıp/bozulma/yanlış silme senaryolarına hazırlık DR’in olmazsa olmazıdır. Üç katman: (1) backend versioning, (2) ek backup, (3) replay edilebilir kod. S3 versioning state’in son 100+ versiyonunu tutar; lifecycle’ı 90 gün noncurrent + 365 gün glacier ile yapılandırın. 1 MB state, günlük 5 apply ve 90 gün retention’da ~450 MB versioning storage — aylık ~$0.01, ihmal edilebilir.
Önerilen DR pattern:
- Versioning: Backend bucket’ta zorunlu, lifecycle ile 90+ gün.
- Cross-region replication: S3 CRR ile primary region dışına replikasyon (eu-west-1 → us-east-1) — RPO ~15 dk.
- Out-of-band backup: Günlük
terraform state pullile ayrı bir bucket’a (farklı AWS account) yedekleme, blast radius’u “AWS account compromise” senaryosuna karşı azaltır. - Encryption: SSE-KMS + key rotation; KMS key silinirse state şifresi açılamaz — key delete policy 30 gün waiting period zorunlu.
- Restore drill: Çeyrekte bir, test bir state’i geri yükleyip plan çalıştırın (gerçek prod’a apply YOK).
State bozulması nadirdir ama olduğunda saatler/günler harcanır. NIST’in Cybersecurity Framework “Recover” fonksiyonu kapsamında bu drill’leri kayıtlı prosedüre bağlamak audit’lerde aranan cevaptır.
Güvenlik: Sensitive Veriler, IAM, Encryption
State dosyası, üretim altyapısının en hassas tek dosyasıdır: RDS şifreleri, IAM access key’leri, API token’ları, KMS plaintext değerleri tümü resources.attributes alanında plaintext durur. Container Güvenliği yazısındaki secret hijyeninin Terraform muadili daha katıdır çünkü state tek dosyada her şeyi taşır.
Beş katmanlı savunma:
- Backend-level encryption: SSE-KMS + customer-managed key, key policy ile sadece CI runner role’ü erişebilir.
- Bucket policy:
aws:SecureTransportreddet, IAM principal whitelist, MFA condition. - IAM least privilege: CI runner role’ü sadece kendi prefix’ine yazsın (
resources: arn:aws:s3:::tfstate-prod/platform/*). - Secrets externalization: RDS şifresi state’te tutulmasın; AWS Secrets Manager / HashiCorp Vault’tan data source ile çekin,
random_password+aws_secretsmanager_secret_versionpattern’i. - Audit logging: S3 access log + CloudTrail data event’leri, state object her okumada/yazmada log’a düşer.
| Güvenlik Kontrolü | Backend | Standart | Implementasyon Maliyeti |
|---|---|---|---|
| Encryption at rest | S3/GCS/Azure | NIST SP 800-57, ISO 27001 A.10 | Düşük |
| Encryption in transit | Hepsi | TLS 1.2+ zorunlu | Düşük |
| Least-privilege IAM | Hepsi | AWS Well-Architected | Orta |
| Audit log + SIEM | Hepsi | SOC2 CC7.2, ISO 27001 A.12.4 | Orta-Yüksek |
| Customer-managed keys | S3/Azure/GCS | HIPAA, PCI-DSS | Orta |
| Cross-account isolation | S3 (AWS Org) | NIST SP 800-207 ZTA | Yüksek |
Ömer Önal olarak farklı müşterilerimde gördüğüm en sık hata: prod state ile dev state aynı bucket, aynı IAM policy ile erişiliyor. Bu, dev’de hata yapan engineer’ın prod state’i silmesini tek komut uzağına getirir. Hesap düzeyinde izolasyon (prod tfstate ayrı AWS account’ta) blast radius’unu sıfıra indirir; danışmanlık projelerinde ilk önerdiğim adımdır.

OpenTofu vs Terraform: 2026’da Hangi Backend Hangisi?
2023’te Terraform’un BSL lisansına geçişinden sonra Linux Foundation altında forklanan OpenTofu 2024-2025’te ciddi adoption kazandı. CNCF Sandbox olarak başlayıp 2024 sonunda Incubating’e geçti; GitHub star sayısı 2026 Q1 itibarıyla ~25.000’i aştı. State formatı, backend protokolü ve plan formatı Terraform 1.5 ile %100 uyumlu; mevcut state’i taşıma hot-swap kadar basit.
OpenTofu’nun state özelinde getirdikleri:
- State encryption (built-in): OpenTofu 1.7+ state ve plan dosyalarını client-side şifreleyebiliyor. Anahtar PBKDF2/AWS KMS/GCP KMS/HashiCorp Vault’tan gelir. Avantaj: Backend ele geçse bile state’in içeriği okunamaz.
- Provider-defined functions: Direkt state ile ilgili değil ama HCL refactor’larda yardımcı.
- Early evaluation: Backend block’unda variable kullanımı (Terraform CE’de yok).
| Özellik | Terraform 1.10 | OpenTofu 1.8 | Pratik Etki |
|---|---|---|---|
| S3 native lock | Var | Var | DDB tablo kaldırılabilir |
| Client-side state encryption | Yok | Var | Defense-in-depth +1 katman |
| Backend block’ta variable | Sınırlı | Tam | DRY backend config |
| Lisans | BSL 1.1 | MPL 2.0 | Kurumsal redistribute |
| Resmi backend ekosistemi | Geniş | Geniş (uyumlu) | Hot-swap mümkün |
Pratik karar: greenfield projede OpenTofu seçmenin teknik maliyeti yok, lisans esnekliği ve state encryption avantaj. Mevcut HCP Terraform müşterisi iseniz Terraform’la kalmak rahat. Multi-cloud governance için Multi-Cloud Stratejisi yazısı vendor lock-in çerçevesini ele alıyor.
Sık Sorulan Sorular
Terraform state dosyasını Git’e commit etmeli miyim?
Asla. State plaintext sensitive değer içerir; Git’e girdiği an Git history’sine düşer ve tüm developer’larınızla paylaşılır. Repo public olursa veya bir developer laptop’u ele geçerse production şifreleriniz açıkta kalır. State sadece remote backend’de (S3/GCS/Azure/HCP) ve şifrelenmiş halde durmalı. Git’e .terraform/, *.tfstate, *.tfstate.backup, *.tfvars hepsini .gitignore ile dışlayın.
terraform state rm ile silinen kaynak ne olur?
Kaynak cloud’da olduğu gibi kalır, sadece Terraform onu artık tanımıyor (orphan). Sonraki terraform plan komutunda Terraform “bu HCL block’unda tarif edilen kaynak yok” der ve yeniden yaratmak ister. Eğer kaynağı state’e geri almak istiyorsanız terraform import ADDR ID komutu kullanın; eğer kaynak gerçekten silinmeli ise önce cloud console’dan silip sonra HCL’den de kaldırın.
İki engineer aynı anda apply atarsa ne olur?
Lock varsa ikincisi “Error acquiring the state lock” hatasıyla durur ve -lock-timeout süresince bekler. Lock yoksa felaket: iki paralel apply farklı serial üzerine yazar, son yazan kazanır, diğer engineer’ın değişikliği state’ten kaybolur ama cloud’da kalır — drift oluşur. Bu yüzden remote backend ve native lock zorunludur, tek bir POC bile lock’suz çalıştırılmamalı.
terraform.tfstate.backup dosyası ne işe yarar?
Her başarılı state yazımından önce Terraform mevcut state’i .backup uzantısıyla kopyalar. Bu, en son apply öncesi state’in snapshot’ıdır ve son apply’da yanlış bir şey olursa terraform state push terraform.tfstate.backup ile geri dönebilirsiniz. Yine de bu yalnız son adım için koruma sağlar; gerçek DR için backend versioning + ayrı yedekleme stratejisi gerekir.
State şifrelenmiş backend’de duruyorsa neden sensitive değerleri Vault’ta tutmalıyım?
Backend encryption “at rest” korur ama state’i okuyan herkes (CI runner, debug yapan engineer) plaintext görür. Vault/AWS Secrets Manager pattern’i ile şifreleri data kaynak olarak çekerseniz state’te sadece referans (örn. secret ARN’i) durur, gerçek değer Vault’ta kalır. Defense-in-depth: backend ele geçse bile sırlar açılmaz, runtime rotation bağımsız çalışır.
Sonuç
Terraform state, IaC pratiğinin sessiz omurgasıdır; doğru kurulduğunda yıllarca dokunmazsınız, yanlış kurulduğunda her hafta ateş söndürürsünüz. 2026 için minimum çekirdek: (1) remote backend (S3 native lock veya managed platform), (2) encryption-at-rest + customer-managed KMS, (3) IAM least-privilege ve hesap-düzeyinde izolasyon, (4) state bölümleme (en az per-environment + per-layer), (5) CI/CD-only apply, (6) drift detection cron’u, (7) çeyreklik DR drill. Bu yedi adım 50 mühendise kadar ölçeklenir; daha büyük ekiplerde policy-as-code (OPA/Sentinel) ve managed platform zorunlu hâle gelir.
Karar çerçevesi: <5 mühendis ve <200 resource için S3 + use_lockfile + KMS yeterli; 5-20 mühendis için HCP Terraform Standard ROI'yi hızla geri öder; >20 mühendis veya regülasyon yoğun sektörlerde (finans, sağlık, kamu) Spacelift/Env0/self-hosted TFE değerlendirilmeli. OpenTofu greenfield için savunulabilir, brownfield migration için aceleye gerek yok.
Mevcut Terraform kurulumunuzun state mimarisini denetletmek, drift cron’u kurmak veya HCP migrasyonu için iletişime geçebilirsiniz; tipik audit + roadmap çıktısı 5 iş günü sürer.










Ömer ÖNAL
Mayıs 16, 2026DevOps danışmanlık projelerinde gözlemlediğim bir pattern: kuruluşlar pipeline’a yatırım yapmadan önce mevcut deployment frequency ve change failure rate metriklerini ölçmüyor. Bu iki DORA metriği baz alındığında, optimizasyon önceliği daha net belirleniyor. Aksi takdirde yatırım kararı sezgisel kalıyor. Yorumlarınızı bekliyorum.