Terraform Modül Yazma: Yeniden Kullanılabilir Altyapı Kodu
Beceri rehberi

Terraform Modül Yazma: Yeniden Kullanılabilir Altyapı Kodu

Hazırlayan: Mindset Institute EditörlüğüGüncellendi: 5 dk okuma

Terraform modül tasarımı, girdi ve çıktı sözleşmesi, sürümleme, state ve ortam yönetimi: yeniden kullanılabilir altyapı kodu yazmanın adımları.

Terraform modülü nedir, neden yazılır?

Modül, belirli bir altyapı parçasını (örneğin bir ağ, bir veritabanı ya da bir uygulama kümesi) tek bir paket olarak tanımlayan Terraform yapılandırma klasörüdür. Her Terraform çalışma dizini aslında bir modüldür; çalıştırdığınız ana klasöre kök modül denir ve içinden başka modülleri çağırabilirsiniz.

Modül yazmanın nedeni tekrarı ve tutarsızlığı azaltmaktır. Aynı ağ yapısını geliştirme, test ve üretim ortamı için kopyala-yapıştır ile çoğaltırsanız, bir güvenlik düzeltmesini her kopyada ayrı ayrı yapmanız gerekir. Modül ile düzeltmeyi tek yerde yaparsınız. Bir diğer kazanç, ekip standartlarını koda gömmektir: Her depolama kaynağı şifreli açılsın ya da her makine zorunlu etiketlerle gelsin kuralı modülün içinde uygulanabilir.

Modül yapısı: hangi dosya ne iş yapar?

Yaygın düzen, modül klasörünü sorumluluklarına göre dosyalara ayırmaktır: • main.tf: modülün asıl kaynakları • variables.tf: dışarıdan alınan girdiler, tip ve açıklamalarıyla • outputs.tf: dışarı verilen değerler • versions.tf: gerekli Terraform sürümü ve sağlayıcı kısıtları • README: modülün ne yaptığı, örnek kullanımı

Bu isimler zorunlu değil, topluluk geleneğidir; ama kullanıcıların modülü hızlı anlaması için tutarlı kalmak değerlidir. Kök modül modülü şu biçimde çağırır: module bloğunda source ile klasör yolu veya depo adresi verilir, ardından girdiler atanır. Modülün çıktıları module.ad.çıktı_adı söz diziminde kullanılır.

Örneğin ağ modülü, adres aralığını ve alt ağ listesini girdi olarak alır; oluşturduğu ağın kimliğini ve alt ağ kimliklerini çıktı olarak verir. Uygulama modülü bu çıktıları girdi olarak kullanır.

Girdi ve çıktı sözleşmesini tasarlamak

Modülün kalitesini belirleyen şey içindeki kaynaklardan çok dış yüzüdür. Girdi ve çıktılar modülün sözleşmesidir; sonradan değiştirilmesi onu kullanan herkesi etkiler. İyi bir sözleşme birkaç ilkeye dayanır.

Girdileri az ama anlamlı tutun. Her iç ayarı dışarı açarsanız modül kolayca kullanılamaz hale gelir. Makul varsayılan değerler tanımlayın, zorunlu girdileri varsayılansız bırakın. Her değişkene tip ve açıklama ekleyin; doğrulama bloğu ile yanlış değerleri plan aşamasında yakalayın. Hassas değerleri (parola, anahtar) sensitive olarak işaretleyin.

Çıktılarda yalnızca tüketicinin gerçekten ihtiyaç duyacağı değerleri verin: kimlik, adres, ad. Modülün iç ayrıntılarını (ara kaynakların tüm nitelikleri) dışarı sızdırmayın; çünkü tüketici buna bağımlı hale gelir ve içeriği değiştirmek zorlaşır.

Kompozisyon: küçük modülleri birleştirmek

Tek bir büyük modül yerine, tek işi yapan küçük modüller ve onları bir araya getiren kompozisyon katmanı daha sürdürülebilirdir. Örneğin ağ, güvenlik grubu ve veritabanı ayrı modüller olur; ortam yapılandırması bunları birbirine bağlar. Bu düzen, bir parçayı değiştirirken diğerlerini riske atmamayı sağlar.

Kaçınılacak bir tuzak, her şeyi tek modül içinde koşullu yapılara boğmaktır. count ve for_each ile çok sayıda seçenek eklemek başlangıçta esnek görünür ama modülü anlaşılmaz kılar. Bir modülün kullanım biçimi birbirinden çok farklı senaryolara bölünmeye başlıyorsa, bunu ayrı modüle bölmek daha doğrudur.

Katman ayrımı da faydalıdır: temel altyapı (ağ, kimlik) nadiren değişir; uygulama katmanı sık değişir. Bunları ayrı yapılandırma ve ayrı state dosyalarında tutmak hata etkisini sınırlar.

State yönetimi: backend, kilit ve ortam izolasyonu

Terraform, yönettiği kaynakların kaydını state dosyasında tutar. Bu dosya yerel diskte kalırsa ekip çalışması kırılır, kaybolursa Terraform kaynakları tanımaz. Bu yüzden ekipler uzak bir backend kullanır: state bir nesne depolama ya da yönetilen bir hizmette saklanır, erişim yetkilendirilir ve sürüm geçmişi tutulur.

Yaygın backend seçenekleri durum kilidi destekler. Birden fazla kişi aynı anda uygulama yaptığında kilit, state'in bozulmasını önler. Kilit desteği olmayan bir backend ekip çalışmasında risk yaratır.

Ortam izolasyonu için yaygın yaklaşımlar şunlardır: ortam başına ayrı dizin ve ayrı state, ya da workspace kullanımı. Bazı ekipler üretim ile test ortamını ayrı state ve ayrı yetki ile tutmayı tercih eder; çünkü bir test hatasının üretimi etkilememesi öncelikli ihtiyaçtır. State dosyası hassas veri içerebileceğinden erişimi kısıtlanır ve şifrelenmiş depolanır.

Sürümleme, test ve dokümantasyon

Modül paylaşılıyorsa sürümlenmelidir. Modülü bir sürüm etiketiyle yayımlayıp tüketicilerin belirli bir sürüme sabitlenmesini sağlarsanız, modülde yapılan değişiklik kimsenin altyapısını habersiz değiştirmez. Anlamsal sürümleme mantığı (uyumsuz değişiklik ayrı, uyumlu eklenti ayrı sürüm artışı) bu açıdan iş görür.

Test katmanları arasında biçim ve söz dizimi denetimi, doğrulama komutu, statik güvenlik analizi ve gerçek kaynak oluşturup silen entegrasyon testleri bulunur. Her değişiklikte plan çıktısını gözden geçirmek, kod incelemesinin bir parçası olmalıdır. Plan, modül değişikliğinin hangi kaynakları yok edip yeniden yaratacağını gösterir; en pahalı hatalar buradan yakalanır.

Dokümantasyonu otomatik üretmek mümkündür; ancak insan yazımı bir örnek kullanım bölümü her zaman değerlidir. Modülü ilk kez kullanan kişi, kopyalayıp çalıştırabileceği çalışan bir örnek arar.

Sık yapılan hatalar

En yaygın hata, modülü yazarken her ayrıntıyı parametreye çevirmektir. Sonuç, kullanması kaynağı doğrudan yazmaktan zor bir modüldür. Bir diğeri, sağlayıcı yapılandırmasını modülün içine gömmektir; sağlayıcı yapılandırması çoğunlukla kök modülde yapılır, modül yalnızca hangi sağlayıcıya ihtiyaç duyduğunu bildirir.

Sürüm sabitlemeden uzak kaynaktan modül çekmek, bir gün beklenmedik değişikliğe yol açar. Uzak state olmadan ekip halinde çalışmak, çakışma ve kayıp riski taşır. Kaynakları state'ten elle silmek ya da taşımak da dikkat ister; yanlış hamle gerçek kaynağı silebilir. Yeniden adlandırma ve taşıma için Terraform'un kendi taşıma mekanizmalarını kullanmak güvenlidir.

Son olarak, test edilmeyen modülü paylaşmak: bir kez bozulan ortak modül birçok ekibi aynı anda etkiler.

Bu beceriyi Mindset programlarında nerede çalışırsınız?

Mindset kataloğunda bu konuya yakın programlar yer alır. Terraform Modül Mimarisi ve Yeniden Kullanılabilir Altyapı programı; Modül Sözleşmesi Tasarımı, Kompozisyon ve Katman Ayrımı, Sürümleme ve Yayınlama, Test, Doğrulama ve Kalite gibi modül başlıklarını içerir. Terraform İleri Seviye: Modüller ve Durum Yönetimi, Durum Mimarisi ve Arka Uç Yönetimi, Kaynak Yaşam Döngüsü ve Kurtarma ile Dağıtım Hattı ve İşletim başlıklarına yer verir. Terraform ile Altyapı Otomasyonu ise temel HCL dilinden çok bulutlu stratejiye uzanan daha geniş bir programdır.

İlgili Mindset programı

Terraform Modül Mimarisi ve Yeniden Kullanılabilir Altyapı

Sık sorulanlar

Sık sorulan sorular

Terraform modülü ile workspace aynı şey mi?

Hayır. Modül, kodu paketleyip yeniden kullanmanızı sağlayan yapıdır. Workspace ise aynı yapılandırmanın farklı state kopyalarını yönetmenizi sağlar. İkisi birbirini tamamlar: aynı modülü farklı ortamlarda çağırabilir, ortamları ayrı state ile tutabilirsiniz.

Modülü ne zaman ayırmalıyım?

Aynı altyapı parçasını birden fazla yerde kullanıyorsanız ya da bir parçanın ekip standardı olmasını istiyorsanız modüle ayırmaya değer. Tek kez kullanılacak, çok özel bir yapı için modül yazmak sıklıkla gereksiz karmaşıklık getirir.

State dosyasını sürüm kontrolüne eklemeli miyim?

Genellikle hayır. State dosyası hassas bilgi içerebilir ve eşzamanlı çalışmada çakışma yaratır. Bunun yerine kilit destekli, şifreli ve erişimi yetkilendirilmiş uzak bir backend kullanmak yaygın uygulamadır. Yapılandırma kodu ise sürüm kontrolünde tutulur.

Modülün çıktılarında neleri vermeliyim?

Tüketicinin başka bir modüle girdi olarak vereceği ya da operasyonda ihtiyaç duyacağı değerleri: kimlikler, adresler, adlar. Modülün iç kaynaklarının bütün niteliklerini dışarı açmak, tüketicileri iç yapıya bağımlı kılar ve ileride iç yapıyı değiştirmeyi zorlaştırır.

Hazır modüller kullanmak mı, kendi modülümü yazmak mı?

Topluluk modülleri hızlı başlamak için faydalıdır, ancak sürümü sabitleyip içeriğini incelemek gerekir. Yayımlayanın bakım düzenine de bakmak iyi olur. Kuruma özgü güvenlik ve etiket kuralları varsa, bu kuralları içeren kendi modülünüzü yazmak daha kontrollüdür. Ekipler sıklıkla ikisini birlikte kullanır.

Terraform Modülü Nasıl Yazılır? Yapı ve State Yönetimi