Hva er infrastruktur som kode (IaC)?


Hva er infrastruktur som kode (IaC)?

Det korte svaret er at Infrastructure as Code (IAC) er en måte å beskrive, styre og provisjonere infrastruktur på. Det vil si, alt fra servere, nettverk, databaser og andre ting, og i dag er det kanskje vanligst at man provisjonerer disse tingene i en av de store skyleverandørene som Google Cloud, Azure og Amazon Web Services (AWS).

Infrastruktur som kode har endret hvordan IT-ressurser håndteres og styres. Med infrastruktur som kode kan du bruke prinsipper fra programmering, slik som versjoneringskontroll (Git), samarbeid og kontinuerlig integrasjon og levering (CI/CD) slik at organisasjoner kan bli mer effektive og automatisere prosesser.

Verktøyene reduserer risiko for menneskelig feil, og skaper hurtige og sikre deployments (utrullinger). Måten det ofte fungerer på er at man definerer en ønsket tilstand til infrastrukturen, eksempelvis at en Deployment i Kubernetes skal kjøre en Docker-fil med en spesifisert tag eller en server skal ha installert Ubuntu, så sørger verktøyet for at det blir sånn. Dette skiftet har også vært med på å skape en ny rolle i IT-organisasjoner, nemlig DevOps (en slags sammensmeltet rolle mellom utvikler og IT-driftspersonell).

Verktøyene for infrastruktur som kode

Det finnes mange verktøy. Det første verktøyet som tok verden med storm var nok Chef, som ble lansert i 2009. Siden den gang har det kommet mange verktøy, slik som Puppet, Terraform, Ansible, Pulumi, CloudFormation, CDK, Serverless og Helm.

Den mest populære i dag? Det er nok Terraform fra Hashicorp. Terraform kom ut i 2014, og verktøyet lar deg definere infrastruktur som kode i HCL (Hashicorp Configuration Language).

provider "aws" { region = "us-west-2" }

resource "aws_instance" "example" {
  ami = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"

  tags = { Name = "ExampleInstance" }
}

Det som er fint med Terraform er at det er et stort økosystem av moduler, et stort community og det er enkelt å komme i gang.

Personlig har jeg blitt veldig glad i Pulumi, som er et verktøy som lar deg definere infrastruktur som kode i et hvilket som helst programmeringsspråk.

Det er også et stort økosystem av moduler, og det er enkelt å komme i gang.

Eksempel:

import * as pulumi from '@pulumi/pulumi';
import * as aws from '@pulumi/aws';

const example = new aws.ec2.Instance('example', {
  ami: 'ami-0c55b159cbfafe1f0',
  instanceType: 't2.micro',
  tags: {
    Name: 'ExampleInstance',
  },
});

En av fordelene med Pulumi er at det lar deg bruke et hvilket som helst programmeringsspråk. Begge verktøyene jeg har vist frem her er basert på åpen kildekode. Personlig har jeg bidratt både til Terraform og Pulumi (kanskje spesielt Pulumis GitHub Action-ting).

Hva hjelper dette deg?

Jeg tror det gir mening for de fleste å bruke infastruktur som kode på et eller annet tidspunkt, på et eller annet nivå, når man lager et digitalt produkt. Det trenger kanskje ikke å være de mest automatiserte løsningene, eller en skreddersydd plattform slik som NAV bruker.

Infrastruktur som kode tilbyr en måte å få konsekvente miljøer (det er likt i produksjon som i testing, for eksempel), større grad av samarbeid, hastighet og smidighet. Det gir en mer pålitelig og sikker infrastruktur, og tror jeg er grunn nok for de fleste.

Hva er neste steg?

Vær pragmatisk – ikke prøv å gjør alt på en gang. Start med å ta i bruk infrastruktur som kode i liten skala, og se hvordan det fungerer. De fleste verktøy, slik som Terraform og Pulumi, lar deg starte med å definere enkle ting, og så kan du bygge på etter hvert.

Den lever også fint sammen med det du har satt opp manuelt inne i webkonsollen til skyleverandøren din. Faktisk kan du importere eksisterende ressurser inn i Pulumi og Terraform, slik at du kan få en oversikt over hva du har, og så kan du bygge videre på det.

Om du vil lære mer så hjelper gjerne en av våre rådgivere deg. Om Pulumi høres interessant ut, så har vi meetups i Oslo Pulumi User Group, som jeg er med å arrangerer. Om du vil bare skravle litt om infrastruktur som kode, eller skyleverandører eller annet, så er du velkommen til vår Discord-server. Her finner du de fleste av oss i Bjerk!