Gergő Nagy

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.

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.

Boilerplate CLI - template Type
Boilerplate CLI - template Type

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.

Boilerplate CLI - InfrastructurePreset
Boilerplate CLI - InfrastructurePreset

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.

Repository - Folder structure
Repository - Folder structure
.
├── 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.

Boilerplate CLI - Units
Boilerplate CLI - Units

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

Vissza a cikkekhez