Terraform-moduulit

Terraform Moduulit



Infrastruktuurin provisiointi- ja hallintamaailmassa Terraform on noussut suosituksi valinnaksi kehittäjien ja toimintatiimien keskuudessa. Deklaratiivisen syntaksin (HCL – HashiCorp Configuration Language) ja useiden infrastruktuurintarjoajien tuen ansiosta Terraform mahdollistaa infrastruktuurin koodina (IaC) -käytännöt.

Yksi sen tärkeimmistä ominaisuuksista on moduulien käyttö, jonka avulla voidaan luoda ja käyttää uudelleen modulaarista infrastruktuurikoodia. Tässä artikkelissa tutkimme Terraform-moduulien käsitettä ja sitä, kuinka ne voivat auttaa järjestämään ja yksinkertaistamaan infrastruktuurikoodiamme.







Terraform-moduulien esittely

Terraform-moduulit ovat itsenäisiä Terraform-kokoonpanojen paketteja, jotka edustavat joukkoa resursseja määritellyillä tulo- ja lähtömuuttujilla. Ne tarjoavat tavan kapseloida ja käyttää uudelleen infrastruktuurikoodia, mikä helpottaa monimutkaisten infrastruktuurin käyttöönottojen hallintaa ja ylläpitoa.



Moduulit voidaan luoda ja käyttää sisäisesti projektin sisällä tai jakaa useille projekteille tai ryhmille.



Moduulin organisaatio

Terraform-moduuleita järjestettäessä on tavallista käyttää hierarkkista rakennetta, joka koostuu juuri- ja alimoduuleista. Tutkitaan kuinka tämä organisaatio toimii.





Juurimoduuli



Juurimoduuli edustaa Terraform-kokoonpanomme huipputason moduulia. Se on lähtökohta yleisen infrastruktuurin määrittelyyn ja eri resurssien välisten suhteiden hallintaan.

Juurimoduuli sisältää yleensä main.tf-tiedoston, jossa määritämme resurssit ja kokoonpanot, jotka muodostavat infrastruktuurimme perustan. Vaihtoehtoisesti meillä voi olla 'variables.tf'- ja 'outputs.tf'-tiedostot sen mukana. Voimme myös määrittää 'moduulit'-hakemistomme juurihakemistoon, jotta pääsemme helposti lapsimoduuleihin.

Lapsimoduulit

Lapsimoduulit ovat modulaarisia komponentteja, jotka kapseloivat tiettyjä resursseja tai kokoonpanoja. Ne on suunniteltu uudelleenkäytettäviksi ja edustavat infrastruktuurin toiminnallisuuden itsenäisiä yksiköitä.

Lapsimoduuleja voidaan käyttää juuri- tai muissa lapsimoduuleissa, jotka mahdollistavat kokoonpanon ja monimutkaisen infrastruktuurin rakentamisen. Jokaisella alimoduulilla on tyypillisesti hakemistonsa, joka sisältää tarvittavat asetustiedostot, kuten 'main.tf', 'variables.tf' ja 'outputs.tf'.

Katsotaanpa nyt, kuinka voimme luoda Terraform-moduulin.

Terraform-moduulin luominen

Terraform-moduuleja luotaessa meidän on tehtävä moduulille uusi hakemisto tarvittavilla Terraform-konfiguraatiotiedostoilla. Yleensä tämän hakemiston nimi on 'moduulit'. Sen määrittäminen projektimme juurihakemistoon on paras käytäntö.

Otetaanpa helppo esimerkki yksinkertaisesta moduulista paikallisen verkkopalvelimen tarjoamiseksi Dockerin avulla. Ensin määritämme 'moduulit'-hakemiston moduuliksi 'main.tf'.

resurssi 'docker_container' 'verkkopalvelin' {
nimi  = var.nimi
kuva = var.image
portit {
sisäinen = var.internal_port
ulkoinen = var.external_port
}
}

Täällä luomme moduulin nimeltä 'docker_container', joka ottaa kontin nimen, Docker-kuvan, sisäisen portin ja ulkoisen portin syöttömuuttujiksi. Moduuli kapseloi logiikan Docker-säilöresurssin luomiseksi ja sallii soittajan mukauttaa säilön ominaisuuksia.

Kuten seuraavassa kuvassa näkyy, luomme erillisen tiedoston nimeltä 'variables.tf' 'moduulit'-hakemistoon määrittääksemme syöttömuuttujat, joita voidaan mukauttaa moduulia käytettäessä:

muuttuja 'nimi' {
kuvaus = 'Docker-säiliön nimi'
tyyppi = merkkijono
}

muuttuja 'kuva' {
kuvaus = 'Dokkerin kuva'
tyyppi = merkkijono
}

muuttuja 'sisäinen_portti' {
kuvaus = 'Docker-kontin sisäinen portti'
tyyppi = numero
}

muuttuja 'ulkoinen_portti' {
kuvaus = 'Ulkoinen portti, johon liitetään'
tyyppi = numero
}

Tässä ilmoitimme neljä muuttujaa, joista jokaisessa on 'description' ja 'type' attribuutteina ja niille merkitykselliset arvot.

Terraform-moduulin käyttö

Koska loimme moduulimme, voimme nyt käyttää sitä pääasiallisessa Terraform-kokoonpanossamme viittaamalla sen lähteeseen. Tehdään pääasetustiedostomme, joka on 'main.tf' juurihakemistossa.

moduuli 'webserver_container' {
lähde = '../modules/docker_container'
nimi            = 'oma verkkopalvelin'
kuva           = 'nginx: uusin'
sisäinen_portti   = 80
ulkoinen_portti   = 8080
}

Käytämme edellisen koodin 'moduuli'-lohkoa Docker-konttimoduulin ilmentämiseen. Tarjoamme moduulille tarvittavat syöttöarvot, kuten kontin nimen, Docker-kuvan ja portin kokoonpanon. Parametri 'lähde' ​​määrittää suhteellisen polun 'moduuli'-hakemistoon.

Katsotaan seuraavaksi, kuinka Terraform-lähtöjä käytetään moduulien kanssa.

Moduulin lähdöt

Terraformin moduulilähdöt tarjoavat tavan paljastaa tietyt arvot moduulin sisältä, jolloin ne ovat käytettävissä pääkokoonpanossa tai muissa moduuleissa. Ne toimivat viestintäkanavana moduulin ja soittajan välillä, minkä ansiosta moduuli voi tarjota tietoa tai dataa, joka voi olla hyödyllistä tai tarpeellista lisäkonfiguroinnissa tai päätöksenteossa.

ulostulo 'container_id' {
kuvaus = 'Luodun Docker-säilön tunnus'
arvo       = docker_container.webserver.id
}

Täällä loimme 'outputs.tf'-tiedoston 'moduulit'-hakemistoon. Tämä tulosmuuttuja paljastaa Docker-säilön tunnuksen, joka on luotu 'docker_container' -resurssilla nimeltä 'webserver' moduulissa.

Nyt voimme käyttää säilön tunnusta juurimääritystiedostossamme. Katso seuraava päivitetty 'main.tf'-tiedoston koodi juurihakemistossa:

moduuli 'webserver_container' {
lähde = '../modules/docker_container'
nimi            = 'oma verkkopalvelin'
kuva           = 'nginx: uusin'
sisäinen_portti   = 80
ulkoinen_portti   = 8080
}

resurssi 'docker_volume' 'data' {
# Loput argumentit menevät tähän
sitoa = module.webserver_container.container_id
}

Käyttämällä 'module.webserver_container.container_id' arvoa 'bind'-argumentille, ohjeistamme Terraformia sitomaan Docker-taltion 'web_container'-moduulin säilön tunnuksen määrittelemään sijaintiin. Tämä muodostaa suhteen Docker-taltioresurssin ja 'webserver_container'-moduulin luoman säilön välille ja varmistaa, että taltio on asennettu oikeaan paikkaan.

Terraform-moduulien parhaat käytännöt

Modularisoi uudelleenkäyttöä varten

Uudelleenkäytettävyys tulee ottaa huomioon moduulien suunnittelussa. Meidän on myös tunnistettava infrastruktuurimme loogiset komponentit tai mallit ja kapseloitava ne erillisiksi moduuleiksi. Tämä edistää koodin uudelleenkäyttöä, standardointia ja helpottaa tiimien välistä yhteistyötä.

Selkeä ja johdonmukainen nimeäminen

Selkeiden ja johdonmukaisten nimeämiskäytäntöjen käyttäminen moduuleille, muuttujille ja resursseille parantaa koodikannan luettavuutta ja ymmärtämistä, mikä helpottaa muiden moduulien käyttöä ja ylläpitoa.

Eristä riippuvuudet

Meidän on vältettävä moduulien välistä tiivistä kytkentää. Jokaisen moduulin tulee kiteyttää omat resurssinsa ja riippuvuutensa. Tämä varmistaa, että moduuleja voidaan käyttää uudelleen itsenäisesti ja edistää parempaa eristystä ja kapselointia.

Versionhallinta ja moduulirekisteri

Voimme julkaista moduulimme versioohjatussa arkistoon tai moduulirekisteriin. Tämä tarjoaa keskitetyn sijainnin moduulien jakamiseen ja löytämiseen, mikä varmistaa helpon käytön ja versioinnin.

Johtopäätös

Teimme lyhyen johdannon Terraform-moduuleista ja opimme luomaan niitä yksinkertaisella esimerkillä. Sitten tarkastelimme, kuinka käyttää muuttujia ja lähtöjä moduulimme kanssa parantaaksemme sen joustavuutta, uudelleenkäytettävyyttä ja ylläpidettävyyttä. Yhteenvetona voidaan todeta, että Terraform-moduulit ovat tehokkaita työkaluja infrastruktuurikoodin järjestämiseen ja yksinkertaistamiseen. Niiden avulla voimme kapseloida joukon resursseja tai kokoonpanoja uudelleenkäytettäviksi komponenteiksi, mikä edistää modulaarisuutta, uudelleenkäytettävyyttä ja yhteistyötä infrastruktuuri-as-code-projekteissamme.