
Nagy Gergő
· 5 min read
Boilerplate – mi a gond a copy-paste megoldásokkal?
Az IaC projektek indítása többé nem jelent manuális másolgatást. A cikkből kiderül, hogyan segít a Gruntwork Boilerplate-re épülő template új infrastruktúra-projektek gyors és konzisztens létrehozásában, és hogyan egyszerűsítjük mi a kezdeti lépéseket.

A Terragrunt projektekben visszatérő kihívást jelent a strukturális konzisztencia hiánya. Amikor a csapatok újra és újra manuálisan állítják össze a projekt alapjait, az nemcsak extra időt vesz igénybe, hanem rengeteg hibalehetőséget is hordoz magában. Ez a fajta ismétlődő setup lassítja az új projektek elindítását, megnehezíti a csapatok közötti együttműködést, és hosszú távon a kód auditálását és karbantartását is sokkal bonyolultabbá teszi.
Megoldásunk:
Cégünk egy nyílt forráskódú Terragrunt template-et fejlesztett ki, amely a Gruntwork Boilerplate eszközre épül. Ennek segítségével a projekt inicializálása nemcsak gyorsabb, hanem szabványosabb és átláthatóbb is lesz.
boilerplate --template-url <remote-template> --output-folder <target-path>
boilerplate --var-file vars.yml --non-interactive --template-url <source>
Az eszköz támogatja mind a helyi, mind a távoli template-forrásokat, így könnyen kialakítható és fenntartható egy központi repository. Ebben a repositoryban naprakészen tarthatjuk a Tofu modulokat, valamint előre elkészített alapkonfigurációkat is tárolhatunk – például egy EKS clusterhez.
Miért van rá szükség?
Az előre definiált sablonok használata számos előnyt kínál a fejlesztőcsapatok számára. Jelentősen lerövidíti az új csapattagok betanulási idejét, miközben kizárja a copy-paste hibák lehetőségét. A projektek konzisztens architektúrára épülnek, ami egyszerűbbé teszi a code review folyamatokat és átláthatóbbá a közös munkát. Emellett a sablonok a best practice-eket is beépítik a mindennapi munkába, ráadásul verziózhatóak, így a változások hosszú távon is jól követhetők.
Mi az a Boilerplate?
A Gruntwork által fejlesztett Boilerplate egy olyan eszköz, amely lehetővé teszi fájlok és fájlstruktúrák dinamikus létrehozását előre definiált sablonok alapján. Tudj meg többet: ugorj a cikk végén található forrásokhoz.
Vegyünk példának egy új Terragrunt projektet. Ezeknek a projekteknek a felépítése általában nagyon hasonló: environmentekbe rendezve, accountokat, régiókat, unitokat és stackeket tartalmaznak. Ez a struktúra ismétlődő és sablonszerű, vagyis tökéletesen alkalmas arra, hogy automatizáljuk a létrehozását.
A Boilerplate segítségével pontosan ezt tehetjük meg: előre meghatározhatjuk a könyvtárak nevét, az account ID-kat és más változókat, majd a projektet akár interaktív módon vagy teljesen automatizáltan, non-interaktív parancsokkal is felépíthetjük. Így ahelyett, hogy minden alkalommal kézzel másolgatnánk a struktúrát, gyorsan és hibamentesen generálhatjuk le a szükséges alapot.
Hogyan használjuk a Code Factorynál?
A saját megoldásunkban a terragrunt-stack struktúra mellett döntöttünk és két alapvető kiindulási típust határoztunk meg: single-account és multi-account projekteket.

A folyamatot presetek egyszerűsítik: a felhasználó kiválasztja a megfelelő presetet, megadja a szükséges változókat, majd néhány lépésben létrejön egy teljes alap projekt, amely azonnal készen áll a telepítésre.

A generált projekt két fő könyvtárból épül fel. Az infrastructure könyvtár tartalmazza az IaC kódot, vagyis mindent, ami a Terragrunt hatókörébe tartozik (a terragrunt parancsait innen kell kiadnunk). A másik, a units könyvtár, a modulok előkészítésére szolgál, amelyeket a Terragrunt forrásként használ.

.
├── infrastructure
│ ├── live
│ │ ├── development
│ │ │ ├── account.hcl
│ │ │ └── eu-central-1
│ │ │ ├── eks-managed
│ │ │ │ └── terragrunt.stack.hcl
│ │ │ └── region.hcl
│ │ ├── management
│ │ │ └── ...
│ │ ├── monitoring
│ │ │ └── ...
│ │ └── production
│ │ └── ...
│ ├── project.hcl
│ └── root.hcl
├── mise.toml
├── report-module-versions.sh
├── terraform
│ ├── cross-account-role
│ │ ├── main.tf
│ │ ├── outputs.tf
│ │ └── vars.tf
│ └── eks-addon
│ └── ...
└── units
├── eks-auto
│ └── ...
├── eks-managed
│ ├── aws-lbc
│ │ └── terragrunt.hcl
│ ├── cross-account-role
│ │ └── terragrunt.hcl
│ ├── eks
│ │ └── terragrunt.hcl
│ ├── eks-addon
│ │ └── terragrunt.hcl
│ ├── iam-role
│ │ └── terragrunt.hcl
│ ├── kms
│ │ └── terragrunt.hcl
│ └── vpc
│ └── terragrunt.hcl
├── vpc
│ └── ...
└── web
└── ...
Ebben a könyvtárban található a report-module-versions.sh
script is, amely listát készít az aktuálisan használt community modulokról, és jelzi, ha elérhető belőlük újabb verzió. Ez nagyban megkönnyíti a frissítések nyomon követését.
Emellett elérhető egy további preset is, a terragrunt stack, amely lehetővé teszi új stackek hozzáadását egy már meglévő projekthez. Ilyenkor a felhasználó szabadon dönthet arról, hogy a unitokat közvetlenül a végleges helyükre generálja az útvonal alapján, vagy inkább később helyezi el őket a projektben. Ez rugalmas és jól skálázható megoldást biztosít a folyamatosan bővülő infrastruktúrákhoz.

Hogyan használd?
A Boilerplate használata egyszerű. Először le kell tölteni a binary fájlt a Gruntwork weboldaláról, majd a futtatásnál meg kell adni a sablon forrását – ez lehet akár helyi könyvtár, akár egy távoli URL – és azt a célelérési utat, ahová a generált projekt kerülni fog.
Amennyiben konfigurációs fájlt is szeretnénk használni, azt egy külön flag segítségével adhatjuk át a parancsnak. Így például a --var-file vars.yml --non-interactive
opcióval a teljes folyamat automatizálható, a projekt pedig néhány másodperc alatt generálható.
Próbáld ki!
boilerplate --template-url "github.com/codefactoryhu/terragrunt-aws-boilerplate//terragrunt-boilerplate?ref=main" \
--output-folder ~/Desktop/code-factory-boilerplate/new-project
Összegzés
A Boilerplate nemcsak IaC struktúrák létrehozására használható, hanem bármilyen projektstruktúra kialakítására alkalmas. Az egységes projektfelépítés előnye, hogy az új csapattagok gyorsabban eligazodnak egy számukra ismeretlen projektben. Saját template is könnyedén készíthető – ehhez a forrásokban megtalálható a Boilerplate GitHub linkje.
Köszönjük, hogy elolvastad ezt a cikket!
Érdekel a téma? Kérdés merült fel a cikkel kapcsolatosan? Foglalj egy ingyenes konzultációt és nézzük meg, hogy a Code Factory csapata miben tud segíteni neked / nektek! A szolgáltatásaink listáját itt találod meg!
Források
- Code Factory Boilerplate - GitHub Link – A saját templating repositorynk az IaC projektjeinkhez.
- Gruntwork Boilerplate - GitHub Link – A tool a projektstruktúra létrehozásához (“boilerplate”) templatek alapján.
- Gruntwork Terragrunt - GitHub Link – A Terragrunt egy thin wrapper eszköz, amely lehetővé teszi, hogy az OpenTofu/Terraform skálázható legyen.
- Tool Releases - GitHub Link