Zum Inhalt springen
Aback Tools Logo

Was sind HCL und HOCON? Konfigurationssprachen erklärt

HCL und HOCON erklärt: HCL treibt Terraform, Packer und Vault an, HOCON Akka und Play. Vergleiche Syntax, Substitutionen, JSON-Kompatibilität und Einsatzgebiete.

DH
Tutorials & How-Tos13 Min. Lesezeit2,750 Wörter

HCL und HOCON sind zwei Konfigurationssprachen, die dir in der Infrastruktur- und Anwendungsentwicklung begegnen – HCL im HashiCorp-Ökosystem (Terraform, Packer, Vault) und HOCON im JVM-Ökosystem (Akka, Play Framework, Lightbend-Werkzeuge). Beide wurden geschaffen, um dasselbe Problem zu lösen – JSON ist für komplexe Konfigurationen zu ausführlich und unleserlich –, gehen aber unterschiedliche Wege und sind nicht austauschbar. Dieser Leitfaden erklärt beide Formate von Grund auf: wie sie aussehen, wo sie eingesetzt werden, wie sie sich vergleichen und wann du welches wählst.

2014Erste HCL-VersionVon HashiCorp für Terraform
2011Erste HOCON-VersionVon Typesafe für Akka
4+Große Werkzeuge nutzen HCLTerraform, Packer, Vault, Consul

Was ist eine HCL-Datei?

HCL steht für HashiCorp Configuration Language. Es ist eine domänenspezifische Konfigurationssprache, die HashiCorp 2014 entwickelt hat, zunächst zur Unterstützung von Terraform. HCL-Dateien nutzen die Endung `.hcl` (oder `.tf` speziell für Terraform) und sind darauf ausgelegt, für Menschen lesbar, für Maschinen parsebar und JSON-kompatibel zu sein – jedes gültige JSON-Dokument ist auch gültiges HCL.

HCL ist keine Programmiersprache. Es kann nicht rechnen, keine Funktionen definieren und den Programmfluss nicht steuern wie Python oder JavaScript. Es ist eine deklarative Konfigurationssprache: Du beschreibst den gewünschten Zustand der Infrastruktur, und das Werkzeug, das HCL liest (Terraform, Packer, Vault, Consul, Nomad), entscheidet, wie dieser erreicht wird. Diese Einschränkung ist gewollt – sie macht HCL-Konfigurationen vorhersehbar und prüfbar.

Grundlagen der HCL-Syntax

HCL nutzt eine blockbasierte Struktur mit Attributen, verschachtelten Blöcken und Ausdrücken. Attribute sind Schlüssel-Wert-Paare; Blöcke gruppieren zusammengehörige Attribute und können verschachtelt werden. Kommentare nutzen `#` oder `//` für eine Zeile und `/* */` für mehrere.

Grundlegende HCL-Struktur
hcl
# Einzeiliger Kommentar
resource "aws_instance" "web" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t3.micro"

  tags = {
    Name        = "web-server"
    Environment = "production"
  }

  # Verschachtelter Block
  root_block_device {
    volume_size = 20
    encrypted   = true
  }
}

Wo HCL verwendet wird

  • Terraform – der wichtigste HCL-Nutzer; jede `.tf`-Datei ist HCL und beschreibt Cloud- und On-Premises-Infrastruktur.
  • Packer – HCL2 (die Version 2 der Sprache) definiert Machine-Image-Builds für AWS-AMIs, GCP-Images und weitere.
  • Vault – HCL wird für Richtliniendateien verwendet, die Zugriffskontrollregeln in HashiCorp Vault definieren.
  • Consul – Konfigurationsdateien des Service Mesh, Health Checks und Servicedefinitionen nutzen HCL.
  • Nomad – Job-Spezifikationen für die Workload-Orchestrierung sind in HCL geschrieben.

Note

HCL hat zwei Versionen: HCL1 (ursprünglich, in frühem Terraform) und HCL2 (veröffentlicht 2019, genutzt von Terraform 0.12+). HCL2 führte echte Ausdrucksauswertung, for-Ausdrücke, dynamische Blöcke und eine strengere Syntax ein. Wenn du alten Terraform-Code findest, der `=` nicht durchgängig zur Attributzuweisung nutzt, handelt es sich wahrscheinlich um HCL1. Alle modernen HashiCorp-Werkzeuge verwenden HCL2.

Was ist HOCON?

HOCON steht für Human-Optimized Config Object Notation. Es wurde 2011 von Typesafe (heute Lightbend) als Konfigurationsformat der Typesafe-Config-Bibliothek geschaffen, die Akka, Play Framework, Lagom und andere JVM-Frameworks antreibt. HOCON-Dateien nutzen die Endung `.conf` und sind eine strikte Obermenge von JSON – jede gültige JSON-Datei ist gültiges HOCON.

HOCON ist für die Laufzeitkonfiguration von Anwendungen gedacht, nicht für die Definition von Infrastruktur. Sein herausragendes Merkmal sind Substitutionen – die Möglichkeit, über die Substitutionssyntax andere Konfigurationswerte in derselben Datei zu referenzieren, indem andere Konfigurationswerte oder Umgebungsvariablen per Pfad angesprochen werden. Das macht HOCON besonders geeignet für geschichtete Konfiguration: Eine Basiskonfiguration definiert Standardwerte, eine umgebungsspezifische Datei überschreibt einzelne Werte, und Substitutionen greifen auf Umgebungsvariablen oder andere Quellen zurück.

Grundlagen der HOCON-Syntax

Grundlegende HOCON-Struktur
hocon
# Konfiguration der Anwendung
app {
  name = "my-service"
  version = "1.0.0"

  server {
    host = "0.0.0.0"
    port = 8080
    # Substitution aus einer Umgebungsvariable
    port = ${?APP_PORT}
  }

  database {
    url = "jdbc:postgresql://localhost:5432/mydb"
    # Substitution aus einem anderen Konfigurationswert
    connection-pool = ${app.server.port}
  }
}

# Listen
allowed-origins = ["https://example.com", "https://api.example.com"]

HOCON-Funktionen jenseits von JSON

  • Kommentare – einzeilige Kommentare mit `#` und `//`; JSON unterstützt keine Kommentare.
  • Substitutionen – `${path.to.value}` referenziert andere Schlüssel; `${?ENV_VAR}` schlägt still fehl, wenn die Variable nicht definiert ist.
  • include-Direktiven – include "other.conf" führt externe Konfigurationsdateien beim Parsen zusammen.
  • Objektzusammenführung – doppelte Schlüssel führen ihre Werte zusammen, statt sie zu überschreiben; ermöglicht geschichtete Konfiguration.
  • Flexibilität bei Schlüssel-Wert – unterstützt key = value, key : value und key value (durch Leerzeichen getrennt) gleichermaßen.
  • Zeichenketten ohne Anführungszeichen – einfache Zeichenkettenwerte brauchen keine Anführungszeichen, sofern sie keine Sonderzeichen enthalten.

Tip

Die HOCON-Substitutionssyntax ist die stärkste Funktion für Produktionsumgebungen. Wenn du port mit einer Substitution auf APP_PORT und einem Standardwert 8080 darüber definierst, nutzt die Anwendung in der Entwicklung Port 8080 und in der Produktion den Wert von APP_PORT – ohne Codeänderung.

HCL vs. HOCON: zentrale Unterschiede

HCL und HOCON lösen ähnliche Probleme aus unterschiedlichen Blickwinkeln. Beide sind für komplexe Konfigurationen lesbarer als JSON, beide unterstützen Kommentare und beide haben eine JSON-Kompatibilitätsschicht. Ihre Designziele, Hauptanwendungsfälle und Ökosystem-Integrationen unterscheiden sich jedoch so deutlich, dass du selten zwischen ihnen wählst – das Werkzeug, das du nutzt, entscheidet für dich.

HCL beschreibt, welche Infrastruktur existieren soll. HOCON beschreibt, wie sich eine Anwendung verhalten soll. Diese Zweckdifferenz prägt jede Designentscheidung in beiden Sprachen.

- Designphilosophien von HCL und HOCON
AspektHCLHOCON
Erstellt vonHashiCorp (2014)Typesafe/Lightbend (2011)
Dateiendung.hcl, .tf, .pkr.hcl.conf, .json (JSON-Teilmenge)
HauptverwendungInfrastructure as CodeLaufzeitkonfiguration von Anwendungen
ÖkosystemTerraform, Packer, VaultAkka, Play, Lagom, Spark
JSON-kompatibel✓ JSON ist gültiges HCL✓ JSON ist gültiges HOCON
Kommentare✓ # und // und /* */✓ # und //
Substitutionen✗ Nutzt Variablen anders✓ ${path} und ${?ENV_VAR}
Dateien einbinden✗ Nutzt stattdessen Module✓ include "file.conf"
Objektzusammenführung✗ Blöcke sind geordnet✓ Doppelte Schlüssel verschmelzen
Ausdrücke/Logik✓ Ausdrücke, for-Schleifen✗ Nur deklarative Werte
Blockstruktur✓ Benannte Blöcke (resource "")✗ Nur verschachtelte Objekte

Der zentrale konzeptionelle Unterschied

HCL ist imperativ bezüglich der Struktur – Blöcke haben Typen und Bezeichner (`resource "aws_instance" "web"`), die semantische Bedeutung tragen und vom Werkzeug interpretiert werden. Du deklarierst Entitäten eines bestimmten Typs mit bestimmten Eigenschaften. HOCON ist rein ein Datenformat – es definiert eine hierarchische Schlüssel-Wert-Struktur, die Anwendungen beim Start lesen. Es kennt keine typisierten Blöcke; alles ist ein Schlüssel, der auf einen Wert, ein Objekt oder eine Liste zeigt.

Note

Du kannst HCL nicht dort verwenden, wo HOCON erwartet wird, und umgekehrt. Eine Akka-Anwendung, die `application.conf` liest, nutzt den HOCON-/Typesafe-Config-Parser; eine HCL-Datei führt zu einem Parse-Fehler. Ebenso akzeptiert Terraform nur HCL2 (oder JSON) für seine Konfigurationsdateien – HOCON ist keine gültige Terraform-Eingabe.

Praktisch mit HCL-Dateien arbeiten

HCL-Dateien werden meist im Rahmen eines Terraform-Projekts bearbeitet, doch dieselben Prinzipien gelten für Packer, Vault und Nomad. Formatierung und Struktur sind wichtig, weil HashiCorp-Werkzeuge HCL zur Plan- oder Validate-Zeit streng prüfen und fehlerhafte HCL-Blöcke Fehler erzeugen, die ohne konsistente Einrückung schwer nachzuvollziehen sind.

1

Formatiere deine HCL-Dateien für Konsistenz

Der HCL-Formatierer von Aback Tools formatiert und verschönert HCL-Dateien mit korrekter 2-Leerzeichen-Einrückung, konsistenten Attributabständen und sauberer Blockstruktur. Füge eine beliebige `.hcl`- oder `.tf`-Datei ein und erhalte konsistent formatierten Code, einsatzbereit für Terraform, Packer, Vault, Consul oder Nomad – vollständig im Browser.

2

HCL bei Bedarf in YAML umwandeln

Wenn ein CI-System, Dokumentationswerkzeug oder Pipeline-Prozessor die HCL-Konfiguration im YAML-Format braucht, übernimmt der HCL-zu-YAML-Konverter die strukturelle Übersetzung. Das ist üblich, wenn Terraform-Variablendefinitionen für Ansible-Playbooks oder Kubernetes-Config-Maps extrahiert werden.

3

Terraform-HCL-Ressourcennamen prüfen

HCL-Ressourcennamen in Terraform müssen teamweit konsistenten Namenskonventionen folgen, damit der Code reviewbar bleibt. Der Prüfer für Terraform-Ressourcennamenskonventionen unter `/tools/data/validators/terraform-resource-naming-convention-checker` prüft, ob deine Ressourcen-, Variablen- und Modulnamen dem gewählten Stil folgen, bevor du `terraform plan` ausführst.

HCL-Formatierer

Formatiere und verschönere jede HCL- oder Terraform-Datei mit korrekter 2-Leerzeichen-Einrückung, konsistenten Attributabständen und sauberer Blockstruktur – im Browser.

Open tool

Praktisch mit HOCON-Dateien arbeiten

In JVM-Projekten liegen HOCON-Konfigurationsdateien typischerweise unter `src/main/resources/application.conf`. Akka-Anwendungen nutzen HOCON für die Konfiguration des Aktorsystems, Dispatcher-Einstellungen und Erweiterungen. Play Framework nutzt es für Routen, Datenbankverbindungen und Anwendungseinstellungen. Das Format ist nachsichtig – Zeichenketten ohne Anführungszeichen, flexible Zuweisungsoperatoren, Kommentare –, aber eine auf Leerzeichen achtende Formatierung macht Dateien lesbarer und leichter zu pflegen.

HOCON-Dateien formatieren

Der HOCON-Formatierer von Aback Tools formatiert HOCON-Konfigurationsdateien mit konsistenter 4-Leerzeichen-Einrückung, korrekten Schlüssel-Wert-Abständen, sauberer Substitutionsbehandlung und Typesafe-Config-Konventionen. Das ist besonders nützlich beim Bearbeiten großer Akka- oder Play-Konfigurationsdateien, deren Formatierung durch mehrere Beitragende uneinheitlich geworden ist.

HOCON in YAML umwandeln

Wenn ein Werkzeug in deiner Pipeline YAML erwartet, deine Anwendungskonfiguration aber HOCON ist, übersetzt der HOCON-zu-YAML-Konverter die HOCON-Schlüssel-Wert-Struktur in ein YAML-Äquivalent. Beachte, dass HOCON-spezifische Funktionen – Substitutionen, include-Direktiven und zusammengeführte Schlüssel – vor der Konvertierung aufgelöst werden; die YAML-Ausgabe zeigt also die endgültige zusammengeführte Konfiguration und nicht die rohe HOCON-Templatesyntax.

Warning

HOCON-Substitutionen und include-Direktiven werden zur Parse-Zeit von der Typesafe-Config-Bibliothek aufgelöst, nicht statisch in der Datei. Wenn du HOCON mit einem Werkzeug in YAML umwandelst, erscheinen Substitutionen auf Umgebungsvariablen als ihr wörtlicher Wert oder entfallen, wenn die Variable in der Konvertierungsumgebung nicht gesetzt ist. Prüfe die Ausgabe, bevor du sie in der Produktion einsetzt.

HOCON-Formatierer

Formatiere HOCON-Konfigurationsdateien mit konsistenter 4-Leerzeichen-Einrückung, korrekter Substitutionsbehandlung und Typesafe-Config-Konventionen – vollständig im Browser.

Open tool

HCL und HOCON neben anderen Konfigurationsformaten

HCL und HOCON existieren neben einer breiteren Landschaft von Konfigurationsformaten. Die Wahl des richtigen ist selten frei – das Tooling, das du nutzt, gibt das Format vor. Zu verstehen, wo jedes Format passt, hilft dir aber, über Konfigurationsportabilität und Tooling-Kompromisse nachzudenken.

Wie die wichtigsten Konfigurationsformate abschneiden

FormatLesbarKommentareAm besten für
JSON✗ Ausführlich✗ KeineAPIs, Datenaustausch
YAML✓ Sehr✓ #K8s, CI/CD, allgemeine Konfiguration
TOML✓ Gut✓ #App-Konfiguration, Rust, Python-Tools
INI✓ Einfach✓ # ;Einfache Schlüssel-Werte, Legacy-Apps
HCL✓ Gut✓ # //Infrastructure as Code
HOCON✓ Gut✓ # //JVM-App-Konfiguration, Akka, Play

HCL und YAML gemeinsam in Terraform-Workflows

In der Praxis nutzt ein Terraform-Projekt HCL für alle Infrastrukturdefinitionen, während die CI/CD-Pipeline, die Terraform ausführt, oft in YAML konfiguriert ist (GitHub Actions, GitLab CI, CircleCI). Beides koexistiert ohne Konflikt – HCL ist die Eingabe von Terraform, YAML die Eingabe der Pipeline. Wenn du mit beidem arbeitest, gilt dieselbe Formatierungsdisziplin. Für YAML-Fehler in deinen CI-Dateien greift die Vorgehensweise aus So erkennst und behebst du YAML-Fehler direkt.

HOCON, TOML und YAML für Anwendungskonfiguration

Für Nicht-JVM-Anwendungen sind TOML und YAML häufiger als HOCON. TOML ist der Standard für Rust (Cargo.toml), Python-Packaging (pyproject.toml) und Hugo-Statikseiten. YAML dominiert Kubernetes, Ansible, Docker Compose und die meisten Cloud-Native-Werkzeuge. HOCON ist die richtige Wahl speziell dann, wenn deine Laufzeit ein JVM-Framework ist, das Typesafe Config mitbringt – du bekommst HOCON-Funktionen kostenlos, und gegen das Framework für ein anderes Format zu kämpfen, schafft mehr Probleme als es löst.


Verwandte Beiträge zu Formaten

Wenn du Konfigurationsformate für ein neues Projekt bewertest, behandeln die Begleitbeiträge dieser Reihe die nächsten Alternativen. So erstellst du eine INI-Datei deckt das einfachste Konfigurationsformat ab. So kommentierst du YAML richtig behandelt YAML-Syntaxdetails. Und Was prüft terraform validate tatsächlich? zeigt, wie HCL-Fehler speziell in einem Terraform-Workflow auftreten.

Tip

Wenn du eine neue Bibliothek oder ein Werkzeug schreibst, das ein Konfigurationsformat braucht, ziehe TOML vor HCL oder HOCON in Betracht. TOML hat breite Parser-Unterstützung in allen wichtigen Sprachen, eine einfache Spezifikation und keine Ökosystemkopplung. Halte HCL für HashiCorp-Tooling und HOCON für JVM-/Typesafe-Config-Integrationen reserviert, in denen das Framework das Format erwartet.

Key takeaways

  • HCL (HashiCorp Configuration Language) ist ein deklaratives Format für Infrastructure as Code – genutzt von Terraform, Packer, Vault, Consul und Nomad. HCL2 ist die aktuelle Version.
  • HOCON (Human-Optimized Config Object Notation) ist eine JSON-Obermenge für die Laufzeitkonfiguration von JVM-Anwendungen – genutzt von Akka, Play Framework und Lightbend-Werkzeugen.
  • Beide Formate unterstützen Kommentare und sind JSON-kompatibel, aber sie sind nicht austauschbar – das Werkzeug, das du nutzt, bestimmt das Format.
  • HCLs Kernmerkmal sind typisierte, benannte Blöcke (`resource "aws_instance" "web"`); HOCONs Kernmerkmal sind Variablensubstitutionen (`${?ENV_VAR}`) und Objektzusammenführung.
  • Nutze den HCL-Formatierer für konsistente HCL-Formatierung und den HOCON-Formatierer für HOCON – beide laufen im Browser ohne Upload.
  • Für Nicht-JVM- und Nicht-HashiCorp-Projekte sind TOML oder YAML meist bessere Wahl als HCL oder HOCON, wegen breiterer Parser-Unterstützung und ohne Ökosystemkopplung.

Häufige Fragen

Eine HCL-Datei ist eine Konfigurationsdatei in der HashiCorp Configuration Language, einem deklarativen Format, das HashiCorp 2014 entwickelt hat. HCL-Dateien nutzen die Endung .hcl (oder .tf für Terraform, .pkr.hcl für Packer) und beschreiben den gewünschten Zustand der Infrastruktur mit typisierten, benannten Blöcken und Attributzuweisungen. Jedes gültige JSON-Dokument ist auch gültiges HCL2, was die Migration einfach macht. HCL wird von Terraform, Packer, Vault, Consul und Nomad verwendet.

HOCON steht für Human-Optimized Config Object Notation. Es ist ein Konfigurationsformat, das Typesafe (heute Lightbend) 2011 als Obermenge von JSON entwickelt hat. HOCON-Dateien nutzen die Endung .conf und unterstützen Kommentare, Variablensubstitutionen (${?ENV_VAR}), include-Direktiven und Objektzusammenführung. HOCON ist das native Konfigurationsformat für Akka, Play Framework, Lagom und andere JVM-Frameworks, die die Typesafe-Config-Bibliothek verwenden.

HCL ist für Infrastructure-as-Code: Es verwendet typisierte, benannte Blöcke, um Infrastrukturressourcen zu deklarieren, und wird von HashiCorp-Werkzeugen interpretiert. HOCON ist für Anwendungs-Laufzeitkonfiguration: Es nutzt eine hierarchische Schlüssel-Wert-Struktur mit Substitutionen und Zusammenführung, interpretiert von der Typesafe-Config-Bibliothek. Beide sind JSON-kompatibel und unterstützen Kommentare, aber sie sind nicht austauschbar: Terraform erwartet HCL, Akka erwartet HOCON, und kein Parser akzeptiert das Format des anderen.

Nein. Kubernetes und GitHub Actions nutzen YAML-Parser, die YAML-Syntax erwarten. HCL hat eine andere Syntax (typisierte Blöcke, Attributnamen ohne Anführungszeichen, andere Listennotation), die kein gültiges YAML ist. Diese Werkzeuge bringen keine HCL-Parser-Unterstützung mit. Ebenso kannst du HOCON nicht für Kubernetes-Manifeste verwenden. Wenn du von HCL zu einem YAML-basierten Werkzeug überbrücken musst, nutze den HCL-zu-YAML-Konverter, um eine YAML-Darstellung deiner Konfigurationsdaten zu erzeugen.

HCL ist die Konfigurationssprache, die Terraform verwendet, aber HCL ist nicht Terraform. HCL ist eine allgemeine Konfigurationssprache, die auch andere HashiCorp-Werkzeuge nutzen – Packer, Vault, Consul und Nomad lesen HCL-Dateien. Terraform ist ein Werkzeug zur Bereitstellung von Infrastruktur, das HCL als Konfigurationsformat verwendet. Wenn von „Terraform-Dateien" die Rede ist, sind .tf-Dateien in HCL2 gemeint, aber HCL selbst ist eine eigenständige, von HashiCorp veröffentlichte Sprachspezifikation.

Ja. Jede gültige JSON-Datei ist auch gültiges HOCON – der HOCON-Parser akzeptiert JSON-Syntax ohne Änderungen. HOCON erweitert JSON um Kommentare (# und //), optionale Kommas und Anführungszeichen für einfache Zeichenketten, Schlüssel-Wert-Zuweisung mit = oder :, Substitutionen (${path}), include-Direktiven und Objektzusammenführung, wenn derselbe Schlüssel mehrfach vorkommt. Diese JSON-Kompatibilität bedeutet, dass du mit einer JSON-Konfiguration beginnen und HOCON-Funktionen schrittweise übernehmen kannst, ohne die Datei neu zu schreiben.

Für HCL-Dateien nutze den HCL-Formatierer von Aback Tools unter /tools/data/formatters/hcl-formatter – er wendet 2-Leerzeichen-Einrückung, konsistente Attributabstände und eine saubere Blockstruktur an. Für Terraform-Dateien formatiert zusätzlich der offizielle CLI-Befehl `terraform fmt` .tf-Dateien. Für HOCON-Dateien nutze den HOCON-Formatierer unter /tools/data/formatters/hocon-formatter für konsistente 4-Leerzeichen-Einrückung und Typesafe-Config-Konventionen. Beide Werkzeuge laufen im Browser ohne Upload.

Nutze HOCON, wenn du eine JVM-Anwendung mit einem Framework baust, das Typesafe Config mitbringt (Akka, Play, Lagom) – du erhältst HOCON-Unterstützung kostenlos und die Framework-Dokumentation setzt sie voraus. Nutze YAML, wenn du eine Nicht-JVM-Anwendung baust, mit Docker/Kubernetes containerisierst oder ein Framework wie Spring Boot mit nativer YAML-Unterstützung verwendest. Formate im Projekt zu mischen erzeugt unnötige Tooling-Komplexität – richte dein Konfigurationsformat danach aus, was dein Laufzeit-Framework nativ erwartet.

ShareXLinkedIn