Wenn Sie mit Docker, Kubernetes, GitHub Actions oder so ziemlich jedem modernen DevOps-Tool arbeiten, verwenden Sie bereits YAML, ob Sie es merken oder nicht. YAML (steht für „YAML Ain't Markup Language" — ja, ein rekursives Akronym) wurde entwickelt, um das menschenlesbarste Datenformat überhaupt zu sein.

Lassen Sie es uns gemeinsam lernen, ein Konzept nach dem anderen.

Warum YAML existiert

JSON ist großartig für Maschinen, aber haben Sie jemals versucht, eine 200-Zeilen-Konfigurationsdatei in JSON zu schreiben? Keine Kommentare, überall doppelte Anführungszeichen erforderlich, fünf Ebenen tief verschachtelte geschweifte Klammern... das wird schnell mühsam. YAML wurde geschaffen, um dieses Problem zu lösen. Es verwendet Einrückung statt Klammern, was Konfigurationen sauber und übersichtlich macht.

Hier sind die gleichen Daten in JSON und YAML. Sehen Sie den Unterschied?

JSON:

json

YAML:

yaml

Die Grundlagen, die Sie kennen müssen

Schlüssel-Wert-Paare sind das A und O von YAML. Verwenden Sie einfach einen Doppelpunkt und ein Leerzeichen: name: John Doe. Das war's — für die meisten Strings sind keine Anführungszeichen nötig.

Einrückung ist alles. YAML verwendet Leerzeichen (niemals Tabs!) um die Struktur darzustellen. Der Standard ist 2 Leerzeichen pro Ebene. Machen Sie das falsch und Ihre Datei ist kaputt. Im Ernst — die YAML-Spezifikation ist dabei streng.

Hier ist ein Beispiel für verschachtelte Daten:

yaml

Listen verwenden einen Bindestrich und ein Leerzeichen. Hier ist eine Einkaufsliste in YAML:

yaml

Strings: Kniffliger als man denkt

Die meisten Strings brauchen in YAML keine Anführungszeichen. Aber Sie sollten sie verwenden, wenn sie Doppelpunkte, Rauten enthalten oder falsch interpretiert werden könnten. Zum Beispiel wird country: NO in YAML 1.1 als country: false interpretiert, weil NO als Boolean behandelt wird. Das ist das berüchtigte „Norwegen-Problem" und es hat echte Bugs in Produktion verursacht.

Im Zweifel setzen Sie es in Anführungszeichen: country: "NO"

Mehrzeilige Strings sind fantastisch

Hier zeigt YAML wirklich seine Stärken. Der Pipe-Operator | behält Zeilenumbrüche bei (ideal für Skripte), während > sie zu Leerzeichen faltet (ideal für lange Beschreibungen):

yaml
yaml

Anker und Aliase: DRY-Konfigurationsdateien

Eines der coolsten Features von YAML. Definieren Sie etwas einmal mit &, referenzieren Sie es später mit *:

yaml

Der production-Block erbt retries: 3 von defaults, überschreibt aber timeout. Das ist unglaublich nützlich in GitHub Actions Workflows und Docker Compose-Dateien, wo Sie sonst die gleichen Konfigurationsblöcke immer wieder wiederholen würden.

Die 4 häufigsten YAML-Fehler

  • Tabs statt Leerzeichen — Ihr Editor fügt möglicherweise standardmäßig Tabs ein. Konfigurieren Sie ihn so, dass er Leerzeichen für YAML-Dateien verwendet. Im Ernst, machen Sie das jetzt.
  • Boolean-Fallenyes, no, on, off, true, false sind ALLE Booleans in YAML 1.1. Setzen Sie Anführungszeichen, wenn Sie den String meinen.
  • Doppelpunkte in Wertenmessage: Error: file not found bricht ab, weil YAML einen zweiten Schlüssel-Wert-Trenner sieht. Verwenden Sie Anführungszeichen: message: "Error: file not found"
  • Nachgestellte Leerzeichen — Unsichtbare Leerzeichen am Zeilenende können seltsames Parsing-Verhalten verursachen. Verwenden Sie einen Editor, der nachgestellte Leerzeichen hervorhebt.

Wo Sie YAML jeden Tag verwenden

YAML ist die Konfigurationssprache für Docker Compose, Kubernetes-Manifeste, GitHub Actions, GitLab CI, Ansible Playbooks und Dutzende mehr. Wenn Sie irgendetwas mit DevOps oder Cloud machen, ist YAML-Kompetenz unverzichtbar.

Haben Sie eine YAML-Datei, die sich merkwürdig verhält? Fügen Sie sie in unseren YAML Validator ein, um das Problem sofort zu finden.

Praxisbeispiel: Docker Compose

Schauen wir uns eine realistische Docker Compose-Datei an — die Art von Datei, die Sie tatsächlich für eine Webanwendung schreiben würden:

yaml

Beachten Sie ein paar Dinge: Die Umgebungsvariablen können als Liste (- KEY=value) oder als Mapping (KEY: value) geschrieben werden. Beides funktioniert in Docker Compose — aber wählen Sie einen Stil und bleiben Sie der Konsistenz halber dabei.

Praxisbeispiel: GitHub Actions CI-Pipeline

Hier ist ein GitHub Actions Workflow, der bei jedem Push Tests ausführt:

yaml

Das ist sauber, lesbar und selbsterklärend. Stellen Sie sich vor, den gleichen Workflow in JSON zu schreiben — er wäre doppelt so lang und visuell viel schwerer zu erfassen.

YAML vs JSON vs TOML: Schnellvergleich

YAML ist nicht die einzige Alternative zu JSON für Konfigurationsdateien. TOML ist eine weitere beliebte Wahl (verwendet von Rusts Cargo.toml und Pythons pyproject.toml). So vergleichen sie sich:

MerkmalYAMLJSONTOML
KommentareJa (#)NeinJa (#)
LesbarkeitAusgezeichnetGutSehr gut
Verschachtelte StrukturenEinrückungKlammernSektionen/Punkte
Mehrzeilige StringsJa (`, >`)NeinJa (""")
TypinferenzJa (kann gefährlich sein)ExplizitJa (sicherer)
Nachgestellte KommasN/ANicht erlaubtErlaubt
ÖkosystemDevOps, K8s, CI/CDWeb APIs, Node.jsRust, Python

Fortgeschrittenes YAML: Mehrere Dokumente in einer Datei

YAML unterstützt mehrere Dokumente in einer einzigen Datei, getrennt durch ---. Dies wird häufig in Kubernetes verwendet, um mehrere Ressourcen auf einmal bereitzustellen:

yaml

Der ----Trenner sagt dem YAML-Parser „dies ist ein neues Dokument." Sie können kubectl apply -f auf eine solche Datei anwenden und Kubernetes erstellt beide Ressourcen.

YAML-Sicherheit: Der Billion-Laughs-Angriff

Hier ist etwas, das die meisten Anfänger nicht wissen: YAML kann ein Sicherheitsrisiko sein, wenn Sie nicht aufpassen. Der „Billion Laughs"-Angriff nutzt Anker und Aliase, um exponentielles Datenwachstum zu erzeugen:

yaml

Diese winzige Datei kann sich im Speicher auf Gigabytes ausdehnen und Ihre Anwendung zum Absturz bringen. Die Lektion? Parsen Sie niemals nicht vertrauenswürdige YAML-Eingaben. Verwenden Sie sichere Ladefunktionen wie yaml.safe_load() in Python statt yaml.load() und setzen Sie Speicherlimits für Ihren YAML-Parser.

Zwischen YAML und JSON konvertieren

Da YAML eine Obermenge von JSON ist (ja, gültiges JSON ist auch gültiges YAML!), ist die Konvertierung zwischen beiden unkompliziert. Das ist nützlich, wenn Sie YAMLs Lesbarkeit zum Schreiben von Konfigurationen nutzen möchten, aber JSON für eine API oder ein Tool benötigen, das es erfordert.

Unser YAML zu JSON Konverter erledigt das sofort — fügen Sie einfach Ihr YAML ein und erhalten Sie saubere JSON-Ausgabe. In die andere Richtung? Jedes JSON, das Sie haben, ist bereits gültiges YAML.

Probieren Sie es selbst aus

Ob Sie ein kaputtes Kubernetes-Manifest debuggen oder eine neue CI-Pipeline einrichten, diese Tools sparen Ihnen Zeit:

  • YAML Formatter — Korrigieren Sie Einrückungen und machen Sie Ihre YAML-Dateien sauber und konsistent.
  • YAML Validator — Fangen Sie Syntaxfehler ab, bevor sie Ihr Deployment kaputt machen.
  • YAML zu JSON Konverter — Konvertieren Sie zwischen Formaten, wenn Sie mit JSON-only-Tools zusammenarbeiten müssen.

YAML hat seine Eigenheiten, aber sobald Sie sich an die einrückungsbasierte Syntax gewöhnt haben, werden Sie zu schätzen wissen, wie viel sauberer Ihre Konfigurationsdateien im Vergleich zur JSON-Alternative aussehen.