Az infrastruktúra kiépítése és felügyelete terén a Terraform népszerű választás a fejlesztők és az üzemeltetési csapatok körében. Deklaratív szintaxisával (HCL – HashiCorp Configuration Language) és különféle infrastruktúra-szolgáltatók támogatásával a Terraform lehetővé teszi az infrastruktúra kódként (IaC) gyakorlatát.
Az egyik legfontosabb jellemzője a modulok használata, amelyek lehetővé teszik a moduláris infrastruktúra kód létrehozását és újrafelhasználását. Ebben a cikkben megvizsgáljuk a Terraform modulok koncepcióját, és azt, hogyan segíthetik az infrastruktúra kódjának rendszerezését és egyszerűsítését.
Bevezetés a Terraform modulokba
A Terraform modulok a Terraform konfigurációk önálló csomagjai, amelyek meghatározott bemeneti és kimeneti változókkal rendelkező erőforráskészletet képviselnek. Módot biztosítanak az infrastruktúra kód beágyazására és újrafelhasználására, ami megkönnyíti az összetett infrastruktúra-telepítések kezelését és karbantartását.
A modulok létrehozhatók és használhatók egy projekten belül, vagy megoszthatók több projekt vagy csapat között.
A modul felépítése
A Terraform modulok rendszerezésekor gyakori a hierarchikus struktúra, amely gyökér- és gyermekmodulokból áll. Nézzük meg, hogyan működik ez a szervezet.
Gyökér modul
A gyökérmodul a Terraform konfigurációnk legfelső szintű modulja. Ez a belépési pont az átfogó infrastruktúra meghatározásához és a különböző erőforrások közötti kapcsolatok kezeléséhez.
A gyökérmodul jellemzően a „main.tf” fájlt tartalmazza, amelyben meghatározzuk az infrastruktúránk alapját képező erőforrásokat és konfigurációkat. Opcionálisan rendelkezhetünk vele a „variables.tf” és „outputs.tf” fájlokkal. Ezenkívül meghatározhatjuk a „modules” könyvtárunkat a gyökérkönyvtárban, hogy könnyen elérjük a gyermekmodulokat.
Gyermek modulok
A gyermekmodulok olyan moduláris összetevők, amelyek meghatározott erőforrás- vagy konfigurációkészleteket foglalnak magukba. Úgy tervezték, hogy újrafelhasználhatók legyenek, és az infrastruktúra funkcióinak önálló egységeit képviselik.
A gyermekmodulok a gyökérben vagy más alárendelt modulokban használhatók, amelyek lehetővé teszik a kompozíciót és az összetett infrastruktúra kiépítését. Minden gyermekmodulnak általában megvan a maga könyvtára, amely tartalmazza a szükséges konfigurációs fájlokat, például a „main.tf”, „variables.tf” és „outputs.tf” fájlokat.
Most nézzük meg, hogyan hozhatunk létre egy Terraform modult.
Terraform modul létrehozása
A Terraform modulok létrehozásakor új könyvtárat kell készítenünk a modulhoz a szükséges Terraform konfigurációs fájlokkal. Általában ennek a könyvtárnak a neve „modules”. A legjobb gyakorlat, ha projektünk gyökérkönyvtárában határozzuk meg.
Vegyünk egy egyszerű példát egy egyszerű modulra, amellyel helyi webszervert biztosítanak a Docker segítségével. Először a „modules” könyvtárban lévő modult „main.tf”-ként határozzuk meg.
forrás 'docker_container' 'web szerver' {név = var.name
kép = var.image
portok {
belső = var.belső_port
külső = var.external_port
}
}
Itt létrehozunk egy „docker_container” nevű modult, amely a tároló nevét, a Docker-képet, a belső portot és a külső portot veszi be bemeneti változóként. A modul magába foglalja a Docker-tároló-erőforrás létrehozásának logikáját, és lehetővé teszi a hívó számára a tároló tulajdonságainak testreszabását.
A következő képen látható módon létrehozunk egy külön fájlt „variables.tf” néven a „modules” könyvtárban, hogy meghatározzuk a modul használatakor testreszabható bemeneti változókat:
változó 'név' {leírás = 'Docker-tároló neve'
típus = string
}
változó 'kép' {
leírás = 'Dokker kép'
típus = string
}
változó 'belső_port' {
leírás = 'Belső port a Docker konténeren'
típus = szám
}
változó 'külső_port' {
leírás = 'Külső port a hozzárendeléshez'
típus = szám
}
Itt négy változót deklaráltunk, mindegyik „leírás” és „típus” attribútumokkal és releváns értékekkel.
Terraform modul használata
Mióta létrehoztuk a modulunkat, mostantól a fő Terraform konfigurációban is használhatjuk a forrásra való hivatkozással. Készítsük el a fő konfigurációs fájlunkat, amely a „main.tf” a gyökérkönyvtárban.
modul 'webszerver_tároló' {forrás = '../modules/docker_container'
név = 'webszerverem'
kép = 'nginx:legújabb'
belső_port = 80
külső_port = 8080
}
Az előző kód „modul” blokkját használjuk a Docker konténermodul példányosításához. Megadjuk a szükséges bemeneti értékeket a modulhoz, például a tároló nevét, a Docker-képet és a portkonfigurációt. A „source” paraméter a „modul” könyvtár relatív elérési útját adja meg.
Ezután nézzük meg, hogyan használhatjuk a Terraform kimeneteket a modulokhoz.
Modul kimenetek
A Terraform modul kimenetei lehetőséget biztosítanak bizonyos értékek megjelenítésére a modulon belül, így elérhetővé téve azokat a fő konfigurációban vagy más modulok általi használatra. Kommunikációs csatornaként szolgálnak a modul és a hívó fél között, amely lehetővé teszi a modul számára, hogy olyan információkat vagy adatokat biztosítson, amelyek hasznosak vagy szükségesek lehetnek a további konfigurációhoz vagy döntéshozatalhoz.
Kimenet 'container_id' {leírás = 'A létrehozott Docker-tároló azonosítója'
érték = docker_container.webserver.id
}
Itt létrehoztunk egy „outputs.tf” fájlt a „modules” könyvtárban. Ez a kimeneti változó felfedi annak a Docker-tárolónak az azonosítóját, amelyet a „webserver” nevű „docker_container” erőforrás hozott létre a modulon belül.
Most már elérhetjük a tárolóazonosítót a gyökér konfigurációs fájlunkban. Tekintse meg a „main.tf” fájl következő frissített kódját a gyökérkönyvtárban:
modult 'webszerver_tároló' {forrás = '../modules/docker_container'
név = 'webszerverem'
kép = 'nginx:legújabb'
belső_port = 80
külső_port = 8080
}
forrás 'docker_volume' 'adat' {
# A többi érv ide tartozik
kötni = module.webserver_container.container_id
}
Ha a „module.webserver_container.container_id” értéket használja a „bind” argumentumhoz, arra utasítjuk a Terraformot, hogy kösse a Docker-kötetet a „web_container” modul tárolóazonosítója által megadott helyre. Ez kapcsolatot létesít a Docker-kötet-erőforrás és a „webserver_container” modul által létrehozott tároló között, biztosítva, hogy a kötet a megfelelő helyre legyen csatlakoztatva.
Terraform modulok legjobb gyakorlatai
Moduláris az újrafelhasználhatóság érdekében
A modulok tervezésénél figyelembe kell venni az újrafelhasználhatóságot. Ezenkívül azonosítanunk kell infrastruktúránk logikai összetevőit vagy mintáit, és külön modulokba kell foglalnunk őket. Ez elősegíti a kód újrafelhasználását, a szabványosítást és a csapatok közötti könnyebb együttműködést.
Világos és következetes elnevezés
A modulok, változók és erőforrások egyértelmű és következetes elnevezési konvencióinak használata javítja a kódbázis olvashatóságát és megértését, ami megkönnyíti mások számára a modulokkal való munkát és karbantartást.
Függőségek elkülönítése
Kerülnünk kell a modulok közötti szoros csatolást. Minden modulnak tartalmaznia kell saját erőforrásait és függőségeit. Ez biztosítja, hogy a modulok egymástól függetlenül újra felhasználhatók legyenek, és elősegíti a jobb izolálást és tokozást.
Verziófelügyelet és modulnyilvántartás
Moduljainkat közzétehetjük verzióvezérelt tárolóban vagy modulnyilvántartásban. Ez egy központi helyet biztosít a modulok megosztásához és felfedezéséhez, biztosítva az egyszerű hozzáférést és verziószámítást.
Következtetés
Röviden bemutattuk a Terraform modulokat, és egy egyszerű példán keresztül megtanultuk, hogyan lehet létrehozni őket. Ezután megvizsgáltuk, hogyan használhatjuk a változókat és a kimeneteket a modulunkkal, hogy fokozzuk annak rugalmasságát, újrafelhasználhatóságát és karbantarthatóságát. Összefoglalva, a Terraform modulok hatékony eszközök az infrastruktúra kódjának rendszerezésére és egyszerűsítésére. Lehetővé teszik számunkra, hogy egy sor erőforrást vagy konfigurációt újrafelhasználható komponensekbe foglaljunk, elősegítve a modularitást, az újrafelhasználhatóságot és az együttműködést az infrastruktúra-as-code projektjeinkben.