Terraform moduli

Terraform Moduli



U svijetu pružanja i upravljanja infrastrukturom, Terraform se pojavio kao popularan izbor među programerima i operativnim timovima. Sa svojom deklarativnom sintaksom (HCL – HashiCorp Configuration Language) i podrškom za različite pružatelje infrastrukture, Terraform omogućuje prakse infrastrukture kao koda (IaC).

Jedna od njegovih ključnih značajki je korištenje modula koji omogućuju stvaranje i ponovnu upotrebu koda modularne infrastrukture. U ovom ćemo članku istražiti koncept Terraform modula i kako oni mogu pomoći organizirati i pojednostaviti naš infrastrukturni kod.







Uvod u Terraform module

Terraform moduli su samostalni paketi Terraform konfiguracija koje predstavljaju skup resursa s definiranim ulaznim i izlaznim varijablama. Oni pružaju način za kapsuliranje i ponovnu upotrebu infrastrukturnog koda što olakšava upravljanje i održavanje složenih infrastrukturnih implementacija.



Moduli se mogu kreirati i koristiti interno unutar projekta ili dijeliti u više projekata ili timova.



Organizacija modula

Kada se organiziraju Terraform moduli, uobičajeno je imati hijerarhijsku strukturu koja se sastoji od korijenskih i podređenih modula. Istražimo kako ova organizacija funkcionira.





Korijenski modul



Korijenski modul predstavlja modul najviše razine u našoj Terraform konfiguraciji. To je ulazna točka za definiranje ukupne infrastrukture i upravljanje odnosima između različitih resursa.

Korijenski modul obično sadrži datoteku 'main.tf' u kojoj definiramo resurse i konfiguracije koje čine temelj naše infrastrukture. Opcionalno, uz njega možemo imati datoteke 'variables.tf' i 'outputs.tf'. Također, možemo definirati naš direktorij 'moduli' unutar korijenskog direktorija kako bismo lako pristupili podređenim modulima.

Podređeni moduli

Podređeni moduli su modularne komponente koje sadrže specifične skupove resursa ili konfiguracija. Dizajnirani su za višekratnu upotrebu i predstavljaju samostalne jedinice funkcionalnosti infrastrukture.

Podređeni moduli mogu se koristiti unutar korijena ili drugih podređenih modula koji omogućuju sastavljanje i izgradnju složene infrastrukture. Svaki podređeni modul obično ima svoj direktorij koji sadrži potrebne konfiguracijske datoteke kao što su “main.tf”, “variables.tf” i “outputs.tf”.

Pogledajmo sada kako možemo stvoriti Terraform modul.

Stvaranje Terraform modula

Prilikom izrade Terraform modula, moramo napraviti novi direktorij za modul sa potrebnim Terraform konfiguracijskim datotekama. Obično se taj direktorij naziva 'moduli'. Definiranje unutar korijenskog direktorija našeg projekta najbolja je praksa.

Uzmimo jednostavan primjer jednostavnog modula za pružanje lokalnog web poslužitelja pomoću Dockera. Prvo definiramo modul u direktoriju “modules” kao “main.tf”.

resurs 'docker_container' 'web poslužitelj' {
naziv  = naziv var
slika = var.slika
luke {
unutarnji = var.unutarnji_port
vanjski = var.external_port
}
}

Ovdje stvaramo modul pod nazivom 'docker_container' koji uzima naziv spremnika, Docker sliku, unutarnji priključak i vanjski priključak kao ulazne varijable. Modul sažima logiku za stvaranje resursa spremnika Docker i omogućuje pozivatelju da prilagodi svojstva spremnika.

Kao što je prikazano na sljedećoj slici, stvaramo zasebnu datoteku pod nazivom 'variables.tf' u direktoriju 'modules' kako bismo definirali ulazne varijable koje se mogu prilagoditi pri korištenju modula:

varijabla 'Ime' {
opis = 'Naziv docker spremnika'
tip = niz
}

varijabla 'slika' {
opis = 'Docker slika'
tip = niz
}

varijabla 'unutarnji_port' {
opis = 'Interni priključak na Docker spremniku'
tip = broj
}

varijabla 'vanjski_port' {
opis = 'Vanjski port za mapiranje'
tip = broj
}

Ovdje smo deklarirali četiri varijable, svaka s 'opisom' i 'tipom' kao atributima i relevantnim vrijednostima za njih.

Korištenje Terraform modula

Budući da smo izradili naš modul, sada ga možemo koristiti u našoj glavnoj konfiguraciji Terraforma pozivajući se na njegov izvor. Napravimo našu glavnu konfiguracijsku datoteku koja je 'main.tf' u korijenskom direktoriju.

modul 'webserver_container' {
izvor = '../modules/docker_container'
ime            = 'moj webposlužitelj'
slika           = 'nginx:najnovije'
unutarnji_port   = 80
vanjski_priključak   = 8080
}

Koristimo blok 'modul' u prethodnom kodu za instanciranje modula spremnika Docker. Dajemo potrebne ulazne vrijednosti za modul kao što su naziv spremnika, Docker slika i konfiguracija porta. Parametar “source” navodi relativni put do direktorija “modula”.

Zatim, pogledajmo kako koristiti Terraform izlaze za korištenje s modulima.

Izlazi modula

Izlazi modula u Terraformu pružaju način izlaganja određenih vrijednosti unutar modula, čineći ih dostupnima za korištenje u glavnoj konfiguraciji ili drugim modulima. Oni služe kao komunikacijski kanal između modula i pozivatelja koji omogućuje modulu da pruži informacije ili podatke koji mogu biti korisni ili potrebni za daljnju konfiguraciju ili donošenje odluka.

izlaz 'id_spremnika' {
opis = 'ID stvorenog Docker spremnika'
vrijednost       = docker_container.webserver.id
}

Ovdje smo stvorili datoteku 'outputs.tf' unutar direktorija 'modules'. Ova izlazna varijabla otkriva ID Docker spremnika koji je kreiran resursom 'docker_container' pod nazivom 'web-poslužitelj' unutar modula.

Sada možemo pristupiti ID-u spremnika u našoj root konfiguracijskoj datoteci. Pogledajte sljedeći ažurirani kod datoteke 'main.tf' u korijenskom direktoriju:

modul 'webserver_container' {
izvor = '../modules/docker_container'
ime            = 'moj webposlužitelj'
slika           = 'nginx:najnovije'
unutarnji_port   = 80
vanjski_priključak   = 8080
}

resurs 'docker_volumen' 'podaci' {
# Ostatak argumenata ide ovdje
vezati = modul.webserver_container.container_id
}

Korištenjem “module.webserver_container.container_id” kao vrijednosti za argument “bind”, upućujemo Terraform da veže Docker volumen na lokaciju koja je navedena ID-om spremnika modula “web_container”. Ovo uspostavlja odnos između resursa volumena Docker i spremnika koji je kreiran modulom 'webserver_container', osiguravajući da je volumen montiran na odgovarajuće mjesto.

Najbolji primjeri iz prakse za Terraform module

Modularizacija za višekratnu upotrebu

Prilikom projektiranja modula trebali bismo uzeti u obzir mogućnost ponovne upotrebe. Također, moramo identificirati logičke komponente ili obrasce naše infrastrukture i kapsulirati ih u zasebne module. To promiče ponovnu upotrebu koda, standardizaciju i lakšu suradnju među timovima.

Jasno i dosljedno imenovanje

Korištenje jasnih i dosljednih konvencija imenovanja za module, varijable i resurse poboljšava čitljivost i razumijevanje baze koda što drugima olakšava rad s modulima i njihovo održavanje.

Izolirajte ovisnosti

Moramo izbjegavati čvrstu vezu između modula. Svaki modul treba sadržavati vlastite resurse i ovisnosti. To osigurava da se moduli mogu ponovno neovisno koristiti i promiče bolju izolaciju i kapsulaciju.

Kontrola verzija i registar modula

Svoje module možemo objaviti u repozitoriju kontroliranom verzijom ili registru modula. Ovo pruža centralizirano mjesto za dijeljenje i otkrivanje modula, osiguravajući jednostavan pristup i upravljanje verzijama.

Zaključak

Ukratko smo se upoznali s Terraform modulima i naučili kako ih izraditi na jednostavnom primjeru. Zatim smo pogledali kako koristiti varijable i izlaze s našim modulom kako bismo poboljšali njegovu fleksibilnost, mogućnost ponovne upotrebe i održavanje. Zaključno, Terraform moduli su moćni alati za organiziranje i pojednostavljenje infrastrukturnog koda. Oni nam omogućuju kapsuliranje skupa resursa ili konfiguracija u komponente koje se mogu ponovno koristiti promičući modularnost, mogućnost ponovne upotrebe i suradnju unutar naših projekata infrastrukture kao koda.