Hvis dit team udfører manuel serveradministration, har du måske stødt på et eller flere af følgende problemer:
I dette blogindlæg introduceres begrebet infrastructure-as-code - en proces til styring af servermiljøer og infrastruktur via maskinlæsbare definitionsfiler, der kan kildekontrolleres sammen med koden, i stedet for interaktive konfigurationsværktøjer som kommandolinjeværktøjer eller webgrænseflader. Vi vil beskrive Terraform som et basisværktøj til at opnå dette, men mange af de nævnte principper kan opnås ved hjælp af lignende værktøjer som Chef, Puppet eller Ansible.
Terraform er et open source-softwareværktøj, der tager konfigurationsfiler skrevet i et sprog kaldet HCL og udfører handlinger i overensstemmelse hermed for at foretage ændringer i en serverarkitektur.
Her er et eksempel på brug case: Vi ønsker at distribuere et hello-world containerimage til Google Cloud Run. Dette kan opnås i Terraform ved hjælp af følgende kode:
Du har måske bemærket, at disse konfigurationsfiler er skrevet i en deklarativ programmeringsstil. Den beskriver, hvilken infrastruktur vi ønsker, men ikke hvordan til at sætte den op. Terraform tager sig af den del og giver os samtidig en enkelt grænseflade i stedet for flere web-GUI'er og CLI'er.
Lad os se nærmere på dette kodestykke et øjeblik. De første to blokke beskriver nogle konfigurationsdetaljer for Terraform og er ikke særlig relevante for dette blogindlæg. Den tredje blok beskriver en ressource, som er et infrastrukturobjekt, der administreres af Terraform. Når du kører terraform apply, vil Terraform analysere forskellen mellem applikationens aktuelle tilstand og den tilstand, der er beskrevet i HCL-filen, og derefter udføre de tilsvarende migreringer. I denne case vil dette bestå i at oprette en Google Cloud Run-tjeneste kaldet "cloudrun-srv" ved hjælp af "hello"-aftrykket.
Terraform er blot et eksempel på infrastruktur som kode-værktøj og har mange fordele i forhold til manuel infrastrukturstyring som f.eks.
Det tredje princip bag Agile Manifestet siger følgende:
Levere fungerende software ofte, fra et par uger til et par måneder, med en præference for den kortere tidshorisont.
Del af bygning arbejdssoftware er at opbygge den infrastruktur, som softwaren er afhængig af. En server, der er afhængig af en database, er ikke et fungerende software, hvis den ikke har en database at oprette forbindelse til. For at kunne levere fungerende software ofte skal man have tillid til integriteten af kodebasen og repositoriet, således at en gren altid kan skubbes til produktion og fortsat være fungerende software. Når et stykke kode ikke angiver sin infrastrukturtilstand korrekt, kan det ophøre med at være fungerende software, hvis infrastrukturen går i stykker.
Kontinuerlig levering af deklarativ infrastruktur delegerer integriteten til kodebasen, så man altid kan implementere en hvilken som helst gren og vide, at platformen, den kører på, vil migrere i overensstemmelse hermed. Dette giver udviklerne mulighed for at levere fungerende software oftere og øger projektets smidighed.
Af ovennævnte grunde kan Terraform (og infrastruktur som kode generelt) være meget nyttige værktøjer til at levere fungerende software hurtigere, med bedre dokumentation, samarbejde og fleksibilitet. For at komme i gang med at integrere Terraform med din eksisterende infrastruktur kan vi anbefale at starte med den fremragende dokumentation lavet af HashiCorp, firmaet bag Terraform.