Server manuell in einer Web-Oberfläche anlegen, Firewall-Regeln per Klick konfigurieren, DNS-Einträge von Hand nachtragen – das war gestern. Mit Infrastructure as Code (IaC) wird die gesamte Serverinfrastruktur in Textdateien beschrieben, versioniert und reproduzierbar bereitgestellt. Terraform von HashiCorp ist dabei zum Quasi-Standard geworden: cloud-agnostisch, deklarativ und mit einer riesigen Provider-Bibliothek ausgestattet.
Was ist Terraform und warum IaC?
Terraform ermöglicht es, Cloud-Ressourcen – Server, Datenbanken, Netzwerke, DNS-Einträge – in der HashiCorp Configuration Language (HCL) zu beschreiben. Statt imperative Schritte auszuführen ("erstelle einen Server, dann konfiguriere die Firewall"), definiert man den gewünschten Zustand ("es soll ein Server mit diesen Eigenschaften existieren"). Terraform berechnet den Unterschied zum aktuellen Zustand und führt nur die nötigen Änderungen durch.
Der größte Vorteil: Infrastruktur liegt im Git-Repository, ist nachvollziehbar, überprüfbar und von jedem Teammitglied reproduzierbar. Environments wie Staging und Produktion können aus denselben Modulen mit unterschiedlichen Variablen aufgebaut werden.
HCL-Syntax: Die wichtigsten Blöcke
Eine Terraform-Konfiguration besteht aus mehreren Blocktypen. Der provider-Block definiert, welcher Cloud-Anbieter genutzt wird und wie die Authentifizierung erfolgt. resource-Blöcke beschreiben konkrete Ressourcen, variable-Blöcke machen Konfigurationen wiederverwendbar und output-Blöcke geben Werte nach dem Apply aus:
terraform {
required_providers {
hcloud = {
source = "hetznercloud/hcloud"
version = "~> 1.45"
}
}
}
provider "hcloud" {
token = var.hcloud_token
}
variable "hcloud_token" {
description = "Hetzner Cloud API Token"
type = string
sensitive = true
}
resource "hcloud_server" "web" {
name = "web-server-01"
image = "ubuntu-24.04"
server_type = "cx22"
location = "nbg1"
ssh_keys = [hcloud_ssh_key.default.id]
}
resource "hcloud_ssh_key" "default" {
name = "my-ssh-key"
public_key = file("~/.ssh/id_ed25519.pub")
}
output "server_ip" {
value = hcloud_server.web.ipv4_address
}
.tf-Dateien schreiben. Nutzen Sie Umgebungsvariablen (TF_VAR_hcloud_token) oder einen Secret-Manager wie HashiCorp Vault.
Der Terraform-Workflow: init, plan, apply, destroy
Die vier Kernbefehle bilden den vollständigen Lifecycle einer Infrastruktur:
- terraform init – Lädt Provider-Plugins herunter und initialisiert das Backend für die State-Datei.
- terraform plan – Zeigt eine Vorschau aller geplanten Änderungen, ohne etwas zu verändern. Ideal für Code-Reviews im CI/CD-Pipeline.
- terraform apply – Führt die geplanten Änderungen durch und aktualisiert die State-Datei.
- terraform destroy – Löscht alle durch Terraform verwalteten Ressourcen. Mit Vorsicht zu verwenden!
Das State-Konzept
Terraform speichert den aktuellen Zustand der verwalteten Infrastruktur in einer terraform.tfstate-Datei. Diese Datei ist das Gedächtnis von Terraform und enthält alle Ressourcen-IDs und Attribute. Lokale State-Dateien sind für Einzelpersonen praktisch, für Teams jedoch problematisch: Zwei Personen dürfen nie gleichzeitig einen Apply durchführen, und die State-Datei kann sensible Daten enthalten.
Die Lösung ist ein Remote Backend. Terraform Cloud bietet kostenloses Remote State Management mit State Locking, verschlüsselter Speicherung und einer Web-Oberfläche für Team-Workflows. Alternativ funktioniert ein S3-Bucket oder ein Azure Blob Storage als Backend.
terraform.tfstate enthält oft Passwörter und private Schlüssel im Klartext. Niemals in Git committen! Fügen Sie *.tfstate und *.tfstate.backup zur .gitignore hinzu.
Praxisbeispiel: Hetzner Cloud Server
Das obige Beispiel provisioniert einen Hetzner-Cloud-Server der Größe cx22 (2 vCPUs, 4 GB RAM) in Nürnberg mit Ubuntu 24.04. Nach terraform apply gibt der Output-Block die öffentliche IP-Adresse aus. Mit der Hetzner-Cloud-Konsole vergleichen: Der Server existiert exakt so, wie er beschrieben wurde – und lässt sich jederzeit durch eine Änderung im Code aktualisieren. Die Dokumentation des Hetzner Cloud Providers listet alle verfügbaren Ressourcentypen.
Terraform vs. Pulumi vs. Ansible vs. AWS CloudFormation
| Merkmal | Terraform | Pulumi | Ansible | CloudFormation |
|---|---|---|---|---|
| Sprache | HCL | Python, TypeScript, Go u.a. | YAML | JSON / YAML |
| Cloud-agnostisch | Ja | Ja | Ja | Nein (nur AWS) |
| State Management | Eigene State-Datei | Pulumi Cloud / selbst gehostet | Kein internes State | AWS intern |
| Konfigurationsmanagement | Nein | Nein | Ja (Hauptstärke) | Nein |
| Lernkurve | Mittel | Gering (bekannte Sprache) | Gering | Hoch |
| Community/Ökosystem | Sehr groß | Wachsend | Sehr groß | Mittel |
Weiterführende Ressourcen
Die offizielle Terraform-Dokumentation ist umfassend und enthält interaktive Tutorials für alle gängigen Cloud-Provider. Das Terraform Registry bietet Tausende von offiziellen und Community-Providern sowie wiederverwendbare Module.
Häufige Fragen zu Terraform
- Was ist der Unterschied zwischen Terraform und Ansible?
- Terraform ist für die Provisionierung von Infrastruktur zuständig (Server erstellen, Netzwerke anlegen), Ansible für die Konfiguration bereits laufender Systeme (Pakete installieren, Dienste konfigurieren). In der Praxis werden beide oft kombiniert: Terraform erstellt die Ressourcen, Ansible konfiguriert sie anschließend.
- Kann Terraform auch bestehende Infrastruktur importieren?
- Ja, mit dem Befehl
terraform importkönnen bereits existierende Ressourcen in die State-Datei aufgenommen werden. Ab Terraform 1.5 gibt es zusätzlich Import-Blöcke direkt in der Konfiguration für einen deklarativen Import-Workflow. - Was passiert, wenn jemand eine Ressource manuell in der Cloud-Konsole ändert?
- Terraform erkennt beim nächsten
plandie Abweichung zwischen State-Datei und tatsächlichem Zustand und plant, den beschriebenen Zustand wiederherzustellen. Manuelle Änderungen werden also beim nächsten Apply überschrieben – ein wichtiges Argument für konsequente IaC-Disziplin. - Ist Terraform OpenSource nach der Lizenzänderung noch kostenlos nutzbar?
- HashiCorp wechselte 2023 zur BUSL-Lizenz. Für die meisten kommerziellen Anwendungen ist Terraform weiterhin kostenlos nutzbar. Wer eine vollständig Open-Source-Alternative bevorzugt, kann auf OpenTofu zurückgreifen, den von der Linux Foundation betreuten Fork unter MPL-2.0-Lizenz.