H
arrow_back Blog'a Don | #DevOps #DevOps

Terraform 1.15 Alpha: Variable and Output Deprecation

H
Hurşit Emre Duru
4 dk okuma

Terraform 1.15 Alpha'da Yerel Kullanımdan Kaldırma (Native Deprecation)

Terraform ekosistemi son zamanlarda yineleme hızında büyük bir artış gördü; çekirdek ikili (core binary), topluluğun uzun süredir devam eden taleplerini karşılayan sık güncellemeler alıyor. En heyecan verici gelişmelerden biri de v1.15.0-alpha20260204 sürümünün yayınlanmasıdır. Alpha sürümleri genellikle deneysel çalışmalar için ayrılmış olsa da, bu özel yapı modül bakımcılarının yıllardır ihtiyaç duyduğu bir özelliği beraberinde getiriyor: değişkenler ve çıktılar için yerel kullanımdan kaldırma (native deprecation) uyarıları.

1.15 Alpha sürüm notlarının son analizinde vurgulandığı gibi, HashiCorp özel bir deprecated özniteliği (attribute) sunuyor. Bu ekleme, Kod Olarak Altyapı (IaC) modüllerinin yaşam döngüsü yönetimini temelden değiştirerek, alt akış tüketici işlem hatlarını (pipelines) bozmadan API sürümleri arasında sorunsuz geçişler yapılmasını sağlıyor.

Sorun: İletişim mi, Zorlama mı?

Terraform 1.15'ten önce, paylaşılan bir modüldeki girdi değişkenini kullanımdan kaldırmak "sessizlik" ile "yıkım" arasında ikili bir seçimdi.

  • Dokümantasyon (Sessizlik): Bakımcılar, README.md dosyasına veya bir kod yorumuna değişkenin artık kullanılmadığını belirten bir not ekleyebilirdi. Ancak, terraform apply komutunu çalıştıran mühendisler, bir hata oluşmadığı sürece kullandıkları modüllerin markdown dokümantasyonunu nadiren kontrol ederler.
  • Doğrulama (Yıkım): Bakımcılar, bir kullanıcı eski bir değişkeni kullanmaya çalıştığında hata vermesi için validation bloğunu kullanabilirdi. Bu yöntem etkili olsa da, CI/CD işlem hattının anında başarısız olmasına neden olan "sert bir kesinti" yaratır ve tüketiciyi hemen refaktör yapmaya zorlar; bu da genellikle iş akışını bozar.

Ortada bir orta yol yoktu; "Bu şimdilik hala çalışıyor ancak lütfen yakında değiştirin" demenin bir yolu bulunmuyordu. Yeni özellik, Terraform CLI'nın uyarı sistemini kullanarak bu boşluğu dolduruyor.

Değişken Kullanımdan Kaldırmanın Uygulanması

Yeni sözdizimi bildirimsel ve sezgiseldir. Bir variable bloğu içinde, artık bir dize mesajı içeren deprecated bağımsız değişkenini ekleyebilirsiniz. Bu mesaj, kullanıcı ilgili değişkene bir değer atarsa (ve sadece bu durumda), plan ve apply aşamalarında kullanıcıya gösterilir.

variable "instance_size" {
  type        = string
  default     = null
  description = "EC2 örneğinin boyutu."
  
  # Yeni özellik iş başında
  deprecated  = "'instance_size' değişkeni, bulut bağımsız adlandırma kurallarına uyum sağlamak amacıyla 'machine_type' lehine kullanımdan kaldırılmıştır. Bu girdi v2.0.0 sürümünde kaldırılacaktır."
}

variable "machine_type" {
  type        = string
  default     = "t3.micro"
}

Bir kullanıcı eski instance_size değişkenini kullanan bir plan çalıştırdığında, Terraform yürütmeyi durdurmayacaktır. Bunun yerine, CLI çıktısında belirgin bir Warning (Uyarı) bloğu oluşturacaktır. Bu engelleyici olmayan davranış, "hızlı hata vermenin" (fail-fast) hatalar için iyi olduğu, ancak "erken uyarmanın" geçişler (migrations) için tercih edildiği kurumsal ortamlar için kritiktir.

Çıktı Kullanımdan Kaldırma ile Modül Arayüzlerini İyileştirme

Bu özellik sadece girdilerle sınırlı değil. 1.15 Alpha, output blokları içinde de deprecated özniteliğini destekliyor. Bu, özellikle modülleri bireysel dize değerleri yerine karmaşık nesneler döndürecek şekilde yeniden yapılandırırken veya yazım hatalarını ya da mantıksal tutarsızlıkları düzeltmek için çıktıları yeniden adlandırırken yararlıdır.

output "server_ip" {
  value       = aws_instance.main.private_ip
  description = "Sunucunun özel IP adresi."
  
  deprecated  = "Bu çıktı tek bir dize döndürür. Lütfen tüm ağ arayüzlerinin yapılandırılmış bir eşlemesini döndüren 'server_network_details' çıktısını kullanın."
}

Bir kök modül module.app.server_ip çıktısına başvurursa uyarı tetiklenir. Çıktı hesaplanır ancak tüketici tarafından başvurulmazsa, günlüklerdeki kalabalığı azaltmak için uyarı gizlenir.

Kullanıcı Deneyimi Üzerindeki Etkisi

Bu özelliğin asıl gücü Kullanıcı Deneyiminde (UX) yatar. Terraform uyarıları belirgin bir renkle (genellikle sarı) işlenir ve standart kaynak planlanan değişikliklerinden ayrılır.

Bu, Semantik Sürümlemede (Semantic Versioning) bir "Yumuşak Gün Batımı" (Soft Sunset) aşaması oluşturur. Bir modül bakımcısı artık şunları yapabilir:

  1. v1.0: Değişkeni yayınlar.
  2. v1.1: Daha iyi bir değişken sunar ve eskisini deprecated olarak işaretler. Kod hala kusursuz çalışır ancak günlükler kullanıcıyı yükseltme yapması için uyarır.
  3. v2.0: Eski değişkeni kaldırır.
Teknik Not: deprecated statik bir dize kabul ettiği için, Terraform'un kıvrımlı heredoc (squiggly-heredoc) sözdizimi ile birleştirilerek çok satırlı açıklamalar yapılabilir; bu da bakımcıların geçiş kılavuzlarını veya dahili wiki sayfalarına bağlantıları doğrudan CLI çıktısına dahil etmelerine olanak tanır.

Sonuç

v1.15.0-alpha20260204 bir önizleme sürümü olsa ve üretim ortamlarında kullanılmaması gerekse de izlenen yön nettir. HashiCorp, Terraform kullanımının "2. Gün" (Day 2) operasyonlarına odaklanıyor: bakım, refaktör ve uzun vadeli destek. Kullanımdan kaldırma bildirimlerini doğrulama hatalarından ayırarak Terraform, nihayet mühendislere değişiklikleri yapıları bozmadan etkili bir şekilde iletebilecekleri araçları veriyor.

Okumaya Devam Et