
Terraform State Nedir ve Neden Bu Kadar Önemli?
2026-06-22 · 10 dk okuma
Terraform'a yeni başlayanların en çok kafasının karıştığı konu state'tir. Oysa Terraform'un tüm mantığı buna dayanır: state, Terraform'un gerçek dünyada ne oluşturduğunu hatırladığı defterdir.
State tam olarak nedir?
terraform apply çalıştırdığında Terraform, oluşturduğu her kaynağın kimliğini (ID'sini) ve özniteliklerini bir JSON dosyasına (terraform.tfstate) yazar. Bir sonraki plan/apply'da, kodundaki 'istenen durum' ile state'teki 'mevcut durumu' karşılaştırıp aradaki farkı hesaplar.
State olmasaydı Terraform, bir AWS instance'ının senin mi yönettiğin yoksa başka birinin mi oluşturduğunu bilemezdi. State, kod ile gerçek altyapı arasındaki köprüdür.
Neden yerel state tehlikelidir?
- Ekipteki herkeste farklı bir state kopyası olur → çakışma ve kaynak silinmesi.
- State dosyası kaybolursa Terraform altyapını 'tanımaz' hale gelir.
- State içinde parolalar/gizli anahtarlar düz metin olarak durabilir — laptop'ta güvensiz.
Çözüm: uzak state + kilit (locking)
Üretimde state'i uzak bir backend'de tut (S3, GCS, Terraform Cloud). Kilit mekanizması, aynı anda iki kişinin apply çalıştırıp state'i bozmasını engeller.
terraform {
backend "s3" {
bucket = "sirket-terraform-state"
key = "prod/network.tfstate"
region = "eu-west-1"
dynamodb_table = "terraform-locks" # kilit için
encrypt = true
}
}State'i bozmadan yönetmek
- Asla terraform.tfstate'i elle düzenleme.
- Kaynağı yeniden adlandırırken 'terraform state mv' kullan.
- Elle oluşturulmuş bir kaynağı Terraform'a devretmek için 'terraform import' kullan.
- State'i her zaman versiyonlanan ve şifrelenen bir backend'de tut.
Vaka: 'state lock' çakışması ve drift
İki gerçek olay ve çözümü. Önce: bir arkadaşının apply'ı yarıda kaldı, seninki 'state locked' diye hata veriyor.
$ terraform applyError: Error acquiring the state lockLock Info: ID: 8f3c... Who: ci@runner Created: 2 min ago# Önce SAHİBİNİ teyit et (CI hâlâ çalışıyor olabilir!). Emin ol, sonra:$ terraform force-unlock 8f3c...Terraform state has been successfully unlocked! # ✓ kilit açıldı
Dikkat
force-unlock'u körlemesine kullanma: gerçekten çalışan bir apply'ı kilidinden edersen state BOZULUR. Önce kimin/hangi işin kilitlediğini (Lock Info) doğrula.
Drift: kod ile gerçek altyapı ayrıştı
- 1terraform plan → beklenmedik değişiklikler mi çıkıyor? (biri konsoldan elle değiştirmiş)
- 2terraform refresh yerine plan çıktısını oku: fark nerede?
- 3Elle yapılan doğruysa kodu güncelle; değilse apply ile geri al
- 4Hiç yönetilmeyen bir kaynağı devral: terraform import
$ terraform plan~ aws_security_group.web ingress: [80] -> [80, 22] # biri elle 22'yi açmış# Karar: 22 istenmiyorsa apply ile geri al; isteniyorsa kodda tanımla.$ terraform import aws_s3_bucket.assets my-existing-bucketImport successful! # ✓ elle kurulmuş bucket artık state'te
Mini görev
S3 + DynamoDB ile uzak backend + kilit kur. Bir kaynağı konsoldan elle değiştir, 'terraform plan' ile drift'i gör ve kararını ver (kodu güncelle ya da apply ile geri al). Ardından elle bir bucket oluşturup 'terraform import' ile state'e al.
Uygulamalı görev — tarayıcıda dene
State'i anladığında Terraform gizemini yitirir ve güçlü bir araca dönüşür. Cloudpuz'daki Terraform lab'larında bu kavramları gerçek bir uzak backend üzerinde uygularsın.
Resmi kaynaklar
Son doğrulama: 2026-07-17
Sıkça Sorulan Sorular
Terraform state nedir?
State, Terraform'un gerçek dünyada ne oluşturduğunu hatırladığı defterdir. 'terraform apply' çalıştığında Terraform, oluşturduğu her kaynağın kimliğini (ID) ve özniteliklerini bir JSON dosyasına (terraform.tfstate) yazar; kod ile gerçek altyapı arasındaki köprüdür.
Terraform state dosyası neden önemli?
Bir sonraki plan/apply'da Terraform, koddaki 'istenen durum' ile state'teki 'mevcut durumu' karşılaştırıp aradaki farkı hesaplar. State olmasaydı Terraform, bir kaynağı senin mi yoksa başka birinin mi oluşturduğunu bilemezdi.
Yerel (local) Terraform state neden tehlikelidir?
Ekipteki herkeste farklı bir state kopyası olması çakışmalara ve kaynak silinmesine yol açar. State dosyası kaybolursa Terraform altyapını tanımaz hale gelir; ayrıca state içinde parolalar ve gizli anahtarlar düz metin olarak durabilir, bu da laptop'ta güvensizdir.
Terraform'da uzak (remote) state ve kilit (locking) neden kullanılır?
Üretimde state'i S3, GCS veya Terraform Cloud gibi uzak bir backend'de tutmak gerekir. Kilit mekanizması, aynı anda iki kişinin apply çalıştırıp state'i bozmasını engeller; örneğin S3 backend'inde DynamoDB tablosu kilit için kullanılır.
Terraform state'i bozmadan nasıl yönetilir?
Asla terraform.tfstate elle düzenlenmemeli; kaynak yeniden adlandırılırken 'terraform state mv', elle oluşturulmuş bir kaynağı devralmak için 'terraform import' kullanılmalıdır. Ayrıca 'force-unlock' körlemesine kullanılmamalı; gerçekten çalışan bir apply'ı kilidinden edersen state bozulur, önce Lock Info ile sahibini doğrula.
Okumak yetmez — dene.
Bu konuları tarayıcıda gerçek terminalde uygula.