Moduly Terraform

Moduly Terraform



Vo svete poskytovania a správy infraštruktúry sa Terraform ukázal ako populárna voľba medzi vývojármi a prevádzkovými tímami. Vďaka svojej deklaratívnej syntaxi (HCL – HashiCorp Configuration Language) a podpore pre rôznych poskytovateľov infraštruktúry umožňuje Terraform praktiky infraštruktúry ako kódu (IaC).

Jednou z jeho kľúčových vlastností je použitie modulov, ktoré umožňujú vytvárať a opätovne používať modulárny kód infraštruktúry. V tomto článku sa pozrieme na koncept modulov Terraform a na to, ako môžu pomôcť zorganizovať a zjednodušiť náš kód infraštruktúry.







Úvod do modulov Terraform

Moduly Terraform sú samostatné balíky konfigurácií Terraform, ktoré predstavujú sadu zdrojov s definovanými vstupnými a výstupnými premennými. Poskytujú spôsob na zapuzdrenie a opätovné použitie kódu infraštruktúry, čo uľahčuje správu a údržbu nasadenia komplexnej infraštruktúry.



Moduly je možné vytvárať a používať interne v rámci projektu alebo zdieľať v rámci viacerých projektov alebo tímov.



Organizácia modulu

Pri organizovaní modulov Terraform je bežné mať hierarchickú štruktúru, ktorá pozostáva z koreňových a podradených modulov. Pozrime sa, ako táto organizácia funguje.





Koreňový modul



Koreňový modul predstavuje modul najvyššej úrovne v našej konfigurácii Terraform. Je to vstupný bod pre definovanie celkovej infraštruktúry a riadenie vzťahov medzi rôznymi zdrojmi.

Koreňový modul zvyčajne obsahuje súbor „main.tf“, v ktorom definujeme zdroje a konfigurácie, ktoré tvoria základ našej infraštruktúry. Voliteľne s ním môžeme mať súbory „variables.tf“ a „outputs.tf“. Taktiež môžeme definovať náš adresár „modules“ v koreňovom adresári, aby sme mali jednoduchý prístup k podradeným modulom.

Detské moduly

Detské moduly sú modulárne komponenty, ktoré zapuzdrujú špecifické súbory zdrojov alebo konfigurácií. Sú navrhnuté tak, aby boli opakovane použiteľné a predstavujú samostatné jednotky funkčnosti infraštruktúry.

Detské moduly môžu byť použité v rámci koreňového alebo iných podradených modulov, ktoré umožňujú kompozíciu a komplexné budovanie infraštruktúry. Každý podradený modul má zvyčajne svoj adresár, ktorý obsahuje potrebné konfiguračné súbory, ako napríklad „main.tf“, „variables.tf“ a „outputs.tf“.

Teraz sa pozrime, ako môžeme vytvoriť modul Terraform.

Vytvorenie modulu Terraform

Pri vytváraní modulov Terraform musíme pre modul vytvoriť nový adresár s požadovanými konfiguračnými súbormi Terraform. Zvyčajne sa tento adresár nazýva „moduly“. Jeho definovanie v koreňovom adresári nášho projektu je osvedčeným postupom.

Uveďme si jednoduchý príklad jednoduchého modulu na poskytovanie lokálneho webového servera pomocou Dockera. Najprv definujeme modul v adresári „modules“ ako „main.tf“.

zdroj 'docker_container' 'webový server' {
name  = var.name
obrázok = var.obrázok
prístavov {
interné = var.internal_port
external = var.external_port
}
}

Tu vytvoríme modul s názvom „docker_container“, ktorý berie ako vstupné premenné názov kontajnera, obrázok Docker, interný port a externý port. Modul zapuzdruje logiku na vytvorenie prostriedku kontajnera Docker a umožňuje volajúcemu prispôsobiť vlastnosti kontajnera.

Ako ukazuje nasledujúci obrázok, vytvoríme samostatný súbor s názvom „variables.tf“ v adresári „modules“, aby sme definovali vstupné premenné, ktoré je možné prispôsobiť pri používaní modulu:

premenlivý 'názov' {
popis = 'Názov kontajnera Docker'
typu = reťazec
}

premenlivý 'obrázok' {
popis = 'Obrázok dockera'
typu = reťazec
}

premenlivý 'interny_port' {
popis = 'Interný port na kontajneri Docker'
typu = číslo
}

premenlivý 'external_port' {
popis = 'Externý port na mapovanie'
typu = číslo
}

Tu sme deklarovali štyri premenné, každú s „popisom“ a „typom“ ako atribútmi a relevantnými hodnotami.

Použitie modulu Terraform

Keďže sme vytvorili náš modul, môžeme ho teraz použiť v našej hlavnej konfigurácii Terraform odkazovaním na jeho zdroj. Urobme náš hlavný konfiguračný súbor, ktorý je „main.tf“ v koreňovom adresári.

modul 'webserver_container' {
zdroj = '../modules/docker_container'
meno            = 'môj webový server'
obrázok           = 'nginx:najnovšie'
interný_port   = 80
externý_port   = 8080
}

Na vytvorenie inštancie kontajnerového modulu Docker používame blok „modul“ v predchádzajúcom kóde. Poskytujeme potrebné vstupné hodnoty pre modul, ako je názov kontajnera, obrázok Docker a konfigurácia portu. Parameter „source“ určuje relatívnu cestu k adresáru „module“.

Ďalej sa pozrime, ako používať výstupy Terraform na použitie s modulmi.

Výstupy modulu

Modulové výstupy v Terraforme poskytujú spôsob, ako odhaliť špecifické hodnoty z modulu, čím ich sprístupnia na použitie v hlavnej konfigurácii alebo v iných moduloch. Slúžia ako komunikačný kanál medzi modulom a volajúcim, ktorý umožňuje modulu poskytnúť informácie alebo údaje, ktoré môžu byť užitočné alebo potrebné pre ďalšiu konfiguráciu alebo rozhodovanie.

výkon 'container_id' {
popis = 'ID vytvoreného kontajnera Docker'
hodnota       = docker_container.webserver.id
}

Tu sme vytvorili súbor „outputs.tf“ v adresári „modules“. Táto výstupná premenná odhaľuje ID kontajnera Docker, ktorý je vytvorený prostriedkom „docker_container“ s názvom „webový server“ v rámci modulu.

Teraz máme prístup k ID kontajnera v našom koreňovom konfiguračnom súbore. Pozrite si nasledujúci aktualizovaný kód súboru „main.tf“ v koreňovom adresári:

modul 'webserver_container' {
zdroj = '../modules/docker_container'
meno            = 'môj webový server'
obrázok           = 'nginx:najnovšie'
interný_port   = 80
externý_port   = 8080
}

zdroj 'docker_volume' 'údaje' {
# Ostatné argumenty sú tu
viazať = module.webserver_container.container_id
}

Použitím „module.webserver_container.container_id“ ako hodnoty pre argument „bind“ dávame Terraformu pokyn, aby naviazal zväzok Docker na miesto, ktoré je určené ID kontajnera modulu „web_container“. Tým sa vytvorí vzťah medzi prostriedkom zväzku Docker a kontajnerom, ktorý je vytvorený modulom „webserver_container“, čím sa zabezpečí, že zväzok bude pripojený na vhodné miesto.

Najlepšie postupy pre moduly Terraform

Modularizácia pre opätovné použitie

Pri navrhovaní modulov by sme mali zvážiť opätovnú použiteľnosť. Tiež musíme identifikovať logické komponenty alebo vzory našej infraštruktúry a zapuzdreť ich do samostatných modulov. To podporuje opätovné použitie kódu, štandardizáciu a jednoduchšiu spoluprácu medzi tímami.

Jasné a konzistentné pomenovanie

Použitie jasných a konzistentných konvencií pomenovania pre moduly, premenné a zdroje zlepšuje čitateľnosť a pochopenie kódovej základne, čo ostatným uľahčuje prácu s modulmi a ich údržbu.

Izolujte závislosti

Musíme sa vyhnúť tesnému spojeniu medzi modulmi. Každý modul by mal zahŕňať svoje vlastné zdroje a závislosti. To zaisťuje, že moduly možno opätovne použiť nezávisle a podporuje lepšiu izoláciu a zapuzdrenie.

Kontrola verzií a register modulov

Naše moduly môžeme publikovať do archívu alebo registra modulov s riadenou verziou. To poskytuje centralizované miesto na zdieľanie a objavovanie modulov, čo zaisťuje jednoduchý prístup a vytváranie verzií.

Záver

Stručne sme predstavili moduly Terraform a na jednoduchom príklade sme sa naučili, ako ich vytvoriť. Potom sme sa pozreli na to, ako používať premenné a výstupy s naším modulom na zvýšenie jeho flexibility, opätovnej použiteľnosti a udržiavateľnosti. Na záver, moduly Terraform sú výkonnými nástrojmi na organizáciu a zjednodušenie kódu infraštruktúry. Umožňujú nám zapuzdriť súbor zdrojov alebo konfigurácií do opakovane použiteľných komponentov, ktoré podporujú modularitu, opätovnú použiteľnosť a spoluprácu v rámci našich projektov infraštruktúry ako kódu.