Moduly Terraform

Moduly Terraform



Ve světě poskytování a správy infrastruktury se Terraform ukázal jako oblíbená volba mezi vývojáři a provozními týmy. Díky své deklarativní syntaxi (HCL – HashiCorp Configuration Language) a podpoře různých poskytovatelů infrastruktury umožňuje Terraform praktiky infrastruktury jako kódu (IaC).

Jednou z jeho klíčových vlastností je použití modulů, které umožňují vytvářet a znovu používat modulární infrastrukturní kód. V tomto článku prozkoumáme koncept modulů Terraform a jak mohou pomoci uspořádat a zjednodušit náš kód infrastruktury.







Úvod do modulů Terraform

Moduly Terraform jsou samostatné balíčky konfigurací Terraform, které představují sadu zdrojů s definovanými vstupními a výstupními proměnnými. Poskytují způsob, jak zapouzdřit a znovu použít kód infrastruktury, což usnadňuje správu a údržbu nasazení komplexní infrastruktury.



Moduly lze vytvářet a používat interně v rámci projektu nebo sdílet mezi více projekty nebo týmy.



Organizace modulu

Při organizování modulů Terraform je běžné mít hierarchickou strukturu, která se skládá z kořenových a podřízených modulů. Pojďme se podívat, jak tato organizace funguje.





Kořenový modul



Kořenový modul představuje modul nejvyšší úrovně v naší konfiguraci Terraform. Je vstupním bodem pro definování celkové infrastruktury a řízení vztahů mezi různými zdroji.

Kořenový modul obvykle obsahuje soubor „main.tf“, kde definujeme prostředky a konfigurace, které tvoří základ naší infrastruktury. Volitelně s ním můžeme mít soubory „variables.tf“ a „outputs.tf“. Také můžeme definovat náš adresář „modules“ v kořenovém adresáři, abychom měli snadný přístup k podřízeným modulům.

Podřízené moduly

Podřízené moduly jsou modulární komponenty, které zapouzdřují specifické sady zdrojů nebo konfigurací. Jsou navrženy tak, aby byly opakovaně použitelné a představují samostatné jednotky funkčnosti infrastruktury.

Podřízené moduly lze použít v rámci kořenového nebo jiných podřízených modulů, které umožňují složení a budování komplexní infrastruktury. Každý podřízený modul má obvykle svůj adresář, který obsahuje potřebné konfigurační soubory, jako jsou „main.tf“, „variables.tf“ a „outputs.tf“.

Nyní se podívejme, jak můžeme vytvořit modul Terraform.

Vytvoření modulu Terraform

Při vytváření modulů Terraform musíme vytvořit nový adresář pro modul s požadovanými konfiguračními soubory Terraform. Obvykle se tento adresář nazývá „modules“. Jeho definování v kořenovém adresáři našeho projektu je osvědčeným postupem.

Vezměme si jednoduchý příklad jednoduchého modulu pro zřízení místního webového serveru pomocí Dockeru. Nejprve definujeme modul v adresáři „modules“ jako „main.tf“.

zdroj 'docker_container' 'webový server' {
name  = var.name
obrázek = var.obrázek
porty {
internal = var.internal_port
externí = var.external_port
}
}

Zde vytvoříme modul nazvaný „docker_container“, který jako vstupní proměnné přebírá název kontejneru, obrázek Dockeru, interní port a externí port. Modul zapouzdřuje logiku pro vytvoření prostředku kontejneru Docker a umožňuje volajícímu přizpůsobit vlastnosti kontejneru.

Jak ukazuje následující obrázek, vytvoříme samostatný soubor s názvem „variables.tf“ v adresáři „modules“ pro definování vstupních proměnných, které lze přizpůsobit při použití modulu:

variabilní 'název' {
popis = 'Název kontejneru docker'
typ = řetězec
}

variabilní 'obraz' {
popis = 'Obrázek dockeru'
typ = řetězec
}

variabilní 'interni_port' {
popis = 'Interní port na kontejneru Docker'
typ = číslo
}

variabilní 'externí_port' {
popis = 'Externí port k mapování'
typ = číslo
}

Zde jsme deklarovali čtyři proměnné, z nichž každá má „popis“ a „typ“ jako atributy a příslušné hodnoty.

Použití modulu Terraform

Protože jsme vytvořili náš modul, můžeme jej nyní použít v naší hlavní konfiguraci Terraform odkazem na jeho zdroj. Udělejme náš hlavní konfigurační soubor, který je „main.tf“ v kořenovém adresáři.

modul 'webserver_container' {
zdroj = '../modules/docker_container'
jméno            = 'můj webový server'
obrázek           = 'nginx:nejnovější'
internal_port   = 80
externí_port   = 8080
}

K vytvoření instance modulu kontejneru Docker používáme blok „modul“ v předchozím kódu. Poskytujeme potřebné vstupní hodnoty pro modul, jako je název kontejneru, obrázek Dockeru a konfigurace portu. Parametr „source“ určuje relativní cestu k adresáři „module“.

Dále se podívejme, jak používat výstupy Terraform pro použití s ​​moduly.

Výstupy modulu

Modulové výstupy v Terraformu poskytují způsob, jak vystavit specifické hodnoty z modulu a zpřístupnit je pro použití v hlavní konfiguraci nebo jinými moduly. Slouží jako komunikační kanál mezi modulem a volajícím, který umožňuje modulu poskytovat informace nebo data, která mohou být užitečná nebo nezbytná pro další konfiguraci nebo rozhodování.

výstup 'container_id' {
popis = 'ID vytvořeného kontejneru Docker'
hodnota       = docker_container.webserver.id
}

Zde jsme vytvořili soubor „outputs.tf“ v adresáři „modules“. Tato výstupní proměnná odhaluje ID kontejneru Docker, který je vytvořen prostředkem „docker_container“ s názvem „webserver“ v rámci modulu.

Nyní máme přístup k ID kontejneru v našem kořenovém konfiguračním souboru. Podívejte se na následující aktualizovaný kód souboru „main.tf“ v kořenovém adresáři:

modul 'webserver_container' {
zdroj = '../modules/docker_container'
jméno            = 'můj webový server'
obrázek           = 'nginx:nejnovější'
internal_port   = 80
externí_port   = 8080
}

zdroj 'docker_volume' 'data' {
# Zbytek argumentů je zde
svázat = module.webserver_container.container_id
}

Použitím „module.webserver_container.container_id“ jako hodnoty argumentu „bind“ dáváme společnosti Terraform pokyn, aby svázal svazek Docker s umístěním, které je určeno ID kontejneru modulu „web_container“. Tím se vytvoří vztah mezi prostředkem svazku Docker a kontejnerem, který je vytvořen modulem „webserver_container“, čímž se zajistí, že svazek bude připojen na správné místo.

Nejlepší postupy pro moduly Terraform

Modularizovat pro opětovné použití

Při navrhování modulů bychom měli zvážit opětovnou použitelnost. Také musíme identifikovat logické komponenty nebo vzory naší infrastruktury a zapouzdřit je do samostatných modulů. To podporuje opětovné použití kódu, standardizaci a snazší spolupráci mezi týmy.

Jasné a konzistentní pojmenování

Použití jasných a konzistentních konvencí pojmenování modulů, proměnných a zdrojů zlepšuje čitelnost a porozumění základně kódu, což ostatním usnadňuje práci s moduly a jejich údržbu.

Izolujte závislosti

Musíme se vyhnout těsnému spojení mezi moduly. Každý modul by měl zapouzdřit své vlastní zdroje a závislosti. To zajišťuje, že moduly mohou být znovu použity nezávisle a podporuje lepší izolaci a zapouzdření.

Správa verzí a registr modulů

Můžeme publikovat naše moduly do úložiště s řízenou verzí nebo do registru modulů. To poskytuje centralizované umístění pro sdílení a objevování modulů, což zajišťuje snadný přístup a vytváření verzí.

Závěr

Stručně jsme představili moduly Terraform a na jednoduchém příkladu jsme se naučili, jak je vytvořit. Poté jsme se podívali na to, jak používat proměnné a výstupy s naším modulem ke zvýšení jeho flexibility, opětovné použitelnosti a udržovatelnosti. Závěrem lze říci, že moduly Terraform jsou výkonnými nástroji pro organizaci a zjednodušení kódu infrastruktury. Umožňují nám zapouzdřit sadu zdrojů nebo konfigurací do opakovaně použitelných komponent podporujících modularitu, znovupoužitelnost a spolupráci v rámci našich projektů infrastruktury jako kódu.