HCL (HashiCorp Configuration Language) ist die deklarative Konfigurationssprache von HashiCorp. Sie wurde 2014 zusammen mit Terraform 0.1 eingeführt und wird seither auch in Packer, Consul, Vault und Nomad verwendet. HCL beschreibt einen gewünschten Zustand, den ein Werkzeug anschließend plant und umsetzt.
Grundlagen
HCL2 (seit Terraform 0.12, 2019) besteht aus drei integrierten Teilsprachen: einer Struktursprache für Blöcke und Attribute, einer Ausdruckssprache für Werte und einer Template-Sprache für interpolierte Zeichenketten.
resource "aws_instance" "web" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t3.micro"
tags = {
Name = "Webserver"
}
}
Wichtige HCL-Konstrukte
resource "typ" "name" { ... }— verwaltete Ressource;datafür lesende Datenquellenterraform { ... }— Provider- und Backend-Konfiguration;provider "aws" { ... }— Provider-Einstellungenvariable "name" { ... }/output "name" { ... }— Eingabe- und Ausgabevariablenmodule "name" { source = ... }— wiederverwendbare Module;locals { ... }— lokale Werte- Attribute:
name = wert, z. B.region = "eu-central-1" - Ausdrücke: Referenzen wie
var.nameoderaws_instance.web.id, Operatoren, Funktionen wielength(),join(),file(),lookup(),for-Ausdrücke und Splat-Syntax[*] count/for_each— Ressourcen mehrfach erzeugen;dynamic-Blöcke — Blöcke aus Daten generieren- Kommentare:
#und//für Zeilen,/* ... */für Blöcke
Praxis: Terraform
Der typische Ablauf mit Terraform-Befehlen: terraform init lädt Provider und Module, terraform plan zeigt die geplanten Änderungen, terraform apply setzt sie um. Der aktuelle Zustand wird in der State-Datei gespeichert. Terraform ist damit das bekannteste Beispiel für Infrastructure as Code; der quelloffene Fork OpenTofu setzt die gleiche Sprache fort.
terraform fmt # HCL formatieren
terraform validate # Syntax und Referenzen prüfen
terraform plan # Änderungen anzeigen
terraform apply # Änderungen umsetzen
Praxis-Tipps
- HCL ist deklarativ: Die Reihenfolge der Blöcke spielt keine Rolle, Terraform berechnet die Abhängigkeiten selbst.
- Im Gegensatz zu YAML/TOML/JSON kann HCL Ausdrücke und Interpolation auswerten.
- Wo Makroprozessoren wie m4 früher Konfigurationstexte erzeugten, liefert HCL typisierte, überprüfbare Strukturen.
- Wie Ninja für Builds ist HCL ein Zielformat, das von einem Planungs- und Ausführungswerkzeug interpretiert wird.