Terraform moduli

Terraform Moduli



V svetu zagotavljanja in upravljanja infrastrukture je Terraform postal priljubljena izbira med razvijalci in operativnimi ekipami. Terraform s svojo deklarativno sintakso (HCL – HashiCorp Configuration Language) in podporo za različne ponudnike infrastrukture omogoča prakse infrastrukture kot kode (IaC).

Ena njegovih ključnih lastnosti je uporaba modulov, ki omogočajo ustvarjanje in ponovno uporabo kode modularne infrastrukture. V tem članku bomo raziskali koncept modulov Terraform in kako lahko pomagajo organizirati in poenostaviti našo infrastrukturno kodo.







Uvod v module Terraform

Moduli Terraform so samostojni paketi konfiguracij Terraform, ki predstavljajo niz virov z definiranimi vhodnimi in izhodnimi spremenljivkami. Zagotavljajo način za inkapsulacijo in ponovno uporabo infrastrukturne kode, kar olajša upravljanje in vzdrževanje kompleksnih uvedb infrastrukture.



Module je mogoče ustvariti in uporabiti interno znotraj projekta ali jih deliti v več projektih ali skupinah.



Organizacija modula

Pri organiziranju modulov Terraform je običajno hierarhična struktura, ki je sestavljena iz korenskih in podrejenih modulov. Raziščimo, kako ta organizacija deluje.





Korenski modul



Korenski modul predstavlja modul najvišje ravni v naši konfiguraciji Terraform. Je vstopna točka za definiranje celotne infrastrukture in upravljanje odnosov med različnimi viri.

Korenski modul običajno vsebuje datoteko »main.tf«, kjer definiramo vire in konfiguracije, ki tvorijo temelj naše infrastrukture. Po želji lahko imamo z njim datoteki 'variables.tf' in 'outputs.tf'. Prav tako lahko določimo svoj imenik »moduli« znotraj korenskega imenika za enostaven dostop do podrejenih modulov.

Podrejeni moduli

Podrejeni moduli so modularne komponente, ki zajemajo določene nize virov ali konfiguracij. Zasnovani so tako, da jih je mogoče ponovno uporabiti in predstavljajo samostojne enote funkcionalnosti infrastrukture.

Podrejene module je mogoče uporabiti znotraj korenskih ali drugih podrejenih modulov, ki omogočajo sestavljanje in gradnjo kompleksne infrastrukture. Vsak podrejeni modul ima običajno svoj imenik, ki vsebuje potrebne konfiguracijske datoteke, kot so »main.tf«, »variables.tf« in »outputs.tf«.

Zdaj pa poglejmo, kako lahko ustvarimo modul Terraform.

Ustvarjanje modula Terraform

Ko ustvarjamo module Terraform, moramo narediti nov imenik za modul z zahtevanimi konfiguracijskimi datotekami Terraform. Običajno se ta imenik imenuje 'moduli'. Definiranje znotraj korenskega imenika našega projekta je najboljša praksa.

Vzemimo preprost primer preprostega modula za zagotavljanje lokalnega spletnega strežnika z uporabo Dockerja. Najprej definiramo modul v imeniku »modules« kot »main.tf«.

vir 'docker_container' 'spletni strežnik' {
ime  = var.ime
slika = var.slika
pristanišča {
notranji = var.notranja_vrata
zunanji = var.external_port
}
}

Tukaj ustvarimo modul z imenom »docker_container«, ki kot vhodne spremenljivke sprejme ime vsebnika, sliko Dockerja, notranja vrata in zunanja vrata. Modul zajema logiko za ustvarjanje vira vsebnika Docker in omogoča klicatelju, da prilagodi lastnosti vsebnika.

Kot je prikazano na naslednji sliki, ustvarimo ločeno datoteko z imenom »variables.tf« v imeniku »modules«, da definiramo vhodne spremenljivke, ki jih je mogoče prilagoditi pri uporabi modula:

spremenljivka 'ime' {
opis = 'Ime vsebnika Docker'
vrsta = niz
}

spremenljivka 'slika' {
opis = 'Docker slika'
vrsta = niz
}

spremenljivka 'notranja_vrata' {
opis = 'Notranja vrata na vsebniku Docker'
vrsta = število
}

spremenljivka 'zunanja_vrata' {
opis = 'Zunanja vrata za preslikavo'
vrsta = število
}

Tu smo deklarirali štiri spremenljivke, vsaka z »opisom« in »tipom« kot atributoma in ustreznimi vrednostmi zanje.

Uporaba modula Terraform

Ker smo ustvarili naš modul, ga lahko zdaj uporabimo v naši glavni konfiguraciji Terraform tako, da se sklicujemo na njegov izvor. Naredimo našo glavno konfiguracijsko datoteko, ki je 'main.tf' v korenskem imeniku.

modul 'spletni strežnik_vsebnik' {
vir = '../modules/docker_container'
ime            = 'moj spletni strežnik'
slika           = 'nginx: najnovejše'
notranja_vrata   = 80
zunanja_vrata   = 8080
}

Blok »modul« v prejšnji kodi uporabljamo za instanco modula vsebnika Docker. Zagotovimo potrebne vhodne vrednosti za modul, kot so ime vsebnika, slika Dockerja in konfiguracija vrat. Parameter »source« določa relativno pot do imenika »modul«.

Nato si poglejmo, kako uporabiti izhode Terraform za uporabo z moduli.

Izhodi modula

Izhodi modulov v Terraformu zagotavljajo način za izpostavitev določenih vrednosti znotraj modula, tako da so na voljo za uporabo v glavni konfiguraciji ali drugih modulih. Služijo kot komunikacijski kanal med modulom in klicateljem, ki modulu omogoča, da posreduje informacije ali podatke, ki so lahko uporabni ali potrebni za nadaljnjo konfiguracijo ali odločanje.

izhod 'id_vsebnika' {
opis = 'ID ustvarjenega vsebnika Docker'
vrednost       = docker_container.webserver.id
}

Tukaj smo ustvarili datoteko »outputs.tf« znotraj imenika »modules«. Ta izhodna spremenljivka izpostavi ID vsebnika Docker, ki ga ustvari vir »docker_container« z imenom »spletni strežnik« znotraj modula.

Zdaj lahko dostopamo do ID-ja vsebnika v naši korenski konfiguracijski datoteki. Glejte naslednjo posodobljeno kodo datoteke »main.tf« v korenskem imeniku:

modul 'spletni strežnik_vsebnik' {
vir = '../modules/docker_container'
ime            = 'moj spletni strežnik'
slika           = 'nginx: najnovejše'
notranja_vrata   = 80
zunanja_vrata   = 8080
}

vir 'docker_volume' 'podatki' {
# Ostali argumenti so tukaj
vezati = module.webserver_container.container_id
}

Z uporabo »module.webserver_container.container_id« kot vrednosti za argument »bind« ukažemo Terraformu, naj veže nosilec Docker na lokacijo, ki jo določa ID vsebnika modula »web_container«. To vzpostavi razmerje med virom nosilca Docker in vsebnikom, ki ga ustvari modul »webserver_container«, s čimer se zagotovi, da je nosilec nameščen na ustreznem mestu.

Najboljše prakse za module Terraform

Modularizacija za ponovno uporabo

Pri načrtovanju modulov moramo upoštevati možnost ponovne uporabe. Prav tako moramo identificirati logične komponente ali vzorce naše infrastrukture in jih zajeti v ločene module. To spodbuja ponovno uporabo kode, standardizacijo in lažje sodelovanje med ekipami.

Jasno in dosledno poimenovanje

Uporaba jasnih in doslednih dogovorov o poimenovanju modulov, spremenljivk in virov izboljša berljivost in razumevanje kodne baze, kar drugim olajša delo in vzdrževanje modulov.

Izoliraj odvisnosti

Izogibati se moramo tesni povezavi med moduli. Vsak modul mora zajemati lastne vire in odvisnosti. To zagotavlja, da je mogoče module ponovno uporabiti neodvisno, in spodbuja boljšo izolacijo in enkapsulacijo.

Nadzor različic in register modulov

Svoje module lahko objavimo v repozitoriju z nadzorovanimi različicami ali registru modulov. To zagotavlja centralizirano lokacijo za skupno rabo in odkrivanje modulov, kar zagotavlja enostaven dostop in urejanje različic.

Zaključek

Na kratko smo predstavili module Terraform in se na preprostem primeru naučili, kako jih ustvariti. Nato smo pogledali, kako uporabiti spremenljivke in izhode z našim modulom, da povečamo njegovo prilagodljivost, možnost ponovne uporabe in vzdrževanja. Skratka, moduli Terraform so zmogljiva orodja za organiziranje in poenostavitev infrastrukturne kode. Omogočajo nam, da nabor virov ali konfiguracij vključimo v komponente za večkratno uporabo, ki spodbujajo modularnost, ponovno uporabnost in sodelovanje znotraj naših projektov infrastrukture kot kode.