Bugün terraform mimarisinde modül yapılarını konfigürasyon dasyalarınızda nasıl kullanabileceğinizden bahsedeceğim.
Module tekrardan kulanılabilecek resource’ları barındıran konteynıra verilen isimdir. Modülleri kullanarak kolaylıkla advanced alt yapılar oluşturabilirsiniz. Oluşturduğunuz yapılarda modüller diğer modülleri çağırabilir. Hatta birisinin output değeri diğerinin input değeri olabilir.
Genelde modüllerin hepsi tüm konfigürasyon birimlerinde kullanılabilecek şekilde dizayn edilmişlerdir. Örneğin,
- Input Değişkenleri : Kendilerini çağıran modüllerden değer alabilirler.
- Output değişkenleri : Kendilerini çağıran modüllere sonuç dönebilirler.
- Resource’lar : Modülün yönettiği altyapı bileşenlerini tanımlamak için bir yada daha çok kez modülleri kullanabilirler.
Bir modülü tanımlamak için öncelikle ona bir directory oluşturmak gerekir. Daha sonra ilişkili olan tüm .tf uzantılı dosyalar bu directory içerisine atılabilir. Modüller birbirini çağıracak şekilde konfigüre edilebilirler. Bu durum kullanım şekline göre değişiklik gösterebilir. Ancak önerilen konfigürasyon, modüllerin bireysel olarak tekrarlanacak şekilde kullanılabilmesidir. Bu sebeple farklı kombinasyonlarda modülleri kompozisyonlar halinde kullanmak daha yerinde olacaktır. Bunu da modül tree’lerini düz olarak konfigüre ederek sağlayabilirsiniz. Aşağıda modül kompozisyonuna ait bir örneği görebilirsiniz.
Resim-1
Tabi modül kullanımı yapılacağı zaman ne ölçüde yapılacağının da belirlenmesi gerekir. Çok fazla modül kullanımı bir süre sonra içinden çıkılamayacak karmaşıklığı da beraberinde getirecektir. Hatta modüllerin aşırı kullanımı sorun çözme aşamalarında konfigürasyonların anlaşılmasını da zorlaştıracaktır. Bu sebeple modüllerin ölçülü olarak kullanılması önerilmektedir. Örneğin x bir sisteme ait konfigürasyonun bileşenlerinin belirli bir provider üzerinde konfigüre edilmesini bir modül olarak yapılandırabilirsiniz.
Modüller temelde standart yada nested(iç içe) şekilde yapılandırılabilirler. Burada main,outputs ve variables dosyaları aynı dizinde tutulur. Bir de modülün kullanımına ilişkin bilgileri içeren README dosyasının burada yer alması önerilir. Farklı bir directory’de tutulduğu için tekrar tekrar kullanılabilirler.
Nested modüllerde ise yapı biraz daha komplekstir. Aslında yine standart modüldeki gibi ana dizinde main,outputs ve variables dosyaları bulunur. README dosyasının da bulunması önerilir. Ancak bu dizinde modules isimli bir dizin daha bulunur ve nested olan modüller bu dizin altında ayrı ayrı dizinlerde tutulurlar. Aşağıdaki dizinde examples isimli bir dizin de bulunur. Bu dizin modülün kullanımına ilişkin örneklerin bulunduğu konfigürasyon dosyalarını içerir. Bunun olmasının sebebi buradan kopya alıp editleyip kendi konfigürasyonlarınızı oluşturmanız içindir.
Resim-2
Yukarıdaki yapıda ana konfigürasyon dosyasından nested olan modülleri çağırmak için ./modules/netedA şeklinde relative path kullanmanız yeterli olacaktır.
Bir modüle içerisinden diğer bir modulu çağırmak için de “Source” attribute’unu kullanmanız yeterli olacaktır.
Ayrıntılı bilgi için aşağıdaki kaynak linklerinden faydalanabilirsiniz.
Bu konuyla ilgili sorularınızı alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.
Referanslar
https://www.terraform.io/docs/configuration/variables.html
https://www.terraform.io/docs/providers/azurerm/index.html
TAGs: Terraform, Terraform nedir, terraform nasıl kullanılır, Infrastructure as a code, IAC, Compliance management, Auto remediation, Deploy Azure Resource with terraform, Deploy configuration with terraform, configuration as a code, terraform overview, terraform basics, Azure with terraform, deploy resources to azure with terraform, terraform.exe, Update resources with terraform, Azure Resource manager, ARM, Terraform variabes, terraform map variables