Lernpfad
Im Laufe der Jahre habe ich mit unzähligen Konfigurationsdateien gearbeitet, und YAML hat sich durch seine Einfachheit und Lesbarkeit ausgezeichnet. Ob du Workflows in Kubernetes einrichtest, Dienste in Docker definierst oder API-Anfragen strukturierst, YAML macht komplexe Konfigurationen überschaubarer. Die saubere, auf Einrückungen basierende Struktur vermeidet das Durcheinander von Formaten wie XML und bleibt gleichzeitig flexibel.
In diesem Leitfaden führe ich dich durch die Syntax, die Struktur, die erweiterten Funktionen und die besten Praktiken von YAML, damit du sicher damit arbeiten kannst.
Was ist YAML?
YAML (Yet Another Markup Language / YAML Ain't Markup Language) ist ein Format zur Serialisierung von Daten, bei dem Lesbarkeit und Benutzerfreundlichkeit im Vordergrund stehen. Während XML eine Mischung aus HTML-ähnlichen verschachtelten Tags und JSON geschweifte Klammern und Anführungszeichen verwendet, ähnlich wie Python-Wörterbücher, ist YAML prägnanter und verwendet Einrückungen, um die Struktur zu definieren, was es menschenfreundlicher macht.
YAML unterstützt verschiedene Datentypen, darunter Skalare (Strings, Zahlen, Booleans), Sequenzen (Listen) und Mappings (Schlüssel-Wert-Paare). Es wird häufig in Konfigurationsdateien, bei der Automatisierung von Infrastrukturen und beim Datenaustausch verwendet, insbesondere in Tools wie Kubernetes, Docker und Ansible.
Außerdem ist YAML eine Obermenge von JSON, was bedeutet, dass gültige JSON-Dateien als YAML geparst werden können. YAML-Dateien haben normalerweise die Erweiterung .yaml
oder .yml
.
Mehr über YAML kannst du auch auf der YAML-Website erfahren!
YAML Syntax und Struktur
In diesem Abschnitt lernst du die grundlegenden Prinzipien der YAML-Syntax kennen, darunter Schlüssel-Wert-Paare, Listen, verschachtelte Daten und Kommentare.
Grundlegende Syntaxregeln
Es gibt ein paar grundlegende syntaktische Regeln für YAML:
- Der Einzug von Leerzeichen zeigt die Struktur an, also vermeide diese Tabs!
- Schlüssel-Wert-Paare folgen einer
key: value
Struktur, ähnlich wie in anderen Sprachen. - Die Verwendung von Bindestrichen am Anfang von Zeilen kennzeichnet eine Liste.
- Wenn du
#
verwendest, werden Kommentarzeilen erstellt.
# Here is an example of YAML
name: John Doe
age: 30
skills:
- Python
- YAML
Schlüssel-Werte-Paare
YAML stellt Daten als Schlüssel-Wert-Paare dar, ähnlich wie die Wörterbücher in Python. Das sind oft Informationen, die an verschiedene Konfigurationsdateien und Einstellungen weitergegeben werden. Es ist nicht nötig, Zeichenketten oder Schlüssel mit Anführungszeichen zu kennzeichnen; schreibe einfach die benötigten Schlüssel und Werte:
location: New York
country: USA
security-level: user
Listen in YAML
Listen werden mit Bindestrichen (-
) dargestellt. So kannst du mehrere Objekte unter einem einzigen Schlüssel auflisten. Beim Lesen durch Markup-Editoren wird dies oft visuell mit Aufzählungszeichen dargestellt.
fruits:
- Apple
- Banana
- Cherry
Verschachtelte Daten
Geschachtelte Strukturen ermöglichen eine hierarchische Datendarstellung durch Einrückung. Stell dir diese wie verschachtelte Wörterbücher vor. Mit der Einrückung kennzeichnest du, welche Tasten Teilmengen von anderen sind.
person:
name: Alice
details:
age: 25
city: London
Kommentare
Kommentare beginnen mit #
und werden von YAML-Parsern ignoriert. Diese Kommentare sind einzeilige Kommentare.
# This is a comment
username: admin
password: secret
Erweiterte YAML-Funktionen
YAML enthält leistungsstarke Funktionen wie mehrzeilige Strings, Datentypen und Anker, die Dokumente effizienter und strukturierter machen. In diesem Abschnitt werden wir diese Möglichkeiten anhand praktischer Beispiele erkunden.
Mehrzeilige Zeichenfolgen
YAML unterstützt mehrzeilige Strings mit |
(literaler Block) oder >
(gefalteter Block).
|
wird bei jedem Zeilenumbruch eine neue Zeile\n
erstellt.>
Der gefaltete Block macht nur bei aufeinanderfolgenden Zeilenumbrüchen eine neue Zeile.
literal: |
This is a
multi-line string.
folded: >
This is another
multi-line string.
Die obigen Ausführungen lassen sich besser verstehen, wenn du dir die Ausgabe ansiehst.
- Für den
|
(wörtlicher Block):
This is a
multi-line string.
- Für den
>
(gefalteten Block):
This is another multi-line string.
Datentypen in YAML
YAML unterstützt verschiedene Datentypen, darunter Strings, Zahlen, Boolesche Werte und Nullwerte. Es erkennt die Typen automatisch anhand der Formatierung, erlaubt aber auch explizite Typdefinitionen.
Das folgende Beispiel zeigt die Verwendung von Basisdatentypen in YAML:
string_implicit: Hello, YAML! # No quotes needed unless necessary
string_double_quoted: "Supports escape sequences like \n and \t"
string_single_quoted: 'Raw text, no escape sequences'
integer: 42 # Whole numbers
float: 3.14 # Numbers with decimals
boolean_true: true
boolean_false: false
null_value: null # Null value
null_tilde: ~ # Another way to represent null
YAML erlaubt bei Bedarf explizite Typendeklarationen mit !!type
:
explicit_string: !!str 123 # Forces 123 to be a string
explicit_integer: !!int "42" # Forces "42" to be an integer
explicit_float: !!float "3.14" # Forces "3.14" to be a float
Da YAML oft für strukturierte Daten verwendet wird, unterstützt es:
- Listen (Sequenzen):
fruits:
- Apple
- Banana
- Cherry
- Wörterbücher (Mappings):
person:
name: Alice
age: 30
is_student: false
Anker und Aliasnamen
In YAML kannst du wiederverwendbare Werte mit Hilfe von Ankern (&
) definieren und sie später mit Hilfe von Aliases (*
) referenzieren. Dadurch wird die Redundanz in den Konfigurationsdateien reduziert und sie werden übersichtlicher und leichter zu pflegen.
defaults: &default_settings
retries: 3
timeout: 30
server1:
host: example.com
retries: *default_settings # Reuses the retries value from defaults
Die <<:
Syntax ermöglicht das Zusammenführen von Schlüssel-Wert-Paaren aus einem Anker in ein anderes Mapping. Wenn ein Schlüssel in beiden vorhanden ist, überschreibt der neue Wert den ursprünglichen.
defaults: &default_settings
retries: 3
timeout: 30
server1:
<<: *default_settings # Merges all key-value pairs from default_settings
host: example.com # This key is added to the merged data
Dies ist die endgültige, aufgelöste Struktur:
server1:
retries: 3
timeout: 30
host: example.com
Anker und Aliase sind besonders nützlich in großen Konfigurationsdateien, in denen es ineffizient wäre, Werte manuell zu wiederholen. Sie helfen dabei, YAML-Dateien DRY (Don't Repeat Yourself) zu halten und machen Updates einfacher.
Häufige Anwendungsfälle für YAML
YAML wird häufig in der Softwareentwicklung, der Infrastrukturautomatisierung und der API-Verwaltung eingesetzt. Seine menschenlesbare Syntax macht es zu einem bevorzugten Format für Konfigurationsdateien, Datenserialisierung und Infrastructure as Code (IaC). Schauen wir uns die häufigsten Anwendungen an.
Konfigurationsdateien
YAML wird häufig für die Konfiguration in Anwendungenwie Docker Compose, Kubernetes und CI/CD-Pipelinesverwendet. Die einfache Verständlichkeit macht es für jeden leicht, die Docker YAML-Setup-Dateien in die Hand zu nehmen und zu verstehen, was passiert.
version: '3'
services:
web:
image: nginx
ports:
- "80:80"
environment:
- NGINX_HOST=localhost
- NGINX_PORT=80
Die Lesbarkeit von YAML und die Unterstützung von Ankern und Aliasen tragen dazu bei, Wiederholungen zu vermeiden, was es wartungsfreundlicher macht als JSON oder XML.
In diesem Docker-Kurs für Fortgeschrittene erfährst du mehr über YAML und seine Verwendung in Docker .
Serialisierung und Übertragung von Daten
YAML wird verwendet, um Daten für APIs und Konfigurationsmanagement-Tools zu serialisieren, indem komplexe Datenstrukturen in ein für Menschen lesbares Format umgewandelt werden, das von Maschinen leicht geparst werden kann.
Zum Beispiel ein API-Anfragetext, der in YAML formatiert ist:
user:
id: 123
name: "John Doe"
email: "johndoe@example.com"
active: true
Die auf Einrückungen basierende Struktur von YAML macht unnötige Syntax überflüssig und macht es im Vergleich zu JSON leicht, lesbar und einfach zu ändern.
Infrastruktur als Code (IaC)
Konfigurationsmanagement-Tools wie Ansible und Kubernetes nutzen YAML, um Systemzustände zu definieren, Prozesse zu automatisieren und die Konsistenz zwischen verschiedenen Umgebungen sicherzustellen.
- In Ansible wird YAML verwendet, um Playbooks zu schreiben, die Systemzustände, Aufgaben und Abhängigkeiten definieren und sicherstellen, dass die Infrastrukturkomponenten einheitlich konfiguriert sind.
- Kubernetes nutzt YAML-Manifeste, um Ressourcen wie Pods, Services und Deployments zu definieren und ermöglicht so eine automatisierte Orchestrierung von containerisierten Anwendungen.
Hier ist 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
Erfahre mehr darüber, wie YAML in Kubernetes verwendet wird, in diesem Kurs Einführung in Kubernetes .
API-Dokumentation
API-Spezifikationen wie OpenAPI und Swagger verwenden YAML, um Endpunkte und Datenstrukturen in einer leicht lesbaren Form zu definieren. YAML wird verwendet, um API-Methoden, Anfrageparameter, Antwortformate und Authentifizierungsmethoden zu beschreiben.
Hier ist 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
Die OpenAPI-Spezifikationen verwenden zum Beispiel YAML, um RESTful-APIs zu dokumentieren. So können sie einen klaren Plan für die Erstellung von Client-SDKs, interaktiver API-Dokumentation und automatisierten Tests erstellen. Dieses strukturierte Format sorgt für Konsistenz zwischen den API-Implementierungen.
Arbeiten mit YAML-Dateien
YAML wird häufig für Konfigurationsdateien, Automatisierung und Datenserialisierung verwendet, aber da es auf Einrückung beruht, ist die richtige Formatierung entscheidend. Hier erfährst du, wie du YAML effektiv lesen, schreiben, validieren und bearbeiten kannst.
Lesen und Schreiben von YAML in Python
Die PyYAML
Bibliothek von Python kann YAML parsen und generieren.
Stell dir vor, du hast die folgende Konfigurations-YAML-Datei:
database:
host: localhost
port: 5432
user: admin
password: secret
Hier erfährst du, wie du mit deiner Konfigurationsdatei in Python arbeiten kannst:
import yaml
# Load YAML data
with open("config.yaml", "r") as file:
data = yaml.safe_load(file) # safe_load prevents arbitrary code execution
# Modify data (optional)
data["database"]["user"] = "new_user"
# Write YAML data
with open("output.yaml", "w") as file:
yaml.dump(data, file, default_flow_style=False)
Wenn du dich für die Arbeit mit JSON-Daten in Python interessierst, schau dir das umfassende Python JSON-Tutorialan.
Validierung von YAML-Dateien
Um die korrekte Struktur zu gewährleisten, kannst du Tools verwenden, die auf Tabulatoren anstelle von Leerzeichen oder seltsame Probleme wie wiederholte Zeichen, Syntaxprobleme und Leerzeichen am Ende der Zeile prüfen.
Dies sind einige beliebte YAML-Validatoren:
- CLI-Tool: yamllint (Python-basierter Linter)
- Online-Validierer: YAML Lint, der YAML-Validator von JSON Formatter
YAML bearbeiten
Du kannst YAML in jedem Texteditor schreiben und bearbeiten, aber Linting-Tools und Syntax-Highlighting verbessern die Lesbarkeit.
Einige meiner Lieblingsredakteure:
- VS Code (mit YAML-Plugins)
- PyCharm (integrierte Unterstützung)
- Sublime Text (mit YAML-Syntaxhervorhebung)
Häufige Fehler, die man in YAML vermeiden sollte
Trotz seiner Einfachheit kann es bei der Arbeit mit YAML leicht zu Problemen und Tippfehlern kommen. In diesem Abschnitt werden diese Fehler besprochen und Best Practices zum Schreiben sauberer und korrekter Dateien vorgestellt. Das ist auch der Grund, warum ich dir empfehle, einen Linter oder Texteditor zu benutzen!
Tabulatoren und Leerzeichen mischen
YAML verwendet Leerzeichen für die Einrückung - mische niemals Leerzeichen und Tabulatoren. Tabulatoren machen dein YAML-Skript einfach kaputt. Das ist eine bewusste Entscheidung, denn verschiedene Systeme lesen Tabulatoren unterschiedlich, und um die Auswirkungen zu minimieren, werden Leerzeichen bevorzugt verwendet.
Falsche Einrückung
Achte auf eine einheitliche Einrückung, um Parsing-Fehler zu vermeiden. Da Einrückungen die einzige Methode von YAML sind, um Hierarchien zu kennzeichnen, kann ein falsches Parsing zu Problemen in deinem Code führen. Du kannst ein key: value
Paar leicht an der falschen Stelle verstauen, also achte einfach auf die Einkerbungen!
Vergessene Anführungszeichen für Sonderzeichen
Verwende Anführungszeichen für Zeichenfolgen, die Sonderzeichen oder Leerzeichen enthalten. Dinge wie Backslashes, Kommas, Ausrufezeichen und so weiter müssen in Anführungszeichen gesetzt werden, damit sie als Zeichenketten gelesen werden können.
path: "/home/user/documents"
message: "Hello, World!"
Mit der richtigen Validierung, der strukturierten Bearbeitung und Python's PyYAML kannst du effizient mit YAML-Dateien arbeiten und häufige Fallstricke vermeiden.
Fazit
YAML ist ein leistungsfähiges und dennoch einfaches Format, das in der Konfiguration, Datenserialisierung und Infrastrukturautomatisierung weit verbreitet ist. Wenn du die Syntax, die Struktur und die Best Practices von YAML verstehst, kannst du in verschiedenen Anwendungen effizient damit arbeiten.
Wenn du daran interessiert bist, YAML in realen Szenarien anzuwenden:
- In diesem Kurs über CI/CD für maschinelles Lernen lernst du, wie YAML in CI/CD-Workflows eingesetzt wird.
- In diesem Kurs Einführung in APIs in Python erfährst du, wie APIs YAML in ihren Spezifikationen verwenden.
- In diesem Lernpfad zu Containerisierung und Virtualisierung tauchst du tiefer in die Automatisierung von Infrastrukturen ein.
Werde Dateningenieur
FAQs
Ist YAML universell?
Solange die Datenquelle oder das Ziel YAML lesen kann, ist es eine praktikable 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 bergen?
YAML selbst ist nur ein Datenformat, aber beim Parsen von nicht vertrauenswürdigen YAML-Dateien entstehen Sicherheitsrisiken. Die Standardmethode yaml.load()
in Python PyYAML
kann beliebigen Code ausführen, der in YAML eingebettet ist, und ist daher riskant. Verwende stattdessen immer yaml.safe_load()
, um die unbeabsichtigte Ausführung von bösartigem Code zu verhindern. Auch bei der Verwendung von YAML in Anwendungen solltest du auf eine strenge Schema-Validierung achten, um Sicherheitslücken zu vermeiden.
Kann YAML Umgebungsvariablen unterstützen?
Ja! YAML selbst verarbeitet zwar keine Umgebungsvariablen, aber viele Tools (wie Docker Compose und Kubernetes) erlauben es, Umgebungsvariablen in YAML-Dateien zu referenzieren.
Wie handhabt ihr Kommentare in YAML?
YAML unterstützt einzeilige Kommentare mit dem Symbol #
, aber keine mehrzeiligen Kommentare. Wenn du mehrzeilige Kommentare benötigst, ist eine gängige Lösung, eine Dummy-Taste wie _comment
zu verwenden. Dies ist jedoch nur eine Konvention und wird von YAML-Parsern nicht ignoriert, es sei denn, deine Anwendung filtert es ausdrücklich 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.