Was ist YAML: Grundlagen verstehen


YAML (YAML Ain't Markup Language) ist ein menschenlesbares Datenserialisierungsformat, das häufig für Konfigurationsdateien und den Datenaustausch zwischen Programmiersprachen verwendet wird.

Was ist YAML?

YAML, die Abkürzung für "YAML Ain't Markup Language" (ursprünglich "Yet Another Markup Language"), ist eine flexible und zugängliche Datenserialisierungssprache, die häufig in Konfigurationsdateien, Datenaustausch und automatisierten Workflows verwendet wird. Der minimalistische Stil und die Struktur machen sie leicht lesbar für Menschen (wie Entwickler(innen) und Systemadministrator(innen)), während sie gleichzeitig strukturiert genug für die Maschinenverarbeitung ist.

Was ist eine YAML-Datei?

YAML-Dateien sind Textdateien, die Daten mit YAMLs einzugsbasierter Struktur speichern. Da YAML natürliche Sprache nachahmt und strukturiertes Leerzeichen verwendet, sehen diese Dateien oft wie organisierte Listen oder Gliederungen aus.

Häufige Merkmale von YAML-Dateien sind:

  • Verwendung der Dateierweiterung .yml oder .yaml
  • Optional Beginn eines Dokuments mit drei Bindestrichen (---)
  • Verwendung von Einzug und Leerzeichen zur Definition der Über- und Unterordnungshierarchie
  • Darstellung der meisten Daten als Schlüssel-Wert-Paare (key: value)
  • Optional Beendigung eines Dokuments mit drei Punkten (...)

Nachfolgend finden Sie eine minimale GitLab CI-Konfiguration, die einen einzelnen Job und eine Phase definiert. Mit nur wenigen Zeilen YAML können nützliche Aufgaben wie das Ausführen von Tests bei jedem Code-Push automatisiert werden. Mit dem Wachstum des Workflows können Builds, Bereitstellungen und erweiterte Automatisierungslogik problemlos hinzugefügt werden.

      stages:
- build
- test

build:
stage: build
script:
- echo "Building app"
artifacts:
paths:
- dist/

test:
stage: test
script:
- echo "Running tests"
- ./run-tests.sh
dependencies:
- build

    

Welche YAML- und DevOps-Anwendungsfälle gibt es?

In modernem DevOps ist YAML zum Standard für Konfigurationsdateien geworden. Es ist einfach zu schreiben, zu lesen und zu ändern, was Teams ermöglicht, schnell zu iterieren und effektiv über Tools und Umgebungen hinweg zusammenzuarbeiten.

YAML wird häufig verwendet in:

  • Infrastructure as Code (IaC): IaC nutzt Konfigurationsdateien zur Definition und Verwaltung von Computerinfrastruktur (virtuelle Maschinen, Netzwerke, Cloud-Services) auf konsistente, skalierbare Weise. Tools wie Ansible und Kubernetes verlassen sich auf YAML, um den Systemzustand zu beschreiben und Aufgaben zu automatisieren.
  • Continuous Integration und Continuous Delivery (CI/CD) Pipeline-Konfiguration: Viele CI/CD-Tools verwenden YAML-Dateien zur Definition von Pipeline-Jobs, Ausführungsphasen, Triggern und Umgebungsregeln. Da diese Konfigurationen neben dem Anwendungscode vorhanden sind, werden sie vollständig versionskontrolliert und lassen sich leicht automatisieren.
  • Bereitstellungen: YAML spielt eine kritische Rolle bei der Anwendungsbereitstellung, da Manifest-Dateien den gewünschten Zustand von Anwendungen definieren, Aktualisierungsprozesse leiten und historische Konfigurationen zur Unterstützung von Rollbacks bewahren.

Wofür wird YAML verwendet?

YAML hat viele Anwendungen, wie das Definieren von Konfigurationseinstellungen, des gewünschten Zustands einer Anwendung oder der Schritte eines automatisierten Workflows. Es spielt eine entscheidende Rolle in DevOps, indem es Entwickler(innen) ermöglicht, kritische Tools wie Ansible und Kubernetes zu integrieren.

YAML in Ansible

Ansible ist ein Open-Source-Automatisierungstool zur Automatisierung einer Vielzahl von IT-Aufgaben, einschließlich Konfigurationsmanagement, Anwendungsbereitstellung und Systembereitstellung.

Ein Ansible-Playbook ist im Wesentlichen eine in YAML geschriebene Konfigurationsdatei, die eine automatisierte Aufgabe oder einen Prozess definiert. Ein Ansible-Modul nutzt diese Playbooks, um den aktuellen Zustand verwalteter Knoten zu bewerten und die vorgeschriebene Aufgabe auszuführen.

Zusammen machen YAML und Ansible die Infrastrukturautomatisierung zugänglicher, indem sie klare, versionskontrollierte Anweisungen bereitstellen, die Teams leicht überprüfen und verwalten können.

YAML für Kubernetes

Kubernetes ist eine Open-Source-Orchestrierungsplattform zur Bereitstellung, Skalierung und Verwaltung containerisierter Anwendungen. Jede Kubernetes-Ressource (Pods, Deployments, Services, ConfigMaps) in einem Cluster wird mit einer Manifest-Datei definiert, die normalerweise in YAML geschrieben ist und den gewünschten Zustand einer Ressource angibt, wie:

  • Wie viele Repliken ausgeführt werden sollen
  • Welche Container-Images verwendet werden sollen
  • Wie Netzwerk und Speicher sich verhalten sollen
  • Welche Konfigurationswerte oder Geheimnisse angewendet werden sollen

Kubernetes vergleicht kontinuierlich den tatsächlichen Zustand des Clusters mit dem in der YAML-Datei beschriebenen Zustand und gleicht Unterschiede aus. Da Kubernetes sehr komplex werden kann, spielt YAML eine entscheidende Rolle bei der Vereinfachung seiner Konfiguration und Wartbarkeit.

Welche Vorteile bietet YAML?

Die Beliebtheit von YAML ergibt sich aus einer Kombination von Lesbarkeit, Flexibilität und breiter Kompatibilität. Die Kernvorteile sind:

Einfachheit: Struktur natürlicher Sprache

YAML ist benutzerfreundlich für technische und nicht-technische Nutzer(innen), da es natürliche Sprache stärker widerspiegelt als andere Datenformate wie JavaScript Object Notation (JSON) oder Extensible Markup Language (XML). IT-Fachkräfte müssen keine völlig neue Programmiersprache erlernen oder umfangreiche Schulungen absolvieren, um YAML zu verwenden. Stattdessen machen die minimalistische Syntax und die hierarchische Einzugsstruktur von YAML, ähnlich wie Python, es einfacher für Menschen, zu lesen und zu ändern.

Kompatibilität: Plattformunabhängig

Als Datenserialisierungssprache besteht der Zweck von YAML darin, Datenstrukturen in ein standardisiertes Nur-Text-Format abzubilden. YAML-Dateien können dann von jeder anderen Programmiersprache unabhängig vom Betriebssystem oder der Anwendung übersetzt oder interpretiert werden. Dies ermöglicht YAML, als Brücke zwischen Tools, Plattformen und den sie verwaltenden Menschen zu fungieren.

Struktur: Ideal für Konfigurationsdateien

YAML wird häufig für Konfigurationsdateien verwendet, da Entwickler(innen) die Lesbarkeit bei der Arbeit mit großen Konfigurationen schätzen. Die einfache Syntax und klare Hierarchie machen Beziehungen zwischen Elementen leicht verständlich, was Teams hilft, Daten zu analysieren und Fehler oder Inkonsistenzen zu erkennen.

Was sind die Grundlagen von YAML?

Während YAML einige Ähnlichkeiten mit anderen Datenserialisierungssprachen aufweist, hat es mehrere Schlüsselmerkmale, die es einzigartig machen:

Struktur und Syntax

YAML-Dateien enthalten Knoten oder einzelne Datenelemente, die auf einer hierarchischen Struktur verschachtelt sind. Anstatt sich auf Strukturzeichen wie Klammern oder Anführungszeichen zu verlassen, verwendet YAML Leerzeichen und Einzug, um Beziehungen zwischen Elementen auszudrücken.

Einzugsregeln

Einzug ist der Schlüssel zum Erreichen der verschachtelten Struktur einer YAML-Datei. Mit einem konsistenten System von Leerzeichen (Tabulatoren sind nicht zulässig und verursachen einen Fehler) können Entwickler(innen) die Hierarchie anzeigen, indem untergeordnete Elemente mehr eingerückt werden als ihre übergeordneten Elemente.

Hinweis: Die Anzahl der Leerzeichen für den Einzug spielt keine Rolle, solange sie in der gesamten Datei konsistent ist. Daher müssen alle Elemente auf der gleichen hierarchischen Ebene mit der gleichen Anzahl von Leerzeichen eingerückt werden.

Zuordnung und Sequenzen

In YAML erscheinen Listen oder Sammlungen in einer von zwei Formen: Zuordnungen oder Sequenzen:

  • Zuordnungen ähneln Wörterbüchern oder Objekten und enthalten einen ungeordneten Satz von Schlüssel-Wert-Paaren (key: value)
  • Sequenzen oder Listen/Arrays sind geordnete Sammlungen, wobei jedes Element durch einen Bindestrich und ein Leerzeichen gekennzeichnet ist (- item)

Kommentare einbeziehen

Ein nützliches Merkmal von YAML ist die Unterstützung für Kommentare, die mit einem Hash-Symbol (#) gekennzeichnet sind. Dies ermöglicht es Nutzer(innen), Erklärungen und Kontextinformationen zu hinterlassen, die für Teamkollegen oder zukünftige Betreuer(innen) relevant sein können.

Vergleich mit anderen Formaten: YAML vs. JSON vs. XML

YAML und JSON sind beide Datenserialisierungsformate, die Menschen und Computer leicht interpretieren und analysieren können. YAML wird als Obermenge von JSON betrachtet, was bedeutet, dass jede gültige JSON-Datei auch gültiges YAML ist.

XML ist ein weiteres beliebtes Datenserialisierungsformat, das weniger menschenlesbar ist. XML wurde in den 1990er Jahren entwickelt und ist älter als JSON und YAML. Es wird häufig in Legacy- und Enterprise-Anwendungen verwendet.

YAMLJSONXML
MerkmalePriorisiert Menschenlesbarkeit, ahmt natürliche Sprache nach und verwendet Einzug zur Strukturerstellung statt SymboleFür einfaches, vorhersehbares Parsing mit Klammern, eckigen Klammern und Kommas konzipiert; als lesbar, aber etwas starrer angesehenEin hochstrukturiertes, Tag-basiertes Format, das HTML ähnelt und weniger benutzerfreundlich sein kann
Einzigartige MerkmaleErmöglicht Kommentare, unterstützt Multi-Dokument-Dateien, enthält Anker und Aliase zum Wiederverwenden von DatenblöckenLeicht und minimal mit universeller Unterstützung in ProgrammiersprachenFür strikte, formale Strukturen konzipiert und unterstützt Schema-Validierung
StrukturEinzugsbasierte Hierarchie, flexibel und ausdrucksstarkSymbolbasierte Struktur mit {}, [] und ,Tag-basierte Struktur mit öffnenden und schließenden Elementen
Häufige AnwendungenKonfigurationsdateien, Automatisierungs-Workflows und Infrastructure-as-CodeDatenaustausch zwischen Web-Clients, Servern und APIsDatenaustausch in Enterprise-Systemen, Dokumentformate und Legacy-Anwendungen

Fortgeschrittene YAML-Konzepte verstehen

Während YAML für seine einfache Struktur und Syntax bekannt ist, hat es auch mehrere erweiterte Funktionen, die es leistungsstark genug machen, um komplexe Konfigurationen und Workflows zu bewältigen.

Anker und Aliase

Anker und Aliase ermöglichen es Entwickler(innen), einen Datenblock einmal zu definieren und ihn mehrmals in der Datei zu referenzieren. Wenn der Anker aktualisiert wird, spiegelt jeder Alias die Änderung automatisch wider, wenn er analysiert wird. Dies vermeidet Duplizierung, reduziert die Dateigröße und gewährleistet Konsistenz.

  • Anker: Ein wiederverwendbarer Block, der mit einem Ampersand (&) gekennzeichnet ist
  • Alias: Eine Referenz auf diesen Block, gekennzeichnet mit einem Sternchen (*)

Tags und Datentypen

YAML leitet viele grundlegende Datentypen automatisch ab, einschließlich Ganzzahlen, Gleitkommazahlen, Boolesche Werte und Zeitstempel. Wenn jedoch mehr Kontrolle erforderlich ist oder mit komplexen Strukturen gearbeitet wird, ermöglichen Tags die explizite Deklaration des Datentyps eines Werts.

  • Tag: Gekennzeichnet mit einem doppelten Ausrufezeichen (!!) gefolgt vom Typnamen

Verwandte Dokumente bündeln

Ein weiteres fortgeschrittenes Konzept, das YAML auszeichnet, ist die Multi-Dokument-Unterstützung. Diese Funktion ist nützlich zum Bündeln, Transportieren und Verwalten verwandter Konfigurationen für eine einzelne Komponente. Die Multi-Dokument-Unterstützung ist auch nützlich, wenn Entwickler(innen) Variationen für verschiedene Kontexte definieren müssen.

  • Multi-Dokument-Abgrenzung: Unterschiedliche Dokumente oder Datenstrukturen innerhalb einer einzelnen Datei werden mit drei Bindestrichen (---) getrennt

Während YAML nativ keine Datei-zu-Datei-Verknüpfung unterstützt, haben führende Entwicklerplattformen wie GitLab benutzerdefinierte Mechanismen erstellt, die es Entwickler(innen) ermöglichen, separate Dateien, Skripte und Konfigurationskomponenten zu verknüpfen und wiederzuverwenden.

Welche Best Practices gibt es beim Schreiben von YAML?

Das Schreiben von effektivem YAML erfordert Aufmerksamkeit für Details. Die folgenden Best Practices helfen sicherzustellen, dass Dateien lesbar und fehlerfrei bleiben.

Effizienz und Einfachheit fördern

Die Stärken von YAML liegen in seiner Benutzerfreundlichkeit, Anpassungsfähigkeit und Einfachheit. Nutzen Sie diese Qualitäten mit diesen Best Practices optimal:

  • Reduzieren Sie Parsing-Fehler durch konsistente Einzüge und verwenden Sie immer Leerzeichen statt Tabulatoren
  • Minimieren Sie Wiederholungen und optimieren Sie Updates durch Verwendung von Ankern und Aliasen statt Duplizierung von Datenblöcken
  • Verbessern Sie die Lesbarkeit und vereinfachen Sie den Versionsvergleich durch Begrenzung der Zeilenlänge auf 80-120 Zeichen pro Zeile
  • Bewahren Sie Klarheit durch Verwendung von Flow-Stil ({}, []) nur für kurze, einfache Sammlungen

Fehlerfreie Dateien schreiben

Während YAML-Dateien schnell zu schreiben und zu ändern sind, können Konfigurationsfehler zu schwerwiegenden Anwendungsfehlern oder Sicherheitsproblemen führen. Um Risiken zu reduzieren, implementieren Sie diese Praktiken:

  • Fügen Sie Kommentare hinzu, um komplexe oder ungewöhnliche Konfigurationseinstellungen zu erklären und Kontext für Teamkollegen bereitzustellen
  • Vermeiden Sie den häufigsten YAML-Fehler, indem Sie den Text-Editor so konfigurieren, dass Tabulatoren in Leerzeichen umgewandelt werden
  • Zitieren Sie Zeichenfolgen bei Bedarf, einschließlich jeder Zeichenfolge, die:
    • "Wie eine Zahl, ein Boolescher Wert oder null aussieht ("123", "true", "on")"
    • "Sonderzeichen enthält (:, {}, [], #)"
    • "Mit einem Alias (*) oder Sequenzindikator (-) beginnt"
  • Integrieren Sie Linter und Validatoren in Workflows und CI/CD-Pipelines, um Syntaxprobleme zu erkennen und Stilrichtlinien durchzusetzen
  • Validieren Sie für plattformspezifische Dateien YAML gegen das Schema dieser Plattform mit Tools wie kubeconform, um sowohl syntaktische Korrektheit als auch ordnungsgemäße Feldnutzung sicherzustellen

YAML in die Praxis umsetzen

Die Mischung aus Lesbarkeit und Struktur macht YAML zu einem wesentlichen Werkzeug in modernem DevOps und treibt alles von CI/CD-Pipelines bis zu Kubernetes-Bereitstellungen an. Durch die Beherrschung der Kernkonzepte kannst du sauberes, zuverlässiges YAML schreiben, das Automatisierung unterstützt und mit deiner Infrastruktur skaliert.

Erkunde den vollständigen YAML-Syntax-Leitfaden von GitLab, um zu erfahren, wie du leistungsstarke, flexible CI/CD-Pipelines erstellst.

Stelle jetzt bessere Software schneller bereit

Erlebe, was dein Team mit der intelligenten

DevSecOps-Plattform erreichen kann.