Terraform vagy Pulumi
Milyen különbségek vannak a Terraform/Terragrunt és a Pulumi között? Mik a hasonlóságok? Nehéz egy Terragruntban készített projektet Pulumiba átírni?
Milyen különbségek vannak a Terraform/Terragrunt és a Pulumi között? Mik a hasonlóságok? Nehéz egy Terragruntban készített projektet Pulumiba átírni?
Az elmúlt hónapban elkezdtünk kísérletezni a Pulumival. Korábban tipikusan Terraformot, illetve Terragruntot használtunk a különböző AWS infrastruktúrák felállítására és kezelésre. Kezdetben azért kezdtünk el kísérletezni a Pulumival, mert egy nyílt forráskódú eszköz, amely népszerű nyelveket használ az infrastrukta, mint kód megvalósítására, ez pedig számos lehetőséget nyit az egyénibb, rugalmasabb megoldásoknak.
A célunk az volt, hogy egy moduláris Pulumi kódot hozzunk létre. Olyat, amiből könnyen tudunk részleteket úrahasznosítani később más, összetettebb projektekben. A projekt repója itt nézhtő meg: GitHub - codefactoryhu/pulumi-starter-kit
Azért (is) szerettük meg a Terragruntot, mert lehetővé tette számunkra, hogy több környezetet kezeljünk. A Pulumiban ez még elegánsabban megoldható a stackekkel, ahol a környezetek közötti különbségeket a stackek külön konfigurációs fájljaiban kezelhetjük, így nem kell másolatokat készítenünk ugyanannak az infrastruktúrának a leírásából.
$ pulumi stack ls
NAME LAST UPDATE RESOURCE COUNT URL
dev 4 days ago 0 https://app.pulumi.com/user/aws-starter-kit/dev
prod 3 days ago 0 https://app.pulumi.com/user/aws-starter-kit/prod
test 16 seconds ago 22 https://app.pulumi.com/user/aws-starter-kit/test
Mivel a Pulumi lehetővé teszi több programozási nyelv használatát, nincs olyan szigorú projektszerkezet, amelyet követnünk kell, szemben az eddig használt Terragrunttal. Ez elsőre kicsit bonyolult, hiszen rengeteg dolgot át kell gondolnunk, de nagyon hasznos is lehet. Például sokkal könnyebbé teszi, hogy egynél többet hozzunk létre ugyanabból az erőforrásból (például három azonos S3 bucket-et ) ciklusokkal, ami nagy fejfájást okoz, ha Terragruntot használunk Terraform modulokkal.
A Terraformmal ellentétben, amely nemrégiben Business Source (BSL) licencmodellre váltott, a Pulumi teljesen nyílt forráskódú Apache 2.0 licenc alatt áll. A Pulumi számos érdekes újdonsággal is rendelkezik, mint például a Pulumi AI, amellyel a promtokból lehet Pulumi kódot generálni.
Egy nagyobb projekt blokkról blokkra történő felépítése nagyon időigényes feladat. A mi helyzetünkben alapból volt egy Terragruntban megírt AWS infrastruktúránk, amitnek egy részét szerettük volna Pulumiban megvalósítani. Szerencsére a Pulumi kínál pár lehetőséget arra, hogy ez a migráció kevésbé legyen fájdalmas.
Először is ott a Pulumi Converter, amelynek van egy online verziója, de futtatható a pulumi convert —from terraform paranccsal is. Természetesen ez nem fogja tudni strukturálni a projeket, de nagy segítség lehet, hogy gyorsabbá tegye a folyamatot. Nekünk ezt nehezebb volt használni, mivel az eredeti projektünk Terragruntban volt.
A Pulumi segítségével meglévő infrastruktúrát is lehet importálni. A pulumi import parancs a létező AWS erőforrásokból Pulumi kódot generál tetszőleges nyelven, és beépíti a Pulumi state-be. Ez megspórolhatunk néhány órát a különböző attribútumok kereséséből a Pulumi dokumentációjában. Végül úgy döntöttünk, hogy kombináljuk ezeket az eszközöket a Pulumi AI-val, hogy gyorsabbá tegyük a migrációt.
Az is nagyon egyszerű volt, hogy a meglévő pipeline-aink logikáját a Terragrunt kód teszteléséhez és telepítéséhez megtartsuk a Pulumi projektben, mivel nagyon hasonlóan működnek. A Pulumi útmutatókat és erőforrásokat is biztosít ehhez. Ezek elérhetőek például a Github Workflowhoz a Gitlabhoz, a Jenkinshez és a TeamCityhez, hogy csak néhányat említsünk.
Egy másik dolog, amit nagyon szerettünk a Terragruntban, az a terragrunt.hcl konfigurációs fájl használata volt. Ez nagyon jól jött, mert lehetővé tette számunkra, hogy bármilyen változót definiáljunk, amit a projektben használtunk. Ezzel létre tudtunk hozni egyetlen fájlt, amelyben láthattuk és módosíthattuk a AWS-erőforrások tulajdonságait. Akár egy adatbázist akartunk frissíteni a következő elérhető verzióra, akár nagyobb ec2 példányokat akartunk hozzáadni egy EKS clusterhez, ez volt az egyetlen fájl, amit meg kellett változtatnunk. Ez tisztává és kezelhetővé tette a projektet.
Ezért is örültünk nagyon, amikor láttuk, hogy ez Pulumiban is lehetséges a pulumi cli, illetve a yaml konfigurációs fájlok segítségével is. A változókat globálisan vagy specifikusan minden egyes környezetet reprezentáló stackre is be lehet állítani. Példának itt van a Pulumi.dev.yaml konfigurációs fájlunk egy része:
# GLOBAL
aws-starter-kit:project: aws-starter-kit
aws-starter-kit:env: dev
aws-starter-kit:availabilityZone:
- eu-west-2a
- eu-west-2b
- eu-west-2c
aws:defaultTags:
tags:
project: aws-starter-kit
env: dev
version: "v1.2.26"
# VPC
aws-starter-kit:vpc:
name: pulumi-vpc
cidr: 10.0.0.0/16
instanceTenancy: default
numberOfAvailabilityZones: 3
enableDnsHostnames: true
enableDnsSupport: true
enableFlowLogs: true
A Pulumi egy folyamatosan fejlődő eszköz, amelyet mindenképpen érdemes kipróbálni. Sok olyan problémát megold, amellyel a Terraform használatával szembesültünk, mivel sokkal rugalmasabb, és lehetővé teszi a saját kódlogika megírását.
Érdekel az IaC-megoldások használata, vagy a felhőmegoldások területén lenne szükséged képzett és tapasztalt partnerre? Ha igen, keress minket bizalommal!