DevOps and Infrastructure

Terraform: Çalışma Alanları vs. Dizinler

Kapsamlı Ölçekli Altyapı Kodu (IaC) yönetimi, birden fazla ortamı ele almak için sağlam bir strateji gerektirir. Takımlar Terraform'u benimsediğinde, yaygın bir tartışma ortaya çıkar: Terraform Çalışma Alanları mı yoksa dizin tabanlı bir yapı mı kullanmalısınız? Her iki yaklaşımın da değeri vardır, ancak temiz, güvenli ve ölçeklenebilir bir altyapıyı korumak için nüanslarını anlamak kritik öneme sahiptir.

Dizin Tabanlı Yapı İçin Argümanlar

Endüstride en yaygın desen, her ortam için ayrı bir dizin ayırmaktır. Bu yaklaşım, izolasyon ilkesiyle uyumludur. Üretim (production), ön üretim (staging) ve geliştirme (development) ortamlarını ayrı klasörlere ayırarak, durum dosyalarının, kimlik bilgilerinin ve yapılandırmaların birbirine karışmasını engellersiniz.

Bu strateji, genellikle ayrı takımlara sahip olan veya sıkı güvenlik uyumluluğu gerektiren ekipler için tercih edilir. Farklı AWS IAM rollerini veya Azure Service Principal'larını çalışma alanı yönetimi yükü olmadan farklı dizinlere atayarak erişim politikaları üzerinde granüler (ince taneli) kontrol sağlar.

Bu tür bir dizin yapısını düşünün:


project-root/
├── dev/
│   ├── main.tf
│   ├── variables.tf
│   └── terraform.tfstate
├── staging/
│   ├── main.tf
│   ├── variables.tf
│   └── terraform.tfstate
└── prod/
    ├── main.tf
    ├── variables.tf
    └── terraform.tfstate

Bu durum bazı kod tekrarlarına neden olsa da, Terraform Modülleri veya `include` yönergeleri (daha yeni sürümlerde) gibi araçlar bunu hafifletebilir. Temel fayda, açık izolasyondur. Ön üretim `variables.tf` dosyanızdaki bir yazım hatasının üretim ortamını etkilemesi olası değildir, çünkü durum dosyaları tamamen ayrıdır.

Terraform Çalışma Alanlarının Faydası

Terraform Çalışma Alanları, tek bir yapılandırma dosyası kümesinin aynı altyapının farklı örneklerini yönetmesine olanak tanımak üzere başlangıçta tasarlanmıştır. Tarihsel olarak çalışma alanları tek bir durum dosyasında yaşardı ve bu ciddi bir risk oluştururdu: global bir hata tüm ortamları silebilirdi. Ancak, daha yeni sürümlerde terraform.tfstate.d/ dizin desteğinin tanıtılmasıyla birlikte, her çalışma alanı artık bir arka uçta (S3 veya Azure Blob Depolama gibi) kendi durum dosyasını korur.

Çalışma alanları, geçici ortamlar için mükemmeldir; örneğin özellik dalları (feature branches) veya kısa ömürlü test ortamları. Kodunuzu DRY (Kendini Tekrar Etme) tutarak gereksiz kod tekrarını azaltırlar. CI/CD testleri için yüzlerce geçici kaynağı yönetiyorsanız, her biri için yeni bir dizin oluşturmak, ihtiyacınız olmayan bir idari yük oluşturur.

Bir çalışma alanı stratejisi başlatmak için şunları kullanabilirsiniz:


terraform init
terraform workspace new dev
terraform apply

Buradaki temel avantaj sadeliktir. Tek bir kod tabanını korursunuz ve bağlam değiştirirsiniz. Ancak bu kolaylık sorumluluk gerektirir. Durum karmaşasını önlemek için apply komutlarını çalıştırmadan önce doğru çalışma alanını seçtiğinizden titizlikle emin olmalısınız.

Güvenlik ve Uyumluluk Hususları

Güvenlik açısından, dizin tabanlı yapılar açık bir avantaja sahiptir. Kova veya depolama hesabı düzeyinde sıkı en az ayrıcalık (least-privilege) erişim kontrolleri uygulayabilirsiniz. Örneğin, üretim dizinine kimlerin yazma erişimine sahip olduğunu kısıtlayabilir, geliştiricilerin ön üretim ortamını özgürce değiştirmesine izin verebilirsiniz.

Çalışma alanları, izole durum dosyalarına sahip olsalar bile aynı arka uç yapılandırmasını paylaşır. Arka uç erişimi ihlal edilirse, tüm çalışma alanları potansiyel olarak tehlikede kalır. Ayrıca, değişikliklerin çalışma alanları arasında denetlenmesi, kod deposunda aynı mantıksal birim altında yaşadıkları için daha zor olabilir.

Sonuç: Doğru Yolu Seçmek

Tüm durumlara uyan tek bir cevap yoktur. Basit altyapı gereksinimlerine sahip küçük bir takımsanız ve çok sayıda geçici ortamı hızlıca ayağa kaldırmak istiyorsanız, Terraform Çalışma Alanları hafif ve verimli bir çözüm sunar. Ancak, çoğu kurumsal senaryoda dizin tabanlı yapı daha güvenli ve yönetilebilir bir seçenektir. Daha iyi izolasyon, daha net denetim izleri sağlar ve her ortamın bağımsız bir varlık olarak ele alındığı CI/CD pipeline mantığıyla daha iyi uyum sağlar. Kritik üretim altyapısını yönetirken, kod yeniden kullanımından her zaman izolasyonu ve güvenliği önceliklendirin.

Share: