Terraform ist ein Open-Source-Werkzeug von HashiCorp (veröffentlicht 2014), mit dem sich komplette IT-Infrastruktur als Code definieren, verwalten und wieder abbauen lässt. Statt Server, Datenbanken und Netzwerke per Klick in einem Webportal anzulegen, beschreibt man den gewünschten Endzustand in deklarativen Konfigurationsdateien — Terraform erledigt den Rest.

Das Prinzip: deklarativer Zielzustand

Bei Terraform schreibt man nicht „Schritt 1, Schritt 2, Schritt 3", sondern beschreibt das Endergebnis: „Es soll eine virtuelle Maschine mit 4 GB RAM in der Region Frankfurt geben." Diese Beschreibung steht in Dateien mit der Endung .tf, geschrieben in der HCL (HashiCorp Configuration Language), einer menschenlesbaren deklarativen Syntax. Terraform vergleicht den beschriebenen Zielzustand mit dem tatsächlichen Ist-Zustand und gleicht die Differenz automatisch ab.

resource "aws_instance" "web" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t3.micro"
  tags = {
    Name = "webserver"
  }
}

Provider: die Brücke zu jeder Plattform

Ein Provider ist ein Plugin, das Terraform die API einer Plattform versteht — vom Cloud-Anbieter wie AWS, Azure oder Google Cloud Platform über Kubernetes bis zu DNS-Diensten. Dadurch verwaltet Terraform mit einer einzigen Syntax Ressourcen aus vielen verschiedenen Systemen — ein zentraler Vorteil gegenüber Plattform-eigenen Tools, die nur in ihrer eigenen Welt funktionieren.

Der Arbeitsablauf: init, plan, apply

  • terraform init — lädt die benötigten Provider-Plugins und Module herunter.
  • terraform plan — zeigt eine Vorschau: Welche Ressourcen werden angelegt, geändert oder gelöscht? Diese Änderungsvorschau lässt sich prüfen, bevor irgendetwas passiert.
  • terraform apply — führt die geplante Änderung aus.
  • terraform destroy — baut die gesamte beschriebene Infrastruktur wieder ab.

Wiederholtes apply ist idempotent: Wenn sich nichts geändert hat, passiert auch nichts. Ändert jemand die Infrastruktur an Terraform vorbei, erkennt das Werkzeug die Abweichung (Drift) und gleicht sie beim nächsten Lauf wieder an.

State: das Gedächtnis von Terraform

Terraform führt Buch über alles, was es angelegt hat — in der State-Datei terraform.tfstate. Sie speichert die Zuordnung zwischen beschriebenen Ressourcen und realen Objekten. Im Team sollte der State nicht in einer lokalen Datei liegen, sondern in einem gemeinsamen Backend (z. B. Cloud-Object-Storage oder Terraform Cloud), damit alle dasselbe Abbild sehen. Wiederverwendbare Bausteine heißen Module; ganze Architekturen lassen sich damit standardisieren und an Kollegen weitergeben.

Abgrenzung: Provisionierung statt Konfiguration

Terraform legt Infrastruktur an (Provisionierung): Es erstellt die VM, das Netzwerk, die Datenbank. Tools wie Ansible, Puppet oder Chef bringen dagegen Software auf vorhandenen Systemen in den gewünschten Zustand (Konfigurationsmanagement). In der Praxis ergänzen sich beide: Terraform baut die Server, Ansible richtet sie anschließend ein. Zusammen bilden sie die Grundlage von Infrastructure as Code im Cloud-Computing-Umfeld.

Praxis-Tipps

  • Infrastruktur und Konfiguration versionieren — typischerweise in Git — und Änderungen per Review freigeben.
  • Backend für den State immer teilen, nie lokal auf einem Laptop „vergessen".
  • Ressourcen mit aussagekräftigen Namen und Tags versehen, damit Kosten und Besitz nachvollziehbar bleiben.
  • Nach der Bereitstellung mit Prometheus überwachen, damit Ausfälle früh auffallen.
  • Nach dem Lizenzwechsel von HashiCorp (2023 auf Business Source License) existiert mit OpenTofu ein von der Linux Foundation gepflegter, quelloffener Fork — wer Freie-Software-Lizenzen braucht, nutzt OpenTofu.

Verwandte Grundlagen: Container und Kubernetes lassen sich ebenfalls per Terraform provisionieren.