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 initterraform init -upgrade — Initialisiert neu und aktualisiert die Provider-Plugins.
terraform init -upgradeterraform plan — Zeigt die anstehenden Änderungen an, ohne sie anzuwenden.
terraform planterraform plan -out=<file> — Speichert den Plan in einer Datei für ein späteres Apply.
terraform plan -out=tfplanterraform 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.tfvarsterraform plan -target=<resource> — Plant Änderungen nur für eine bestimmte Ressource (mit Vorsicht einsetzen).
terraform plan -target=aws_instance.webAnwenden & Zerstören
terraform apply — Wendet die Änderungen an, um den Soll-Zustand zu erreichen.
terraform applyterraform apply <planfile> — Wendet eine gespeicherte Plan-Datei an.
terraform apply tfplanterraform apply -auto-approve — Wendet Änderungen ohne interaktive Rückfrage an (in CI/CD üblich, sonst riskant).
terraform apply -auto-approveterraform destroy — Zerstört die gesamte verwaltete Infrastruktur (irreversibel – vorher plan prüfen).
terraform destroyterraform destroy -target=<resource> — Zerstört nur eine bestimmte Ressource.
terraform destroy -target=aws_instance.webState-Verwaltung
terraform state list — Listet alle Ressourcen im State auf.
terraform state listterraform state show <resource> — Zeigt die Details einer bestimmten Ressource an.
terraform state show aws_instance.webterraform state mv <src> <dest> — Verschiebt/benennt eine Ressource im State um.
terraform state mv aws_instance.old aws_instance.newterraform state rm <resource> — Entfernt eine Ressource aus dem State (ohne sie zu zerstören).
terraform state rm aws_instance.importedterraform state pull — Lädt den aktuellen Remote-State herunter und gibt ihn aus.
terraform state pull > state-backup.jsonterraform import <resource> <id> — Importiert vorhandene Infrastruktur in den State.
terraform import aws_instance.web i-1234567890abcdef0Workspaces
terraform workspace list — Listet alle Workspaces auf.
terraform workspace listterraform workspace new <name> — Erstellt einen neuen Workspace.
terraform workspace new stagingterraform workspace select <name> — Wechselt zu einem Workspace.
terraform workspace select productionterraform workspace show — Zeigt den Namen des aktuellen Workspace an.
terraform workspace showterraform workspace delete <name> — Löscht einen leeren Workspace.
terraform workspace delete stagingFormatieren & Validieren
terraform fmt — Formatiert Konfigurationsdateien in den kanonischen Stil.
terraform fmtterraform fmt -check — Prüft, ob die Dateien formatiert sind (für CI).
terraform fmt -check -recursiveterraform validate — Validiert Syntax und Konsistenz der Konfiguration.
terraform validateterraform output — Zeigt alle Output-Werte aus dem State an.
terraform outputterraform output <name> — Zeigt einen bestimmten Output-Wert an.
terraform output instance_ipterraform output -json — Zeigt die Outputs im JSON-Format an.
terraform output -jsonProvider & Module
terraform providers — Zeigt die von der Konfiguration benötigten Provider an.
terraform providersterraform providers lock — Aktualisiert die Dependency-Lock-Datei.
terraform providers lock -platform=linux_amd64terraform get — Lädt Module herunter und aktualisiert sie.
terraform get -updateterraform graph — Erzeugt einen Abhängigkeitsgraphen im DOT-Format.
terraform graph | dot -Tpng > graph.pngterraform 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.
Weiterführende Links
- Terraform-Dokumentation (HashiCorp Developer) – offizielle Referenz zu CLI, Sprache und Providern (englisch)
- Terraform Registry – zentrale Sammlung von Providern und Modulen (englisch)