Hvis du jobber med Docker, Kubernetes, GitHub Actions eller praktisk talt et hvilket som helst moderne DevOps-verktøy, bruker du allerede YAML, enten du innser det eller ikke. YAML (som står for "YAML Ain't Markup Language" — ja, det er et rekursivt akronym) ble designet for å være det mest lesbare dataformatet for mennesker.
La oss lære det sammen, ett konsept om gangen.
Hvorfor YAML finnes
JSON er flott for maskiner, men har du noen gang prøvd å skrive en 200-linjers konfigurasjonsfil i JSON? Ingen kommentarer, obligatoriske doble anførselstegn overalt, fem nivåer med nestede krøllparenteser... det blir smertefullt raskt. YAML ble laget for å løse dette. Det bruker innrykk i stedet for parenteser, noe som gjør konfigurasjoner rene og lette å skanne.
Her er de samme dataene i JSON og YAML. Ser du forskjellen?
JSON:
YAML:
Det grunnleggende du trenger å vite
Nøkkel-verdi-par er grunnmuren i YAML. Bruk bare kolon og mellomrom: name: John Doe. Det er det — ingen anførselstegn nødvendig for de fleste strenger.
Innrykk er alt. YAML bruker mellomrom (aldri tab!) for å vise struktur. Standarden er 2 mellomrom per nivå. Gjør dette feil og filen din knekker. Seriøst — YAML-spesifikasjonen er streng på dette.
Her er et eksempel på nestede data:
Lister bruker en bindestrek og et mellomrom. Her er en handleliste i YAML:
Strenger: vanskeligere enn du tror
De fleste strenger trenger ikke anførselstegn i YAML. Men du bør bruke dem når de inneholder kolon, hashmerker, eller kan bli feiltolket. For eksempel tolkes country: NO som country: false i YAML 1.1 fordi NO behandles som en boolean. Dette er det beryktede "Norge-problemet" og det har forårsaket ekte feil i produksjon.
Er du i tvil, sett det i anførselstegn: country: "NO"
Flerlinjestrenger er fantastiske
Her er det YAML virkelig skinner. Pipe | bevarer linjeskift (flott for skript), mens > bretter dem til mellomrom (flott for lange beskrivelser):
Ankere og aliaser: DRY-konfigurasjonsfiler
En av YAMLs kuleste funksjoner. Definer noe én gang med &, referer til det senere med *:
production-blokken arver retries: 3 fra defaults, men overstyrer timeout. Dette er utrolig nyttig i GitHub Actions-arbeidsflyter og Docker Compose-filer der du ellers ville gjentatt de samme konfigurasjonsblokkene om og om igjen.
De 4 vanligste YAML-feilene
- Tab i stedet for mellomrom — Editoren din kan sette inn tab som standard. Konfigurer den til å bruke mellomrom for YAML-filer. Seriøst, gjør det nå.
- Boolean-feller —
yes,no,on,off,true,falseer ALLE boolske verdier i YAML 1.1. Bruk anførselstegn hvis du mener strengen. - Kolon i verdier —
message: Error: file not foundvil knekke fordi YAML ser en andre nøkkel-verdi-separator. Bruk anførselstegn:message: "Error: file not found" - Etterfølgende mellomrom — Usynlige mellomrom på slutten av linjer kan forårsake merkelig parsing-oppførsel. Bruk en editor som fremhever etterfølgende mellomrom.
Hvor du bruker YAML hver dag
YAML er konfigurasjonsspråket for Docker Compose, Kubernetes-manifester, GitHub Actions, GitLab CI, Ansible-playbooks og titalls andre verktøy. Hvis du gjør noe innen DevOps eller sky, er YAML-ferdigheter uunnværlige.
Har du en YAML-fil som oppfører seg rart? Lim den inn i vår YAML Validator for å finne problemet umiddelbart.
YAML i praksis: Docker Compose-eksempel
La oss se på en realistisk Docker Compose-fil — den typen du faktisk ville skrevet for en webapplikasjon:
Legg merke til et par ting: miljøvariabler kan skrives som en liste (- KEY=value) eller som en mapping (KEY: value). Begge fungerer i Docker Compose — men velg én stil og hold deg til den for konsistens.
YAML i praksis: GitHub Actions CI-pipeline
Her er en GitHub Actions-arbeidsflyt som kjører tester ved hvert push:
Dette er rent, lesbart og selvforklarende. Forestill deg å skrive den samme arbeidsflyten i JSON — den ville vært dobbelt så lang og mye vanskeligere å skanne visuelt.
YAML vs JSON vs TOML: Rask sammenligning
YAML er ikke det eneste alternativet til JSON for konfigurasjonsfiler. TOML er et annet populært valg (brukt av Rusts Cargo.toml og Pythons pyproject.toml). Slik sammenligner de seg:
| Egenskap | YAML | JSON | TOML |
| Kommentarer | Ja (#) | Nei | Ja (#) |
| Lesbarhet | Utmerket | God | Meget god |
| Nestede strukturer | Innrykk | Klammeparenteser | Seksjoner/punkter |
| Flerlinjestrenger | Ja (` | , >`) | Nei | Ja (""") |
| Typeinferens | Ja (kan være farlig) | Eksplisitt | Ja (tryggere) |
| Etterfølgende kommaer | N/A | Ikke tillatt | Tillatt |
| Økosystem | DevOps, K8s, CI/CD | Web APIs, Node.js | Rust, Python |
Avansert YAML: Flere dokumenter i én fil
YAML støtter flere dokumenter i en enkelt fil, adskilt med ---. Dette brukes ofte i Kubernetes for å deploye flere ressurser på én gang:
----separatoren forteller YAML-parseren "dette er et nytt dokument." Du kan kjøre kubectl apply -f på en slik fil og Kubernetes vil opprette begge ressursene.
YAML-sikkerhet: Billion Laughs-angrepet
Her er noe de fleste nybegynnere ikke vet: YAML kan være en sikkerhetsrisiko hvis du ikke er forsiktig. "Billion Laughs"-angrepet bruker ankere og aliaser for å skape eksponentiell datautvidelse:
Denne lille filen kan utvide seg til gigabyte i minnet og krasje applikasjonen din. Lærdommen? Pars aldri upålitelig YAML-inndata. Bruk sikre lastefunksjoner som yaml.safe_load() i Python i stedet for yaml.load(), og sett minnebegrensninger på YAML-parseren din.
Konvertering mellom YAML og JSON
Siden YAML er et supersett av JSON (ja, gyldig JSON er også gyldig YAML!), er konvertering mellom de to enkel. Dette er nyttig når du vil bruke YAMLs lesbarhet for å skrive konfigurasjoner, men trenger JSON for et API eller verktøy som krever det.
Vår YAML til JSON-konverterer håndterer dette umiddelbart — bare lim inn YAMLen din og få ren JSON-utdata. Den andre veien? All JSON du har er allerede gyldig YAML.
Prøv det selv
Enten du feilsøker et ødelagt Kubernetes-manifest eller setter opp en ny CI-pipeline, vil disse verktøyene spare deg tid:
- YAML Formatter — Fiks innrykk og gjør YAML-filene dine rene og konsistente.
- YAML Validator — Fang opp syntaksfeil før de ødelegger deploymenten din.
- YAML til JSON-konverterer — Konverter mellom formater når du trenger å samarbeide med JSON-only-verktøy.
YAML har sine særheter, men når du først blir komfortabel med innrykksbasert syntaks, vil du sette pris på hvor mye renere konfigurasjonsfilene dine ser ut sammenlignet med JSON-alternativet.