Terraform Modülleri

Terraform Modulleri



Altyapı sağlama ve yönetim dünyasında Terraform, geliştiriciler ve operasyon ekipleri arasında popüler bir seçim haline geldi. Bildirime dayalı sözdizimi (HCL – HashiCorp Yapılandırma Dili) ve çeşitli altyapı sağlayıcıları için desteğiyle Terraform, kod olarak altyapı (IaC) uygulamalarını mümkün kılar.

Temel özelliklerinden biri, modüler altyapı kodunun oluşturulmasına ve yeniden kullanılmasına izin veren modüllerin kullanılmasıdır. Bu makalede, Terraform modülleri kavramını ve altyapı kodumuzu düzenlemeye ve basitleştirmeye nasıl yardımcı olabileceklerini keşfedeceğiz.







Terraform Modüllerine Giriş

Terraform modülleri, tanımlanmış girdi ve çıktı değişkenleriyle bir dizi kaynağı temsil eden Terraform konfigürasyonlarının kendi kendine yeten paketleridir. Karmaşık altyapı dağıtımlarının yönetimini ve bakımını kolaylaştıran altyapı kodunu kapsüllemenin ve yeniden kullanmanın bir yolunu sağlarlar.



Modüller, bir proje içinde dahili olarak oluşturulabilir ve kullanılabilir veya birden çok proje veya ekip arasında paylaşılabilir.



Modülün Organizasyonu

Terraform modüllerini düzenlerken, kök ve alt modüllerden oluşan hiyerarşik bir yapıya sahip olmak yaygındır. Bu organizasyonun nasıl çalıştığını keşfedelim.





Kök Modülü



Kök modül, Terraform konfigürasyonumuzdaki en üst düzey modülü temsil eder. Genel altyapıyı tanımlamak ve farklı kaynaklar arasındaki ilişkileri yönetmek için giriş noktasıdır.

Kök modül tipik olarak, altyapımızın temelini oluşturan kaynakları ve yapılandırmaları tanımladığımız “main.tf” dosyasını içerir. İsteğe bağlı olarak “variables.tf” ve “outputs.tf” dosyalarına sahip olabiliriz. Ayrıca, alt modüllere kolayca erişmek için “modüller” dizinimizi kök dizin içinde tanımlayabiliriz.

Çocuk Modülleri

Alt modüller, belirli kaynak kümelerini veya yapılandırmaları içine alan modüler bileşenlerdir. Yeniden kullanılabilir olacak şekilde tasarlanmıştır ve altyapı işlevselliğinin bağımsız birimlerini temsil eder.

Alt modüller, kök veya diğer alt modüller içinde kullanılabilir, bu da kompozisyona ve karmaşık altyapı oluşturmaya izin verir. Her alt modül tipik olarak 'main.tf', 'variables.tf' ve 'outputs.tf' gibi gerekli yapılandırma dosyalarını içeren kendi dizinine sahiptir.

Şimdi Terraform modülünü nasıl oluşturabileceğimize bakalım.

Terraform Modülü Oluşturma

Terraform modülleri oluştururken gerekli Terraform konfigürasyon dosyaları ile modül için yeni bir dizin oluşturmalıyız. Genellikle, bu dizine 'modüller' adı verilir. Bunu projemizin kök dizininde tanımlamak en iyi uygulamadır.

Docker kullanarak yerel bir web sunucusu sağlamak için basit bir modülün kolay bir örneğini ele alalım. Öncelikle “modules” dizinindeki modülü “main.tf” olarak tanımlıyoruz.

kaynak 'docker_container' 'Web sunucusu' {
ad  = var.adı
resim = var.resim
bağlantı noktaları {
dahili = var.internal_port
harici = var.external_port
}
}

Burada “docker_container” adında, container adını, Docker imajını, dahili port ve harici portu giriş değişkenleri olarak alan bir modül oluşturuyoruz. Modül, bir Docker kapsayıcı kaynağı oluşturma mantığını kapsüller ve arayanın kapsayıcının özelliklerini özelleştirmesine izin verir.

Aşağıdaki görüntüde gösterildiği gibi, modülü kullanırken özelleştirilebilen giriş değişkenlerini tanımlamak için “modules” dizininde “variables.tf” adında ayrı bir dosya oluşturuyoruz:

değişken 'isim' {
açıklama = 'Docker konteyner adı'
tip = dizi
}

değişken 'resim' {
açıklama = 'Docker görüntüsü'
tip = dizi
}

değişken 'dahili_port' {
açıklama = 'Docker kapsayıcısındaki dahili bağlantı noktası'
tip = sayı
}

değişken 'harici_port' {
açıklama = 'Eşlenecek harici bağlantı noktası'
tip = sayı
}

Burada, her biri nitelik olarak 'açıklama' ve 'tür' içeren ve bunlarla ilgili değerleri içeren dört değişken bildirdik.

Terraform Modülü Kullanma

Modülümüzü oluşturduğumuza göre artık kaynağına başvurarak ana Terraform konfigürasyonumuzda kullanabiliriz. Kök dizinde “main.tf” olan ana konfigürasyon dosyamızı yapalım.

modül 'web sunucusu_kapsayıcı' {
kaynak = '../modüller/docker_container'
ad            = 'web sunucum'
resim           = 'nginx:en son'
dahili_port   = 80
harici_port   = 8080
}

Docker container modülünü somutlaştırmak için önceki koddaki “module” bloğunu kullanıyoruz. Kapsayıcı adı, Docker görüntüsü ve port yapılandırması gibi modül için gerekli giriş değerlerini sağlıyoruz. 'source' parametresi, 'module' dizinine giden göreli yolu belirtir.

Ardından, Terraform çıktılarının modüllerle nasıl kullanılacağını görelim.

Modül Çıkışları

Terraform'daki modül çıkışları, bir modülün içindeki belirli değerleri açığa çıkarmanın bir yolunu sağlayarak, bunları ana konfigürasyonda veya diğer modüller tarafından kullanılabilir hale getirir. Modül ve arayan arasında, modülün daha fazla yapılandırma veya karar verme için yararlı veya gerekli olabilecek bir bilgi veya veri sağlamasına izin veren bir iletişim kanalı olarak hizmet ederler.

çıktı 'container_id' {
açıklama = 'Oluşturulan Docker kapsayıcısının kimliği'
değer       = docker_container.webserver.id
}

Burada “modules” dizini içerisinde bir “outputs.tf” dosyası oluşturduk. Bu çıktı değişkeni, modül içinde 'webserver' adlı 'docker_container' kaynağı tarafından oluşturulan Docker kapsayıcısının kimliğini gösterir.

Artık kök yapılandırma dosyamızda kapsayıcı kimliğine erişebiliriz. Kök dizindeki “main.tf” dosyasının aşağıdaki güncellenmiş koduna bakın:

modül 'web sunucusu_kapsayıcı' {
kaynak = '../modüller/docker_container'
ad            = 'web sunucum'
resim           = 'nginx:en son'
dahili_port   = 80
harici_port   = 8080
}

kaynak 'docker_hacim' 'veri' {
# Argümanların geri kalanı buraya gelir
bağlamak = module.webserver_container.container_id
}

'module.webserver_container.container_id' değerini 'bind' argümanının değeri olarak kullanarak, Terraform'a Docker birimini 'web_container' modülünün kapsayıcı kimliği tarafından belirtilen konuma bağlaması talimatını veriyoruz. Bu, Docker birim kaynağı ile “webserver_container” modülü tarafından oluşturulan kapsayıcı arasında bir ilişki kurarak, birimin uygun konuma monte edilmesini sağlar.

Terraform Modülleri için En İyi Uygulamalar

Yeniden Kullanılabilirlik için Modülerleştirin

Modülleri tasarlarken tekrar kullanılabilirliği dikkate almalıyız. Ayrıca, altyapımızın mantıksal bileşenlerini veya kalıplarını tanımlamalı ve bunları ayrı modüller halinde kapsüllemeliyiz. Bu, kodların yeniden kullanımını, standardizasyonu ve ekipler arasında daha kolay işbirliğini teşvik eder.

Net ve Tutarlı Adlandırma

Modüller, değişkenler ve kaynaklar için açık ve tutarlı adlandırma kuralları kullanmak, başkalarının modüllerle çalışmasını ve bakımını yapmasını kolaylaştıran kod tabanının okunabilirliğini ve anlaşılmasını geliştirir.

Bağımlılıkları İzole Et

Modüller arasında sıkı bağlantıdan kaçınmalıyız. Her modül kendi kaynaklarını ve bağımlılıklarını kapsamalıdır. Bu, modüllerin bağımsız olarak yeniden kullanılabilmelerini sağlar ve daha iyi izolasyon ve kapsülleme sağlar.

Sürüm Kontrolü ve Modül Kaydı

Modüllerimizi sürüm kontrollü bir havuzda veya modül kayıt defterinde yayınlayabiliriz. Bu, modülleri paylaşmak ve keşfetmek için merkezi bir konum sağlayarak kolay erişim ve sürüm oluşturma sağlar.

Çözüm

Terraform modüllerine kısa bir giriş yaptık ve basit bir örnekle nasıl oluşturulacağını öğrendik. Ardından, esnekliğini, yeniden kullanılabilirliğini ve sürdürülebilirliğini geliştirmek için modülümüzle değişkenleri ve çıktıları nasıl kullanacağımıza baktık. Sonuç olarak, Terraform modülleri, altyapı kodunu düzenlemek ve basitleştirmek için güçlü araçlardır. Kod olarak altyapı projelerimizde modülerliği, yeniden kullanılabilirliği ve işbirliğini destekleyen bir dizi kaynağı veya yapılandırmayı yeniden kullanılabilir bileşenler halinde kapsüllememize olanak tanırlar.