Terraforminiai moduliai

Terraforminiai Moduliai



Infrastruktūros aprūpinimo ir valdymo pasaulyje „Terraform“ tapo populiariu pasirinkimu tarp kūrėjų ir operacijų komandų. Naudodama deklaratyviąją sintaksę (HCL – HashiCorp Configuration Language) ir įvairių infrastruktūros tiekėjų palaikymą, „Terraform“ įgalina infrastruktūros kaip kodo (IaC) praktiką.

Viena iš pagrindinių jo savybių yra modulių naudojimas, leidžiantis sukurti ir pakartotinai panaudoti modulinės infrastruktūros kodą. Šiame straipsnyje apžvelgsime Terraform modulių koncepciją ir kaip jie gali padėti tvarkyti ir supaprastinti mūsų infrastruktūros kodą.







Terraform modulių įvadas

„Terraform“ moduliai yra savarankiški „Terraform“ konfigūracijų paketai, atspindintys išteklių rinkinį su apibrėžtais įvesties ir išvesties kintamaisiais. Jie suteikia galimybę įterpti ir pakartotinai panaudoti infrastruktūros kodą, o tai palengvina sudėtingų infrastruktūros diegimų valdymą ir priežiūrą.



Modulius galima sukurti ir naudoti projekto viduje arba bendrinti keliems projektams ar komandoms.



Modulio organizavimas

Organizuojant Terraform modulius, įprasta turėti hierarchinę struktūrą, kurią sudaro šakniniai ir antriniai moduliai. Panagrinėkime, kaip veikia ši organizacija.





Šakninis modulis



Šakninis modulis yra aukščiausio lygio modulis mūsų Terraform konfigūracijoje. Tai įėjimo taškas, leidžiantis apibrėžti bendrą infrastruktūrą ir valdyti ryšius tarp skirtingų išteklių.

Šakniniame modulyje paprastai yra „main.tf“ failas, kuriame apibrėžiame išteklius ir konfigūracijas, kurios sudaro mūsų infrastruktūros pagrindą. Pasirinktinai su juo galime turėti failus „variables.tf“ ir „outputs.tf“. Be to, mes galime apibrėžti savo „modulių“ katalogą šakniniame kataloge, kad galėtume lengvai pasiekti antrinius modulius.

Vaikų moduliai

Antriniai moduliai yra moduliniai komponentai, apimantys konkrečius išteklių arba konfigūracijų rinkinius. Jie sukurti taip, kad juos būtų galima naudoti pakartotinai ir atspindi savarankiškus infrastruktūros funkcionalumo vienetus.

Vaikiški moduliai gali būti naudojami šakniniuose arba kituose antriniuose moduliuose, kurie leidžia kurti kompoziciją ir kurti sudėtingą infrastruktūrą. Kiekvienas antrinis modulis paprastai turi savo katalogą, kuriame yra būtini konfigūracijos failai, tokie kaip „main.tf“, „variables.tf“ ir „outputs.tf“.

Dabar pažiūrėkime, kaip galime sukurti Terraform modulį.

„Terraform“ modulio kūrimas

Kurdami Terraform modulius, turime sukurti naują modulio katalogą su reikalingais Terraform konfigūracijos failais. Paprastai tas katalogas vadinamas „moduliais“. Geriausia praktika yra apibrėžti jį mūsų projekto šakniniame kataloge.

Paimkime paprastą paprasto modulio, skirto vietiniam žiniatinklio serveriui teikti naudojant „Docker“, pavyzdį. Pirma, modulį kataloge „modules“ apibrėžiame kaip „main.tf“.

išteklių 'docker_container' 'Tinklapio serveris' {
pavadinimas  = var.vardas
vaizdas = var.image
prievadai {
vidinis = var.internal_port
išorinis = var.external_port
}
}

Čia sukuriame modulį, pavadintą „docker_container“, kuris kaip įvesties kintamuosius paima konteinerio pavadinimą, „Docker“ vaizdą, vidinį prievadą ir išorinį prievadą. Modulis apima „Docker“ konteinerio išteklių kūrimo logiką ir leidžia skambinančiajam tinkinti konteinerio ypatybes.

Kaip parodyta toliau pateiktame paveikslėlyje, kataloge „modules“ sukuriame atskirą failą pavadinimu „variables.tf“, kad apibrėžtume įvesties kintamuosius, kuriuos galima pritaikyti naudojant modulį:

kintamasis 'vardas' {
aprašymas = „Docker konteinerio pavadinimas“
tipo = eilutė
}

kintamasis 'vaizdas' {
aprašymas = „Dokerio vaizdas“
tipo = eilutė
}

kintamasis 'internal_port' {
aprašymas = „Docker konteinerio vidinis prievadas“
tipo = skaičius
}

kintamasis 'external_port' {
aprašymas = „Išorinis prievadas, į kurį reikia susieti“
tipo = skaičius
}

Čia mes paskelbėme keturis kintamuosius, kurių atributai ir atitinkamos reikšmės yra „aprašas“ ir „tipas“.

Naudojant Terraform modulį

Kadangi sukūrėme savo modulį, dabar galime naudoti jį pagrindinėje Terraform konfigūracijoje, nurodydami jo šaltinį. Sukurkime pagrindinį konfigūracijos failą, kuris yra „main.tf“ šakniniame kataloge.

modulis 'žiniatinklio serverio_konteineris' {
šaltinis = '../modules/docker_container'
vardas            = 'mano žiniatinklio serveris'
vaizdas           = 'nginx: naujausias'
vidinis_portas = 80
išorinis_portas = 8080
}

Mes naudojame „modulio“ bloką ankstesniame kode, kad sukurtume „Docker“ konteinerio modulį. Pateikiame reikalingas modulio įvesties vertes, tokias kaip konteinerio pavadinimas, Docker vaizdas ir prievado konfigūracija. Parametras „source“ nurodo santykinį kelią į „modulio“ katalogą.

Toliau pažiūrėkime, kaip naudoti Terraform išvestis naudoti su moduliais.

Modulio išėjimai

„Terraform“ modulio išėjimai suteikia galimybę atskleisti konkrečias modulio vertes, todėl jas galima naudoti pagrindinėje konfigūracijoje arba kituose moduliuose. Jie tarnauja kaip ryšio kanalas tarp modulio ir skambinančiojo, kuris leidžia moduliui teikti informaciją arba duomenis, kurie gali būti naudingi arba reikalingi tolimesnei konfigūracijai ar sprendimų priėmimui.

išvestis 'container_id' {
aprašymas = „Sukurto Docker konteinerio ID“
vertė       = docker_container.webserver.id
}

Čia mes sukūrėme failą 'outputs.tf' kataloge 'modules'. Šis išvesties kintamasis atskleidžia „Docker“ sudėtinio rodinio ID, kurį modulyje sukuria „docker_container“ išteklius, pavadintas „webserver“.

Dabar galime pasiekti konteinerio ID savo šakniniame konfigūracijos faile. Žr. toliau pateiktą atnaujintą „main.tf“ failo kodą šakniniame kataloge:

modulis 'žiniatinklio serverio_konteineris' {
šaltinis = '../modules/docker_container'
vardas            = 'mano žiniatinklio serveris'
vaizdas           = 'nginx: naujausias'
vidinis_portas = 80
išorinis_portas = 8080
}

išteklių 'docker_volume' 'duomenys' {
# Likę argumentai pateikiami čia
įpareigoti = modulis.webserver_container.container_id
}

Naudodami „module.webserver_container.container_id“ kaip „bind“ argumento reikšmę, nurodome „Terraform“ susieti „Docker“ tomą su vieta, kuri nurodyta „web_container“ modulio konteinerio ID. Tai nustato ryšį tarp „Docker“ tomo išteklių ir „webserver_container“ modulio sukurto konteinerio, užtikrinant, kad tomas būtų sumontuotas tinkamoje vietoje.

Geriausia Terraform modulių praktika

Modulizuoti, kad būtų galima pakartotinai naudoti

Kurdami modulius turėtume atsižvelgti į pakartotinį naudojimą. Be to, turime identifikuoti savo infrastruktūros loginius komponentus arba modelius ir sudėti juos į atskirus modulius. Tai skatina pakartotinį kodo naudojimą, standartizavimą ir lengvesnį komandų bendradarbiavimą.

Aiškus ir nuoseklus įvardijimas

Naudojant aiškias ir nuoseklias modulių, kintamųjų ir išteklių pavadinimų taisykles, pagerėja kodų bazės skaitomumas ir supratimas, todėl kitiems lengviau dirbti su moduliais ir juos prižiūrėti.

Išskirkite priklausomybes

Turime vengti sandaraus modulių sujungimo. Kiekvienas modulis turėtų apimti savo išteklius ir priklausomybes. Tai užtikrina, kad moduliai gali būti pakartotinai naudojami atskirai ir skatina geresnę izoliaciją bei inkapsuliavimą.

Versijų valdymas ir modulių registras

Savo modulius galime paskelbti versijos valdomoje saugykloje arba modulių registre. Tai suteikia centralizuotą modulių bendrinimo ir atradimo vietą, užtikrinančią lengvą prieigą ir versijų nustatymą.

Išvada

Trumpai supažindinome su Terraform moduliais ir išmokome juos sukurti naudodami paprastą pavyzdį. Tada pažvelgėme į tai, kaip naudoti kintamuosius ir išvestis su mūsų moduliu, kad padidintume jo lankstumą, pakartotinį naudojimą ir priežiūrą. Apibendrinant galima pasakyti, kad Terraform moduliai yra galingi įrankiai, skirti tvarkyti ir supaprastinti infrastruktūros kodą. Jie leidžia mums sutelkti išteklių ar konfigūracijų rinkinį į daugkartinio naudojimo komponentus, skatinančius moduliškumą, pakartotinį naudojimą ir bendradarbiavimą įgyvendinant infrastruktūros kaip kodo projektus.