Infrastructure as Code • Terraform introduction

Från klickande till kod

Mindset först: vi behandlar infrastruktur som något som kan läsas, granskas, versioneras och återskapas.

Startpunkten

Infrastructure as Code betyder inte “skript överallt”. Det betyder: infrastrukturen har en källa till sanning.

Före och efter

Det handlar om arbetssätt

Före: klicka i panelensvårt att veta vad som ändrades, svårt att upprepa, beroende av personens minne
Efter: ändra koddiff, review, historik, plan och samma resultat nästa gång
Enkel definition

IaC är en textfil som beskriver målbilden

Inte “gör först A, sedan B”. Snarare: “så här ska världen se ut”.

# målbild
server_name = "web-01"
cpu         = 2
ram_mb      = 4096
port        = 80
Varför bry sig?

Fyra saker blir direkt bättre

Historikvem ändrade vad och varför?
Repetitionsamma setup kan byggas igen
Reviewandra kan läsa planen före ändring
Återställningdu vet hur miljön ska se ut
Terraform

Terraform är ett verktyg för IaC

  • Du skriver kod i HCL
  • Terraform läser state vad finns redan?
  • Terraform frågar provider Docker, Proxmox, AWS…
  • Terraform visar plan innan något ändras
Viktig idéTerraform är inte molnet. Terraform pratar med API:er och håller ordning på förändringen.
Första riktiga exemplet

En container som kod

Det här är konkret: en nginx-container ska finnas och lyssna på port 8090.

resource "docker_container" "demo" {
  name  = "terraform-live-demo"
  image = docker_image.nginx.image_id

  ports {
    internal = 80
    external = 8090
  }
}
Arbetsflödet

Samma loop varje gång

skrivplangranskaapplyverifiera

Poängen är inte att köra snabbt. Poängen är att förstå ändringen innan den händer.

Plan

Plan är superkraften

Planen visar vad Terraform tänker skapa, ändra eller ta bort.

Terraform will perform the following actions:

  # local_file.page will be replaced
-/+ content: "purple""green"

Plan: 1 to add, 0 to change, 1 to destroy.
Live på servern

Samma kod, två målbilder

  • purple.tfvars lila sida
  • green.tfvars grön sida
  • URL http://10.0.0.77:8090
cd /opt/terraform-live-demo

terraform apply -var-file=purple.tfvars
terraform apply -var-file=green.tfvars
Variabler

Variabler gör koden återanvändbar

main.tfsjälva mönstret: container, fil, port
purple.tfvarsvärden för en variant
green.tfvarsvärden för en annan variant
Samma kodbara målbilden ändras
State

State: Terraforms minne

State kopplar kodens resurser till riktiga objekt. Utan state vet Terraform inte vad den redan äger.

terraform.tfstate

resource: docker_container.demo
real id: 2553b4c0ff87...
port: 8090
Mindset

Om det är viktigt nog att bygga, är det viktigt nog att beskriva.

Det är steget från “jag vet hur jag gjorde” till “teamet kan se hur det ska vara”.

Bra första labbar

Börja smått

1. Containernginx på en port, output med URL
2. Filgenerera config eller HTML från variabler
3. DNSpeka ett namn mot tjänsten
4. VM/LXCförst när mindsetet sitter
Git

IaC utan Git är halva poängen

  • ändring som pull request
  • plan som kommentar
  • review innan apply
  • historik när något går fel
git diff

- theme = "purple"
+ theme = "green"
Vanliga misstag

Håll det enkelt i början

För mycket på dag ettbörja inte med hela produktionen
Apply utan plandå tappar man säkerheten
Secrets i repotokens ska in via secrets/vault
Manuella ändringarskapar drift och förvirring
Övergången

När mindsetet sitter kan man bygga större

Då blir Terraform naturligt för LXC, VM, DNS, brandväggar, molnresurser och hela labbmiljöer.

Slutsats

Terraform börjar inte med syntax. Det börjar med frågan: kan vi beskriva infrastrukturen så att någon annan kan förstå den?