Lernpfad
Im Laufe der Jahre habe ich mit unzähligen Konfigurationsdateien gearbeitet, und YAML ist mir wegen seiner Einfachheit und Lesbarkeit besonders aufgefallen. Ob Workflows in Kubernetes, Services in Docker oder die Strukturierung von API-Requests: YAML macht komplexe Konfigurationen beherrschbar. Die klare, einrückungsbasierte Struktur verzichtet auf den Ballast von Formaten wie XML und bleibt trotzdem flexibel.
In diesem Guide führe ich dich durch Syntax, Struktur, fortgeschrittene Features und Best Practices von YAML, damit du sicher damit arbeiten kannst.
Was ist YAML?
YAML (Yet Another Markup Language / YAML Ain’t Markup Language) ist ein Datenserialisierungsformat, das Lesbarkeit und einfache Handhabung in den Vordergrund stellt. Während XML mit HTML-ähnlichen verschachtelten Tags arbeitet und JSON geschweifte Klammern und Anführungszeichen nutzt – ähnlich wie Python-Dictionaries –, ist YAML kompakter und verwendet Einrückungen zur Strukturierung. Das ist deutlich menschenfreundlicher.
YAML unterstützt verschiedene Datentypen, darunter Skalare (Strings, Zahlen, Booleans), Sequenzen (Listen) und Zuordnungen (Key-Value-Paare). Es wird häufig in Konfigurationsdateien, für Infrastrukturautomatisierung und Datenaustausch verwendet – insbesondere in Tools wie Kubernetes, Docker und Ansible.
Außerdem ist YAML ein Superset von JSON, das heißt: Gültige JSON-Dateien lassen sich als YAML parsen. YAML-Dateien haben typischerweise die Endung .yaml oder .yml.
Mehr über YAML findest du auch auf der Website.
YAML-Syntax und -Struktur
In diesem Abschnitt schauen wir uns die Grundprinzipien der YAML-Syntax an – inklusive Key-Value-Paaren, Listen, verschachtelten Daten und Kommentaren.
Grundlegende Syntaxregeln
Es gibt ein paar Basisregeln für YAML:
- Einrückungen mit Leerzeichen definieren die Struktur – Tabs vermeiden!
- Key-Value-Paare folgen dem Muster
key: value, ähnlich wie in anderen Sprachen. - Bindestriche am Zeilenanfang kennzeichnen Listen.
- Mit
#beginnst du Kommentarzeilen.
# Hier ein YAML-Beispiel
name: John Doe
age: 30
skills:
- Python
- YAML
Key-Value-Paare
YAML stellt Daten als Key-Value-Paare dar, ähnlich wie Dictionaries in Python. So werden häufig Informationen für unterschiedliche Konfigurationsdateien und Einstellungen notiert. Strings oder Keys müssen nicht in Anführungszeichen gesetzt werden – schreibe einfach die benötigten Keys und Werte:
location: New York
country: USA
security-level: user
Listen in YAML
Listen werden mit Bindestrichen (-) dargestellt. Damit kannst du mehrere Objekte unter einem einzigen Key auflisten. In Markup-Editoren erscheinen sie oft visuell als Aufzählungspunkte.
fruits:
- Apple
- Banana
- Cherry
Verschachtelte Daten
Verschachtelte Strukturen ermöglichen hierarchische Daten mittels Einrückungen. Denk daran wie an verschachtelte Dictionaries. Mit Einrückungen gibst du an, welche Keys Unterpunkte anderer Keys sind.
person:
name: Alice
details:
age: 25
city: London
Kommentare
Kommentare beginnen mit # und werden von YAML-Parsern ignoriert. Es handelt sich um einzeilige Kommentare.
# Das ist ein Kommentar
username: admin
password: secret
Erweiterte YAML-Features
YAML bietet leistungsstarke Funktionen wie mehrzeilige Strings, Datentypen sowie Anker und Aliasse, die Dokumente effizienter und strukturierter machen. In diesem Abschnitt schauen wir uns diese Möglichkeiten anhand praktischer Beispiele an.
Mehrzeilige Strings
YAML unterstützt mehrzeilige Strings mit | (wörtlicher Block) oder > (gefalteter Block).
- Der wörtliche Block
|erzeugt für jeden Zeilenumbruch ein neues\n. - Der gefaltete Block
>erzeugt nur bei aufeinanderfolgenden Zeilenumbrüchen eine neue Zeile.
literal: |
This is a
multi-line string.
folded: >
This is another
multi-line string.
Am besten versteht man das am ausgegebenen Text.
- Für den
|(wörtlicher Block):
This is a
multi-line string.
- Für den
>(gefalteter Block):
This is another multi-line string.
Datentypen in YAML
YAML unterstützt verschiedene Datentypen, darunter Strings, Zahlen, Booleans und Null-Werte. Typen werden meist automatisch anhand des Formats erkannt, können aber auch explizit definiert werden.
Das folgende Beispiel zeigt die Verwendung grundlegender Datentypen in YAML:
string_implicit: Hello, YAML! # Keine Anführungszeichen nötig, außer bei Bedarf
string_double_quoted: "Supports escape sequences like \n and \t"
string_single_quoted: 'Raw text, no escape sequences'
integer: 42 # Ganze Zahlen
float: 3.14 # Zahlen mit Dezimalstellen
boolean_true: true
boolean_false: false
null_value: null # Null-Wert
null_tilde: ~ # Alternative Darstellung für null
YAML erlaubt bei Bedarf explizite Typdeklarationen mit !!type:
explicit_string: !!str 123 # Erzwingt, dass 123 ein String ist
explicit_integer: !!int "42" # Erzwingt, dass "42" ein Integer ist
explicit_float: !!float "3.14" # Erzwingt, dass "3.14" ein Float ist
Da YAML häufig für strukturierte Daten genutzt wird, unterstützt es:
- Listen (Sequenzen):
fruits:
- Apple
- Banana
- Cherry
- Dictionaries (Mappings):
person:
name: Alice
age: 30
is_student: false
Anker und Aliasse
Mit Ankern (&) kannst du wiederverwendbare Werte definieren und sie später mit Aliasen (*) referenzieren. So reduzierst du Redundanz in Konfigurationsdateien – sie werden übersichtlicher und leichter zu pflegen.
defaults: &default_settings
retries: 3
timeout: 30
server1:
host: example.com
retries: *default_settings # Verwendet den Wert von retries aus defaults erneut
Mit der Syntax <<: kannst du Key-Value-Paare aus einem Anker in ein anderes Mapping mergen. Existiert ein Key in beiden, überschreibt der neue Wert den ursprünglichen.
defaults: &default_settings
retries: 3
timeout: 30
server1:
<<: *default_settings # Merged alle Key-Value-Paare aus default_settings
host: example.com # Dieser Key wird zu den gemergten Daten hinzugefügt
So sieht die final aufgelöste Struktur aus:
server1:
retries: 3
timeout: 30
host: example.com
Anker und Aliasse sind besonders in großen Konfigurationsdateien nützlich, in denen sich Werte sonst häufig wiederholen würden. Sie helfen, YAML-Dateien DRY (Don't Repeat Yourself) zu halten und Updates zu vereinfachen.
Häufige Anwendungsfälle für YAML
YAML ist in Softwareentwicklung, Infrastrukturautomatisierung und API-Management weit verbreitet. Dank der gut lesbaren Syntax ist es ein bevorzugtes Format für Konfigurationen, Datenserialisierung und Infrastructure as Code (IaC). Schauen wir uns die häufigsten Einsatzszenarien an.
Konfigurationsdateien
YAML wird breit für Konfigurationen in Anwendungen wie Docker Compose, Kubernetes und CI/CD-Pipelines eingesetzt. Durch die leichte Verständlichkeit können auch andere schnell Docker-YAML-Setups lesen und nachvollziehen, was passiert.
version: '3'
services:
web:
image: nginx
ports:
- "80:80"
environment:
- NGINX_HOST=localhost
- NGINX_PORT=80
Die gute Lesbarkeit von YAML sowie Anker und Aliasse reduzieren Wiederholungen – damit ist es oft wartungsärmer als JSON oder XML.
Mehr über YAML und seine Nutzung in Docker erfährst du in diesem Docker-Kurs für Fortgeschrittene.
Datenserialisierung und -transfer
YAML wird genutzt, um Daten für APIs und Konfigurationsmanagement-Tools zu serialisieren – komplexe Datenstrukturen werden in ein menschenlesbares Format überführt, das Maschinen leicht parsen können.
Beispiel für einen API-Request-Body im YAML-Format:
user:
id: 123
name: "John Doe"
email: "johndoe@example.com"
active: true
Die einrückungsbasierte Struktur von YAML spart überflüssige Syntax – dadurch ist es im Vergleich zu JSON leichtgewichtig, gut lesbar und einfach anzupassen.
Infrastructure as Code (IaC)
Konfigurationsmanagement-Tools wie Ansible und Kubernetes nutzen YAML, um Systemzustände zu definieren, Prozesse zu automatisieren und Konsistenz über Umgebungen hinweg sicherzustellen.
- In Ansible werden mit YAML Playbooks geschrieben, die Systemzustände, Tasks und Abhängigkeiten definieren – so wird Infrastruktur konsistent konfiguriert.
- Kubernetes verwendet YAML-Manifeste, um Ressourcen wie Pods, Services und Deployments zu definieren – das ermöglicht die automatisierte Orchestrierung containerisierter Anwendungen.
Hier ein Beispiel für eine Kubernetes-Pod-Konfiguration:
apiVersion: v1
kind: Pod
metadata:
name: my-app
spec:
containers:
- name: app-container
image: my-app:latest
ports:
- containerPort: 8080
Mehr darüber, wie YAML in Kubernetes eingesetzt wird, erfährst du im Kurs Introduction to Kubernetes.
API-Dokumentation
API-Spezifikationen wie OpenAPI und Swagger nutzen YAML, um Endpunkte und Datenstrukturen leicht lesbar zu definieren. YAML beschreibt API-Methoden, Request-Parameter, Response-Formate und Authentifizierungsverfahren.
Hier ein Beispiel für eine OpenAPI-Spezifikation in YAML:
openapi: 3.0.0
info:
title: User API
version: "1.0"
paths:
/users:
get:
summary: Retrieve a list of users
responses:
"200":
description: Successful response
OpenAPI-Spezifikationen dokumentieren beispielsweise RESTful APIs. So entsteht eine klare Vorlage zur Generierung von Client-SDKs, interaktiver API-Dokumentation und automatisierten Tests. Das strukturierte Format sorgt für Konsistenz in der API-Implementierung.
Arbeiten mit YAML-Dateien
YAML wird häufig für Konfigurationen, Automatisierung und Datenserialisierung genutzt. Da es auf Einrückungen setzt, ist korrektes Format entscheidend. So liest, schreibst, validierst und bearbeitest du YAML effizient.
YAML in Python lesen und schreiben
Die Python-Bibliothek PyYAML kann YAML parsen und generieren.
Angenommen, du hast folgende YAML-Konfigurationsdatei:
database:
host: localhost
port: 5432
user: admin
password: secret
So kannst du in Python mit deiner Konfiguration arbeiten:
import yaml
# Load YAML data
with open("config.yaml", "r") as file:
data = yaml.safe_load(file) # safe_load verhindert die Ausführung beliebigen Codes
# Daten ändern (optional)
data["database"]["user"] = "new_user"
# YAML schreiben
with open("output.yaml", "w") as file:
yaml.dump(data, file, default_flow_style=False)
Wenn du mit JSON-Daten in Python arbeiten möchtest, schau dir den umfassenden Python-JSON-Tutorial an.
YAML-Dateien validieren
Um korrekte Strukturen sicherzustellen, kannst du Tools nutzen, die Tabs statt Spaces aufspüren oder Probleme wie doppelte Zeichen, Syntaxfehler und nachgestellte Leerzeichen melden.
Beliebte YAML-Validatoren sind:
- CLI-Tool: yamllint (Python-basierter Linter)
- Online-Validatoren: YAML Lint, JSON Formatter’s YAML Validator
YAML bearbeiten
Du kannst YAML in jedem Texteditor schreiben und bearbeiten – Linting-Tools und Syntax-Highlighting verbessern jedoch die Lesbarkeit.
Meine Favoriten:
- VS Code (mit YAML-Plugins)
- PyCharm (eingebaute Unterstützung)
- Sublime Text (mit YAML-Syntaxhervorhebung)
Häufige Fehler in YAML vermeiden
Trotz seiner Einfachheit können bei YAML schnell Fehler und Tippser passieren. Dieser Abschnitt bespricht typische Stolperfallen und gibt Best Practices für saubere, korrekte Dateien. Darum empfehle ich auch Linter oder smarte Editoren!
Tabs und Spaces mischen
YAML setzt für Einrückungen auf Leerzeichen – niemals Spaces und Tabs mischen. Tabs bringen dein YAML zum Brechen. Das ist bewusst so: Unterschiedliche Systeme interpretieren Tabs unterschiedlich, daher sind Spaces die sichere Wahl.
Falsche Einrückungen
Achte auf konsistente Einrückungen, um Parse-Fehler zu vermeiden. Da Einrückungen in YAML die einzige Methode zur Hierarchiekennzeichnung sind, führen Fehler hier schnell zu Problemen. Ein key: value-Paar ist sonst schnell an der falschen Stelle – behalte also die Einrückungen im Blick!
Anführungszeichen bei Sonderzeichen vergessen
Setze Anführungszeichen bei Strings mit Sonderzeichen oder Leerzeichen. Dinge wie Backslashes, Kommas, Ausrufezeichen usw. brauchen Anführungszeichen, um als String gelesen zu werden.
path: "/home/user/documents"
message: "Hello, World!"
Mit solider Validierung, strukturiertem Editieren und Python’s PyYAML arbeitest du effizient mit YAML-Dateien und vermeidest typische Fallstricke.
Fazit
YAML ist ein einfaches, aber mächtiges Format – verbreitet in Konfiguration, Datenserialisierung und Infrastrukturautomatisierung. Wenn du Syntax, Struktur und Best Practices beherrschst, kannst du YAML in vielen Anwendungen effizient einsetzen.
Wenn du YAML in realen Szenarien anwenden möchtest:
- Lerne, wie YAML in CI/CD-Workflows genutzt wird – im Kurs CI/CD for Machine Learning.
- Erkunde, wie APIs YAML in ihren Spezifikationen verwenden – im Kurs Introduction to APIs in Python.
- Tauche tiefer in Containerisierung und Infrastrukturautomatisierung ein – im Containerization and Virtualization-Lernpfad.
Werde Dateningenieur
FAQs
Ist YAML universell?
Solange die Datenquelle oder das Ziel YAML lesen kann, ist es eine sinnvolle und nützliche Methode zur Serialisierung und zum Transport von Daten. Stelle sicher, dass du Daten an ein Ziel sendest, das YAML verarbeiten kann.
Ist YAML sicher? Können YAML-Dateien Sicherheitsrisiken verursachen?
YAML selbst ist nur ein Datenformat, aber Sicherheitsrisiken entstehen beim Parsen nicht vertrauenswürdiger YAML-Dateien. Die Standardmethode yaml.load() in Python’s PyYAML kann beliebigen in YAML eingebetteten Code ausführen – das ist riskant. Verwende stattdessen immer yaml.safe_load(), um die ungewollte Ausführung bösartigen Codes zu verhindern. Achte außerdem bei der Nutzung von YAML in Anwendungen auf strikte Schemavalidierung, um Sicherheitslücken zu vermeiden.
Unterstützt YAML Umgebungsvariablen?
Ja! YAML verarbeitet Umgebungsvariablen nicht direkt, aber viele Tools (etwa Docker Compose und Kubernetes) erlauben Referenzen auf Umgebungsvariablen in YAML-Dateien.
Wie geht man in YAML mit Kommentaren um?
YAML unterstützt einzeilige Kommentare mit dem Symbol #, aber keine mehrzeiligen Kommentare. Wenn du mehrzeilige Kommentare brauchst, ist ein gängiger Workaround ein Dummy-Key wie _comment. Das ist allerdings nur eine Konvention und wird von YAML-Parsern nicht ignoriert, es sei denn, deine Anwendung filtert ihn explizit heraus.
Ich bin Datenwissenschaftler mit Erfahrung in räumlicher Analyse, maschinellem Lernen und Datenpipelines. Ich habe mit GCP, Hadoop, Hive, Snowflake, Airflow und anderen Data Science/Engineering-Prozessen gearbeitet.

