C3 — Terraform: A6'yı Otomatikleştir#
"Terraform bir soyutlamadır; soyutladığı acıyı yaşamamış birine öğretmek boşadır. A6'yı hatırla."
Blok: C — Tekrarlanabilirlik · Süre: ~16 saat · Ön koşul: A6, C1
🎯 Bu modülü bitirdiğinde#
- A6'da elle kurduğun altyapıyı Terraform ile kod olarak tanımlarsın.
plan/apply/destroydöngüsünü ve state'in ne olduğunu açıklarsın.- Aynı ortamı sıfırdan, elle hiçbir şeye dokunmadan yeniden kurabilirsin.
🧠 Niye bu, niye şimdi#
A6'da her şeyi elle yaptın ve her tekrar hataya açıktı. C3 o elle-işi kod hâline getirir; bu, C → D geçiş sinyalinin ta kendisidir: "sistemini sıfırdan, elle dokunmadan yeniden kurabiliyor musun?"
📖 Önce oku#
| Kaynak | Ne için | Süre |
|---|---|---|
03-IaC/Terraform-Best-Practices.md | state, yapı, pratikler | ~30 dk |
03-IaC/Terraform-Module-Layout.md | modül düzeni | ~20 dk |
🔨 Lab#
👉 labs/build/L11-terraform/ — yerel: LocalStack (AWS servislerini yerelde taklit eden öykünücü — bulut/para gerekmez; Glossary.md).
💥 Kırık lab#
👉 labs/broken/K03-terraform-state/ — Belirti: "apply beklenmedik sonuç veriyor / kilitli." (Gerçekçi sebep gizli: state lock / drift.) Blok C'nin zorunlu kırık lab'ıdır.
✅ Kabul kriterleri#
Hepsi doğrulanmadan sonraki modüle geçme: - [ ] A6 ortamı Terraform ile sıfırdan terraform apply ile kuruluyor (yerelde, LocalStack) - [ ] terraform destroy sonrası tekrar apply aynı sonucu üretiyor — tekrarlanabilirlik kanıtı - [ ] bash labs/broken/K03-terraform-state/verify.sh çözümden sonra sıfır hatayla geçiyor - [ ] State'in ne olduğunu ve niçin paylaşılan/kilitlenen bir yerde durması gerektiğini yazılı anlatabiliyorsun
🧪 Kendini test et#
- Terraform state nedir? Niçin "gerçek dünyanın fotoğrafı" değil, "Terraform'un ne yaptığının kaydı"dır?
- İki kişi aynı anda
applyçalıştırırsa ne olur, bunu ne engeller? - Biri konsoldan elle bir kaynağı değiştirdi. Sonraki
planne gösterir, buna ne denir, nasıl düzeltirsin?
Cevaplar
1. State, Terraform'un yönettiği kaynakların bir eşlemesidir: hangi kaynağı hangi gerçek nesneyle ilişkilendirdiğini tutar. Gerçek dünya bundan bağımsız değişebilir (elle müdahale); Terraform yalnız kendi kaydını bilir, farkı `plan`'da yüzeye çıkarır. Detay [`03-IaC/Terraform-Best-Practices.md`](../../03-IaC/Terraform-Best-Practices.md). 2. İki eşzamanlı `apply` state'i bozabilir. Bunu **state lock** engeller: ilk işlem kilidi alır, ikincisi bekler. Bu yüzden state uzak ve kilitlenebilir bir arka uçta durmalı (yerel dosya değil). 3. `plan` beklenmedik bir fark gösterir — buna **drift** denir. Ya elle değişikliği geri alıp `apply` ile koda hizala, ya değişikliği kalıcıysa koda yansıt. `ignore_changes` yalnız son çaredir.🆘 Takıldıysan#
| Belirti | Muhtemel sebep | Ne yap |
|---|---|---|
apply "state locked" diyor | Önceki işlem kilidi bırakmış / eşzamanlı çalışma | Çalışan işlem yoksa force-unlock (dikkatle); state'i ekiple uzak arka uçta paylaş |
plan her seferinde değişiklik gösteriyor | Drift veya provider'ın normalize etmediği alan | Elle değişikliği geri al ya da koda yansıt; ignore_changes son çare |
destroy bazı kaynakları bırakıyor | Bağımlılık / prevent_destroy koruması | Bağımlılık sırasını çöz; koruma bayrağını gözden geçir |
| Yerelde gerçek buluta gidiyor | Provider endpoint'i LocalStack'e yönlendirilmemiş | Endpoint'i yerel öykünücüye çevir; gerçek bulut C4'e kadar yok |
💼 Portfolyo çıktısı#
A6 altyapısının kod hâli (Terraform modülü) — sıfırdan kurulabilir, gösterilebilir.
⏭️ Sırada#
C4 — Bulut Temelleri + Bütçe Alarmı
"Elle kurulan altyapı bir anıdır; kod olan altyapı bir gerçektir — tekrar edilebilir olan."