Terraform — Infrastruktur deklarativ als Code verwalten

Praxis-Guide zu Terraform: Infrastructure as Code mit HCL, Provider-Ökosystem, State-Verwaltung und plan/apply-Workflow für Cloud-Ressourcen.

Terraform von HashiCorp ist das De-facto-Standardwerkzeug für Infrastructure as Code: Statt Ressourcen per Klick anzulegen, beschreibst du sie deklarativ in der Konfigurationssprache HCL und überlässt Terraform den Abgleich mit dem Ist-Zustand. Über ein riesiges Provider-Ökosystem steuerst du AWS, Azure, Google Cloud und Hunderte weiterer Plattformen mit denselben Befehlen. Den Kern bildet der plan/apply-Workflow – erst zeigt dir Terraform, was sich ändern würde, dann setzt es die Änderungen um – während die State-Datei festhält, welche reale Ressource zu welchem Code-Block gehört. Dieser Guide führt dich durch die wichtigsten Kommandos vom Init bis zum Workspace-Handling.

Initialisieren & Planen

terraform init — Initialisiert ein Arbeitsverzeichnis (lädt Provider und Module herunter).

terraform init

terraform init -upgrade — Initialisiert neu und aktualisiert die Provider-Plugins.

terraform init -upgrade

terraform plan — Zeigt die anstehenden Änderungen an, ohne sie anzuwenden.

terraform plan

terraform plan -out=<file> — Speichert den Plan in einer Datei für ein späteres Apply.

terraform plan -out=tfplan

terraform plan -var '<key>=<value>' — Plant mit einer überschriebenen Variable.

terraform plan -var 'region=eu-west-1'

terraform plan -var-file=<file> — Plant mit Variablen aus einer Datei.

terraform plan -var-file=prod.tfvars

terraform plan -target=<resource> — Plant Änderungen nur für eine bestimmte Ressource (mit Vorsicht einsetzen).

terraform plan -target=aws_instance.web

Anwenden & Zerstören

terraform apply — Wendet die Änderungen an, um den Soll-Zustand zu erreichen.

terraform apply

terraform apply <planfile> — Wendet eine gespeicherte Plan-Datei an.

terraform apply tfplan

terraform apply -auto-approve — Wendet Änderungen ohne interaktive Rückfrage an (in CI/CD üblich, sonst riskant).

terraform apply -auto-approve

terraform destroy — Zerstört die gesamte verwaltete Infrastruktur (irreversibel – vorher plan prüfen).

terraform destroy

terraform destroy -target=<resource> — Zerstört nur eine bestimmte Ressource.

terraform destroy -target=aws_instance.web

State-Verwaltung

terraform state list — Listet alle Ressourcen im State auf.

terraform state list

terraform state show <resource> — Zeigt die Details einer bestimmten Ressource an.

terraform state show aws_instance.web

terraform state mv <src> <dest> — Verschiebt/benennt eine Ressource im State um.

terraform state mv aws_instance.old aws_instance.new

terraform state rm <resource> — Entfernt eine Ressource aus dem State (ohne sie zu zerstören).

terraform state rm aws_instance.imported

terraform state pull — Lädt den aktuellen Remote-State herunter und gibt ihn aus.

terraform state pull > state-backup.json

terraform import <resource> <id> — Importiert vorhandene Infrastruktur in den State.

terraform import aws_instance.web i-1234567890abcdef0

Workspaces

terraform workspace list — Listet alle Workspaces auf.

terraform workspace list

terraform workspace new <name> — Erstellt einen neuen Workspace.

terraform workspace new staging

terraform workspace select <name> — Wechselt zu einem Workspace.

terraform workspace select production

terraform workspace show — Zeigt den Namen des aktuellen Workspace an.

terraform workspace show

terraform workspace delete <name> — Löscht einen leeren Workspace.

terraform workspace delete staging

Formatieren & Validieren

terraform fmt — Formatiert Konfigurationsdateien in den kanonischen Stil.

terraform fmt

terraform fmt -check — Prüft, ob die Dateien formatiert sind (für CI).

terraform fmt -check -recursive

terraform validate — Validiert Syntax und Konsistenz der Konfiguration.

terraform validate

terraform output — Zeigt alle Output-Werte aus dem State an.

terraform output

terraform output <name> — Zeigt einen bestimmten Output-Wert an.

terraform output instance_ip

terraform output -json — Zeigt die Outputs im JSON-Format an.

terraform output -json

Provider & Module

terraform providers — Zeigt die von der Konfiguration benötigten Provider an.

terraform providers

terraform providers lock — Aktualisiert die Dependency-Lock-Datei.

terraform providers lock -platform=linux_amd64

terraform get — Lädt Module herunter und aktualisiert sie.

terraform get -update

terraform graph — Erzeugt einen Abhängigkeitsgraphen im DOT-Format.

terraform graph | dot -Tpng > graph.png

terraform version — Zeigt die Versionen von Terraform und den Providern an.

terraform version

Fazit

Terraform belohnt diszipliniertes Arbeiten: Lass immer erst terraform plan laufen und lies die Ausgabe, bevor du apply ausführst – besonders bei terraform destroy oder apply -auto-approve, die deine Infrastruktur ohne weitere Rückfrage umbauen oder einreißen. Behandle die State-Datei wie ein Geheimnis: Sie enthält häufig Klartext-Secrets (Passwörter, Tokens), gehört deshalb nie ins Git und sollte als verschlüsselter Remote-State liegen. -target ist ein Notfall-Werkzeug, kein Alltagsflag – setze es nur gezielt ein, wenn du weißt, was du tust.

Verwandte Kommandos

  • ansible – agentenlose Konfigurationsverwaltung und Provisionierung
  • aws – offizielles CLI für Amazon-Web-Services-Ressourcen