Was ist Infrastructure as Code?
Infrastructure as Code (IaC) bedeutet, dass Server, Netzwerke, Datenbanken und andere Infrastrukturkomponenten nicht mehr manuell per Klick in einem Webinterface konfiguriert werden, sondern als Code in deklarativen Konfigurationsdateien beschrieben sind. Der große Vorteil: Versionierung, Wiederholbarkeit und Automatisierung. Statt stundenlanger manueller Konfiguration erstellst du deine gesamte Infrastruktur mit einem Befehl – und kannst sie genauso einfach wieder abbauen.
Warum Terraform?
Terraform ist ein Open-Source-Tool von HashiCorp, das Infrastructure as Code für nahezu jeden Cloud-Anbieter ermöglicht. Es ist cloud-agnostisch: Dieselbe Syntax und derselbe Workflow funktionieren bei AWS, Azure, Google Cloud, DigitalOcean, Hetzner und sogar bei Proxmox oder VMware. Die deklarative Sprache HCL (HashiCorp Configuration Language) beschreibt den gewünschten Endzustand, und Terraform kümmert sich um die Differenz zum aktuellen Zustand – das sogenannte Desired-State-Prinzip.
Installation & erste Schritte
Terraform ist eine einzelne Binärdatei. Die Installation unter Linux ist denkbar einfach:
# Terraform installieren (Linux)
wget https://releases.hashicorp.com/terraform/1.9.0/terraform_1.9.0_linux_amd64.zip
unzip terraform_1.9.0_linux_amd64.zip
sudo mv terraform /usr/local/bin/
terraform --version
Jetzt erstellst du dein erstes Terraform-Projekt. Lege ein Verzeichnis an und erstelle eine main.tf-Datei:
terraform {
required_providers {
hcloud = {
source = "hetznercloud/hcloud"
version = "~> 1.45"
}
}
}
provider "hcloud" {
token = var.hcloud_token
}
resource "hcloud_server" "web" {
name = "webserver-01"
server_type = "cx22"
image = "ubuntu-24.04"
location = "nbg1"
}
Die wichtigsten Terraform-Befehle
| Befehl | Beschreibung | Wann anwenden? |
|---|---|---|
terraform init | Initialisiert das Projekt, lädt Provider-Plugins | Einmalig pro Projekt |
terraform plan | Zeigt die geplanten Änderungen an (Trockentest) | Vor jeder Änderung |
terraform apply | Setzt die geplanten Änderungen um | Nach Prüfung des Plans |
terraform destroy | Baut die gesamte Infrastruktur ab | Bei Bedarf / zum Aufräumen |
terraform fmt | Formatiert den Code (ähnlich gofmt) | Regelmäßig |
terraform validate | Prüft die Syntax der Konfiguration | Nach dem Schreiben von Code |
State-Management: Herzstück von Terraform
Der State (Zustand) ist die zentrale Datenbank von Terraform. Er merkt sich, welche Ressourcen existieren und welche Attribute sie haben. Standardmäßig wird der State in einer lokalen terraform.tfstate-Datei gespeichert. Im Team sollte der State jedoch in einem Remote-Backend abgelegt werden – zum Beispiel in S3, HashiCorp Cloud Platform (HCP) Terraform oder Terraform Cloud.
terraform {
backend "s3" {
bucket = "mein-terraform-state"
key = "prod/terraform.tfstate"
region = "eu-central-1"
}
}
Wichtig: Der State enthält sensible Informationen (API-Keys, IPs, Passwörter). Schütze ihn durch Verschlüsselung und Zugriffsbeschränkungen.
Variablen, Outputs und Module
Terraform bietet mächtige Abstraktionsmechanismen:
- Variables: Erlauben flexible Konfiguration. Definiert in
variables.tfund befüllt überterraform.tfvarsoder Umgebungsvariablen. - Outputs: Geben Werte nach dem Apply aus – z. B. die öffentliche IP eines Servers.
- Modules: Wiederverwendbare Bausteine, die du aus dem Terraform Registry verwenden oder selbst erstellen kannst.
# variables.tf
variable "hcloud_token" {
description = "Hetzner Cloud API Token"
type = string
sensitive = true
}
variable "server_count" {
description = "Anzahl der Webserver"
type = number
default = 2
}
# output.tf
output "web_server_ips" {
value = hcloud_server.web[*].ipv4_address
}
Praktisches Beispiel: VPS mit Docker und Nginx
Dieses Beispiel erstellt einen VPS bei Hetzner, installiert Docker und startet einen Nginx-Container mit Terraform und einem Provisioner:
resource "hcloud_server" "app" {
name = "app-server"
server_type = "cx22"
image = "ubuntu-24.04"
location = "hel1"
connection {
type = "ssh"
user = "root"
private_key = file("~/.ssh/id_ed25519")
}
provisioner "remote-exec" {
inline = [
"apt update && apt install -y docker.io",
"docker run -d -p 80:80 nginx"
]
}
}
Nach terraform apply steht ein vollständig konfigurierter Webserver in wenigen Minuten bereit.
Terraform Cloud & Collaboration
Für Teams bietet Terraform Cloud eine Reihe von Features:
| Feature | Beschreibung |
|---|---|
| Remote State | Zentraler State für das gesamte Team |
| VCS Integration | Automatische Runs bei Push auf Git |
| Run Approvals | Manuelle Freigabe vor Apply in Produktion |
| Policy as Code (Sentinel) | Richtlinien für Ressourcen (z. B. "Keine Server außerhalb von Europa") |
| Private Registry | Eigene Module für das Team |
Best Practices 2026
- Halte den State sauber – vermeide manuelle Änderungen an der Infrastruktur außerhalb von Terraform
- Nutze Workspaces für verschiedene Umgebungen (dev/staging/prod)
- Verwende
terraform planvor jedem Apply – immer - Schreibe keine Secrets in die .tf-Dateien – nutze sensitive variables und einen Secrets-Manager
- Fange früh an, Module zu bauen – sie sparen enorm viel Zeit
- Integriere Terraform in deine CI/CD-Pipeline (GitHub Actions, GitLab CI)
Fazit
Terraform ist 2026 der Goldstandard für Infrastructure as Code. Die deklarative Sprache HCL, die riesige Auswahl an Providern und das durchdachte State-Management machen es zum unverzichtbaren Werkzeug für jeden, der Server-Infrastruktur professionell betreibt. Egal, ob du einen einzelnen VPS oder eine Multi-Cloud-Umgebung verwaltest – mit Terraform beschreibst du deine Infrastruktur als Code, versionierst sie und stellst sie automatisiert bereit. Starte noch heute mit deinem ersten Terraform-Projekt!