Hva er greia med Terraform og infrastruktur som kode? - Bratt læringskurve

DevOps-arkitekten Artūras Radzevičius svarer på alt vi lurer på - som er mye.

Artūras Radzevičius jobber som DevOps-arkitekt i Miles-selskapet Komponent. 📸: Komponent
Artūras Radzevičius jobber som DevOps-arkitekt i Miles-selskapet Komponent. 📸: Komponent Vis mer

Mens IT-infrastruktur tidligere handlet om å sette opp fysiske servere, svitsjer, rutere og lagringsløsninger i sitt eget datarom, har overgangen til moderne skyløsninger gjort at infrastruktur for de fleste utviklere nå er noe ganske abstrakt.

For mange utviklere er ikke infrastruktur noe trenger å tenke på – det er bare noe som befinner seg i datasenterne til de store skyleverandørene. De som faktisk jobber med infrastruktur (og ikke er ansatt på selve datasenteret), jobber gjerne med infrastruktur som kode (IaC eller IaaC) og mystiske verktøy som Terraform.

Men hva i alle dager er Infrastruktur som kode, og hvordan brukes Terraform til å administrere all denne infrastrukturen som befinner seg i skyen?

For å få svar på det som for undertegnede nærmest virker som svart magi, tok vi kontakt med DevOps-arkitekt Artūras Radzevičius. Han jobber i Komponent, et datterselskap av Miles.

«Terraform lar deg definere og administrere skyinfrastrukturen din på en deklarativ måte.»

Artūras, forklar hva Terraform er!

Terraform er et åpen kildekode-basert infrastruktur som kode-verktøy som lar deg definere og administrere skyinfrastrukturen din på en deklarativ måte.

Den lar deg automatisere provisjonering av ressurser på tvers av flere skyleverandører, for eksempel virtuelle maskiner, databaser, lagring, nettverk, og så videre. Dette gjør det enklere å administrere infrastruktur på en robust måte og redusere risikoen for menneskelige feil.

Du må forklare nærmere hva infrastruktur som kode er...

Infrastruktur som kode – eller IaaC – betyr at infrastruktur defineres, konfigureres og administreres ved hjelp av kode. Denne koden kan senere brukes av IaaC-verktøy.

Det er mange fordeler med IaaC, men vi kan definere fem hovedpillarer som reflekterer DevOps generelt:

  • Konsistens: Definer infrastrukturen på en konsistent og repeterbar måte. Dette sikrer at infrastrukturen alltid er konfigurert på samme måte, uansett hvem som har satt den opp.
  • Versjonskontroll: IaaC-kode kan ha versjonskontroll, som betyr at du kan spore endringer over tid og om nødvendig rulle tilbake til tidligere versjoner. Kombinerer du dette med automatisering blir det en "single source of truth" for infrastrukturen din.
  • Gjenbrukbarhet: IaaC-kode kan gjenbrukes på tvers av ulike miljøer. Det gjør det enklere å opprette nye miljøer, skalere opp infrastruktur og utføre katastrofegjenoppretting.
  • Automatisering: IaaC lar deg automatisere provisjonering og administrasjon av infrastruktur, noe som reduserer risikoen for menneskelige feil og mengden manuelt arbeid.
  • Samarbeid: IaaC-kode kan deles og man kan samarbeide om den i team. Det blir enklere å jobbe sammen og sikre at alle har den samme forståelsen når det kommer til administrasjon av infrastruktur.
«Det som gjør at Terraform skiller seg ut, er evnen til å støtte mange ulike skyleverandører og teknologier med ett enkelt verktøy.»

Finnes det andre løsninger enn Terraform?

Ja, det er andre løsninger for å håndtere infrastruktur som kode. De tre store aktørene i public cloud-verdenen har sine egne verktøy. Alternativer er blant annet AWS CloudFormation, Google Cloud Deployment Manager og Azure Resource Manager.

Det som gjør at Terraform skiller seg ut, er evnen til å støtte mange ulike skyleverandører og teknologier med ett enkelt verktøy. Terraform har et stort antall tilbydere og moduler for å administrere ressurser på tvers av ulike skyer, som AWS, Google Cloud, Microsoft Azure og andre.

Sammenlignet med andre populære IaaC-verktøy fungerer ting på samme måte i Terraform uansett hvilken skyleverandør du bruker – som syntaks, logikk, kodestruktur, og så videre. Til sammenligning kan du ikke bruke AWS CloudFormation med Azure.

Terraform bruker en enkel syntaks og gir deg en visuell representasjon av infrastrukturen. Det gjør det enklere for utviklere å forstå og modifisere infrastrukturkode.

Det at Terraform er basert på åpen kildekode og har et aktivt brukermiljø gjør det til et populært valg blant utviklere.

Hvordan hjelper Terraform utviklere og bedrifter?

Terraform er et veldig bra verktøy for å ta i bruk IaaC i bedriften. Ved å bruke Terraform får du alle fordelene med IaaC:

  • Deklarativ konfigurasjon. Du kan definere infrastrukturen på en deklarativ måte. Det betyr at du spesifiserer den ønskede tilstanden til infrastrukturen i stedet for trinnene for å komme dit.
  • Abstraksjon av tilbydere. Terraform fjerner forskjellene mellom skyleverandører og teknologier. Du skriver kode én gang og deployer det til ulike skymiljøer uten å måtte lære deg flere ulike verktøy og språk.
  • Planlegging og forhåndsvisning. Med "plan and preview"-funksjonen kan du se endringene som Terraform vil gjøre med infrastrukturen din før du iverksetter dem. Det hjelper deg med å forstå hvilke konsekvenser endringer vil få, og unngå uventet nedetid eller feil.
  • Modularitet og gjenbrukbarhet. Terraform lar deg definere infrastruktur som moduler som du kan dele og gjenbruke på tvers av ulike miljøer og prosjekter.
  • Automatisering. Terraform lar deg automatisere det å opprette, modifisere eller slette ressurser. Det sparer deg for tid og reduserer risiko for menneskelige feil.

Terraform bruker et eget språk. Hvordan fungerer det?

Terraform bruker et domenespesifikt språk (DSL) kalt HCL – HashiCorp Configuration Language til å definere infrastrukturressurser og deres avhengigheter.

HCL er et enkelt språk som kan leses av mennesker. Her er et eksempel på HCL-kode for å provisjonere en AWS EC2-instans:

image: Hva er greia med Terraform og infrastruktur som kode? - Bratt læringskurve

Terraform leser HCL-koden og lager en dependency graph av ressurser. Denne gjør det mulig å administrere opprettelse, modifisering og sletting av ressurser i riktig rekkefølge. Terraform hjelper deg også med å definere komplekse sammenhenger og betingelser mellom ressurser. Det er ellers grunnleggende funksjoner for strengmanipulasjon, ulike løkker, og grunnleggende typer variabler.

Når er det "overkill" å bruke Terraform?

Det gir mening å bruke Terraform når du trenger å adminstrere kompleks skyinfrastruktur som krever automasjon, repeterbarhet og konsistens. Terraform er et veldig bra verktøy for å administrere større infrastruktur, og det kan være spesielt nyttig når du har mange ulike miljøer som må administreres på en konsistent måte, som "development", "staging" og "production".

Terraform er også fint å bruke når du jobber med flere skyleverandører.

Det er imidlertid mange tilfeller der Terraform er overkill eller ikke det beste verktøyet for jobben. For eksempel hvis du har en enkel infrastruktur som ikke endrer seg ofte og ikke krever automatisering. Noen ganger kan det være enklere og smartere å administrere infrastrukturen manuelt eller med noen enkle skript.

Det kan også være overkill å bruke Terraform hvis du kun jobber med én enkelt skyleverandør som kan levere all funksjonaliteten du trenger.

«Terraform har en bratt læringskurve.»

Er det vanskelig å lære Terraform?

Terraform har en bratt læringskurve og kan bety økt kompleksitet med hensyn til hvordan du administrerer infrastrukturen, så det er viktig å veie fordeler og ulemper opp mot hverandre.

Det å lære Terraform kan være litt utfordrende først, spesielt hvis infrastruktur som kode er nytt for deg, eller du aldri har jobbet med denne typen verktøy. Men, som nevnt, er HCL et ganske enkelt menneske-lesbart programmeringsspråk.

For nybegynnere som vil lære Terraform vil jeg anbefale blant annet den offisielle dokumentasjonen, samt HashiCorp Learn. Dette er en plattform med interaktive kurs. Du har også boken Terraform Up & Running, samt at det finnes en rekke opplæringsvideoer på YouTube. Og så har du et stort og aktivt Terraform-community.