Csenge Papp

Papp Csenge

  · 4 min read

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?

Bevezetés

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.

Supported languages for Pulumi

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

Milyen problémákat oldhat meg számunkra a Pulumi?

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.

Pulumi AI

Mennyire volt nehéz áttérni a Terraformról a Pulumira?

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.

Pulumi Converter

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.

Pulumi CICD

Hogyan építettük fel a projektünket?

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.

Pulumi project's stack settings files

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

Összefoglalás

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!

Back to Blog