A Terraform egy nyílt forráskódú eszköz, amelyet az infrastruktúra automatizálására használnak, lehetővé téve a felhőinfrastruktúra kezelését kódszerű módon. Az egyik legfontosabb eleme a HashiCorp Configuration Language (HCL), amely a konfigurációs fájlok írásához használt szintaxis. Az HCL erőteljes eszközt biztosít az erőforrások létrehozásához és kezeléséhez, miközben fenntartja a tisztaságot és a könnyű karbantarthatóságot.
A Terraform konfigurációs fájlok alapvetően három fő elemből állnak: provider, resource és output. A provider blokkok határozzák meg, hogy mely felhőszolgáltatókhoz (például Azure vagy AWS) csatlakozzunk, a resource blokkok pedig azokat az erőforrásokat definiálják, amelyeket létrehozni, módosítani vagy törölni szeretnénk. Az output blokkok segítségével a Terraform kimeneteket generálhat, például egy virtuális gép nyilvános IP-címét, amit a felhasználó könnyen elérhet az alkalmazás után.
A konfigurációs fájlok írásakor fontos figyelembe venni a különböző adatstruktúrák, mint például listák, térképek (maps) és objektumok használatát. Ezek segítenek az összetett adatok kifejezésében, például hálózati alhálózatok, címek és regionális beállítások tárolására. Az HCL típusellenőrzése biztosítja, hogy a program helyesen működjön, így ha például egy listához sztringet rendelünk, vagy egy egész számot adunk meg ott, ahol logikai értéket vár a rendszer, a Terraform hibaüzenetet ad.
A kezdéshez célszerű létrehozni egy egyszerű projektet, amely valós felhőerőforrásokat kezel. Ehhez elég, ha egy mappát hozunk létre, mondjuk my-first-terraform-config néven, és ebbe helyezzük el a konfigurációs fájlokat. A legelső fájl lehet például egy main.tf, amely tartalmazza az összes szükséges erőforrást. Ahogy a projekt bővül, célszerűbb külön fájlokat létrehozni a változókhoz, kimenetekhez és modulokhoz.
A legegyszerűbb konfiguráció az alábbiak szerint nézhet ki egy Azure erőforráscsoport létrehozásával:
Ez a konfiguráció meghatározza az Azure proviert és létrehoz egy myFirstRG nevű erőforráscsoportot az EastUS régióban. A helyi változók (például az azure_subscription_id) értékeit a variables.tf fájlban kell definiálni, amely így nézhet ki:
Ezeket az értékeket egy külön terraform.tfvars fájlban is megadhatjuk, ami segít megakadályozni a hitelesítő adatok véletlen nyilvánosságra hozatalát. A terraform.tfvars fájl például így nézhet ki:
A konfiguráció után a Terraform környezetet a terraform init parancs futtatásával indíthatjuk, ami letölti a szükséges providereket és előkészíti a munkakörnyezetet. Ezt követően a terraform plan parancs segítségével előre megtekinthetjük, hogy milyen változtatások történnek az infrastruktúrában. A terraform apply parancs futtatása után a változtatásokat alkalmazhatjuk, és a kód által definiált erőforrásokat létrehozhatjuk a felhőben.
Miután sikeresen létrehoztuk az erőforrást, további erőforrásokat adhatunk hozzá a konfigurációhoz, például egy virtuális hálózatot. Az alábbiakban egy példát láthatunk arra, hogyan adhatunk hozzá egy virtuális hálózatot:
Ez a blokk biztosítja, hogy a virtuális hálózat a már meglévő erőforráscsoporthoz kapcsolódjon, és automatikusan alkalmazkodik, ha az erőforráscsoport helye vagy neve megváltozik. Az ilyen típusú referenciák segítenek elkerülni a kód ismétlését, és biztosítják a konfigurációk koherenciáját.
A Terraform egyik legnagyobb előnye, hogy lehetőséget ad az infrastruktúra könnyed kezelésére és tesztelésére. Ha valami nem működik a várakozások szerint, a terraform show parancs vagy a plan kimenetének megvizsgálása segíthet kideríteni, mi nem stimmel a konfigurációval.
Végül, ha már nem szükségesek az erőforrások, egyszerűen eltávolíthatjuk őket a terraform destroy parancs futtatásával. Ez a parancs törli az összes létrehozott erőforrást és biztosítja, hogy a környezet tiszta állapotba kerüljön.
Fontos, hogy a Terraform használata során mindig tartsuk szem előtt a biztonságot és a titkos adatkezelést. A hitelesítő adatok soha ne legyenek közvetlenül a konfigurációs fájlokban tárolva, hanem inkább változókon keresztül biztosítsuk hozzáférésüket. Emellett a különböző erőforrások és konfigurációs blokkok összekapcsolásának megértése kulcsfontosságú ahhoz, hogy skálázható és karbantartható infrastruktúrát hozzunk létre.
Hogyan használjuk a változókat és interpolációkat Terraform konfigurációkban?
A Terraform egy erőteljes eszköz, amely lehetővé teszi a felhőalapú erőforrások automatizált kezelését. Az egyik kulcsfontosságú tényező a konfigurációk dinamikus kezelése, amit a változók és interpolációk segítségével valósíthatunk meg. A változók segítségével paraméterezhetjük a konfigurációkat, míg az interpoláció lehetővé teszi, hogy a változók értékeit és kifejezéseket dinamikusan beágyazzunk a konfigurációkba.
A változók egy egyszerű módot kínálnak a konfigurációk paraméterezésére, így például egy objektumhoz tartozó változó több mezőt is tartalmazhat, mindegyik saját típusával, lehetővé téve, hogy egyetlen változóban több, összefüggő beállítást adjunk meg. Az újabb Terraform verziókban az érvényesítési blokkok segítségével korlátozásokat is alkalmazhatunk az input értékekre, például hogy egy lista ne legyen üres, vagy hogy egy numerikus változó egy meghatározott tartományon belül maradjon. Ha a felhasználó nem felel meg ezeknek az ellenőrzéseknek, a rendszer olvasható hibát ad vissza, így megelőzve a hibás konfigurációk alkalmazását.
Például egy tipikus konfiguráció tartalmazhat olyan változókat, amelyek együtt dolgoznak a felhő környezet definiálásában. Tegyük fel, hogy a felhasználó szeretné paraméterezni a virtuális gépek számát és a forrást csoport helyét. A konfiguráció így nézhet ki:
A main.tf fájlban a változókat a következő módon használhatjuk:
Amikor a felhasználó futtatja a terraform plan parancsot, a kód látni fogja, hogy a vm_count értéke 2, így két virtuális gép létrehozását javasolja, amelyek nevei “demo-vm-0” és “demo-vm-1” lesznek. A location változó mind a forrást csoportot, mind a gépeket a megadott régióba helyezi. Ha a csapat három virtuális gépet akar a “WestUS” régióban, a tfvars fájlban módosíthatják az értékeket, vagy futtatáskor paramétereket adhatnak meg: -var "vm_count=3" -var "location=WestUS".
A változók értékei változtathatók, és a konfiguráció dinamikusan alkalmazkodik a megadott paraméterekhez, így a felhasználók tárolhatják azokat egy verzióval rendelkező tfvars fájlban, környezeti változókban, vagy CLI argumentumokként is átadhatják.
Az interpolációs szintaxis egy fontos eszköz, amely lehetővé teszi a változók, erőforrás attribútumok és függvényhívások dinamikus beágyazását a konfigurációs blokkokba. Az interpoláció alapvető része annak, hogy a Terraform hogyan építi fel a végső konfigurációkat a moduláris és paraméterezett definíciók alapján. Az interpolációs szintaxis használatával könnyedén hivatkozhatunk más erőforrások attribútumaira, adatokat adhatunk át modulok között, és feltételesen számolhatunk ki tulajdonságokat a felhasználói bemenetekre reagálva.
A régebbi Terraform verziókban az interpolációs szintaxis szükséges volt minden referencia esetén. Az újabb verziókban az egyszerű referenciák már nem igényelnek kapcsos zárójeleket, mint például name = var.instance_name, de a komplexebb kifejezések, például a stringek összefűzése továbbra is a ${} szintaxis használatát igénylik. Ilyen esetekben például a name = "demo-${var.instance_name}-vm" kifejezés biztosítja, hogy az eredmény a futtatás során, a felhasználói bemenetek vagy környezeti adatok alapján számítódjon ki.
Az interpoláció nemcsak egyszerű változók beágyazására szolgál, hanem a bonyolultabb kifejezések kezelésére is. Például egy felhasználó egy előre megadott változó segítségével szeretné átírni egy felhasználó által megadott szöveget nagybetűs formára, vagy kiszámolni egy lista hosszát. Ehhez a következő kifejezés használható: "prefix-${upper(var.env_name)}", vagy length(var.subnet_list).
Az interpoláció egyik alapvető előnye, hogy az erőforrások közötti összefonódást is kezeli, például egy erőforrás attribútumát egy másik erőforrás számára biztosítva. Ezt a következő példában láthatjuk:
A fenti példában az aws_instance erőforrás az aws_subnet erőforrás id attribútumára támaszkodik, miközben az aws_subnet a cidrsubnet függvényt használja a hálózati tartomány kiszámításához. Az interpoláció biztosítja a helyes erőforrás-függőségeket és a frissítések helyes sorrendjét.
A függvények és a beépített operátorok szintén fontos szerepet játszanak a kifejezésekben. A Terraform támogatja a stringek manipulálását (például trim, lower, upper, substring), numerikus műveleteket (max, min, abs), kriptográfiai hash-elést (md5, sha256) és egyéb hasznos funkciókat. A feltételes logika használatával meghatározhatjuk, hogy egy erőforrás paraméterei milyen módon változzanak az aktuális környezet függvényében.
Például a következő feltételes kifejezés figyelembe veszi, hogy ha a környezet típusa “prod”, akkor három példányra van szükség, ha nem, akkor csak egyre:
A túlzottan komplex kifejezések azonban nehezíthetik a konfigurációk olvashatóságát. Az ajánlott gyakorlat az, hogy az egyszerűbb kifejezéseket használjuk, míg az összetettebb logikát modulok vagy külső szkriptek segítségével valósítsuk meg.

Deutsch
Francais
Nederlands
Svenska
Norsk
Dansk
Suomi
Espanol
Italiano
Portugues
Magyar
Polski
Cestina
Русский