Terraform Grundlagen

8 Kernkonzepte
Die wichtigsten Terraform-Konzepte und Befehle: init · plan · apply · destroy · state · variables · outputs · providers Terraform ist das führende Werkzeug für Infrastructure as Code (IaC). Es ermöglicht die deklarative Definition und Verwaltung von Cloud- und On-Premises-Infrastruktur.

terraform init – Projekt initialisieren

terraform init [Optionen]
terraform init

terraform init initialisiert ein Terraform-Verzeichnis. Es lädt Provider-Plugins herunter, initialisiert Backends und bereitet das Arbeitsverzeichnis vor.

Häufige Optionen

Option Beschreibung
-upgrade Aktualisiert Provider auf die neueste Version
-reconfigure Backend-Konfiguration neu initialisieren
-backend-config Backend-Konfiguration überschreiben
-plugin-dir Plugin-Verzeichnis angeben
Beispiele
terraform init # Standard-Initialisierung
terraform init -upgrade # Provider aktualisieren
terraform init -reconfigure # Backend neu konfigurieren
terraform init -backend-config=backend.tfvars # Backend-Config aus Datei
terraform init -plugin-dir=/custom/plugins # Benutzerdefinierte Plugins
Tipp: Führen Sie terraform init immer nach dem Klonen eines Projekts oder nach Änderungen an provider- oder backend-Konfigurationen aus.

terraform plan – Änderungen anzeigen

terraform plan [Optionen]
terraform plan

terraform plan zeigt einen Ausführungsplan an – welche Ressourcen erstellt, geändert oder gelöscht werden. Es ist der dry-run für apply.

Häufige Optionen

Option Beschreibung
-out=<datei> Plan in Datei speichern
-var <name>=<wert> Variable überschreiben
-var-file=<datei> Variable-Datei verwenden
-target=<ressource> Nur bestimmte Ressourcen planen
-destroy Plan für Löschvorgang
-refresh=false State nicht aktualisieren
Beispiele
terraform plan # Standard-Plan
terraform plan -out=plan.tfplan # Plan speichern
terraform plan -var "instance_type=t3.small" # Variable überschreiben
terraform plan -var-file=dev.tfvars # Variable-Datei
terraform plan -target=aws_instance.web # Nur diese Ressource
terraform plan -destroy # Lösch-Plan
Tipp: Führen Sie immer terraform plan vor apply aus, um Überraschungen zu vermeiden. Ein gespeicherter Plan (-out) kann später mit apply verwendet werden.

terraform apply – Infrastruktur bereitstellen

terraform apply [Optionen]
terraform apply

terraform apply führt die im Plan definierten Änderungen aus und erstellt/ändert/löscht Infrastruktur. Es ist der Hauptbefehl für die Bereitstellung.

Häufige Optionen

Option Beschreibung
-auto-approve Bestätigung überspringen (automatisch)
<plan-datei> Gespeicherten Plan ausführen
-var <name>=<wert> Variable überschreiben
-var-file=<datei> Variable-Datei verwenden
-target=<ressource> Nur bestimmte Ressourcen
-refresh=false State nicht aktualisieren
Beispiele
terraform apply # Interaktiv (Bestätigung erforderlich)
terraform apply -auto-approve # Automatische Ausführung
terraform apply plan.tfplan # Gespeicherten Plan ausführen
terraform apply -var "environment=prod" # Variable setzen
terraform apply -var-file=prod.tfvars # Variable-Datei
terraform apply -target=aws_instance.web # Nur diese Ressource
Tipp: Verwenden Sie terraform apply -auto-approve in CI/CD-Pipelines. In der Entwicklung empfiehlt sich die interaktive Ausführung zur Kontrolle.

terraform destroy – Infrastruktur löschen

terraform destroy [Optionen]
terraform destroy

terraform destroy löscht alle Ressourcen, die im State verwaltet werden. Dies ist der Gegenpart zu applyVorsicht, irreversible!

Häufige Optionen

Option Beschreibung
-auto-approve Bestätigung überspringen
-target=<ressource> Nur bestimmte Ressourcen löschen
-var <name>=<wert> Variable überschreiben
-var-file=<datei> Variable-Datei verwenden
-refresh=false State nicht aktualisieren
Beispiele
terraform destroy # Interaktives Löschen
terraform destroy -auto-approve # Automatisches Löschen
terraform destroy -target=aws_instance.web # Nur diese Ressource löschen
terraform destroy -var "environment=dev" # Mit Variablen
⚠️ Warnung: terraform destroy löscht alle verwalteten Ressourcen – unwiderruflich! Führen Sie immer terraform plan -destroy aus, um zu sehen, was gelöscht wird.

terraform state – State verwalten

terraform state [Subbefehl]
terraform state list terraform state show <ressource> terraform state mv <src> <dst> terraform state rm <ressource>

terraform state ermöglicht die Verwaltung des Terraform-State. Es ist das "Source of Truth" für die verwaltete Infrastruktur.

Wichtige Subbefehle

Subbefehl Beschreibung
list Alle Ressourcen im State auflisten
show <ressource> Details einer Ressource anzeigen
mv <src> <dst> Ressource umbenennen/verschieben
rm <ressource> Ressource aus State entfernen (ohne Löschen)
pull State von Remote-Backend herunterladen
push State in Remote-Backend hochladen
Beispiele
terraform state list # Alle Ressourcen
terraform state show aws_instance.web # Details anzeigen
terraform state mv aws_instance.web aws_instance.web_v2 # Umbenennen
terraform state rm aws_instance.web # Aus State entfernen (Ressource bleibt im Cloud)
terraform state pull > state.json # State in Datei exportieren
Tipp: terraform state rm entfernt Ressourcen nur aus dem State – die eigentliche Infrastruktur bleibt bestehen. Verwenden Sie dies nur für die Aufnahme von bereits existierenden Ressourcen oder für die Bereinigung des State.

Variables & Outputs – Parameter und Ergebnisse

variable · output · terraform.tfvars
# variables.tf variable "instance_type" { description = "EC2 Instanztyp" default = "t2.micro" } # outputs.tf output "instance_ip" { value = aws_instance.web.public_ip }

Variables parametrisieren Terraform-Konfigurationen. Outputs geben Werte nach dem apply aus – z.B. IP-Adressen oder Verbindungsstrings.

Beispiele
# Variable mit Typ
variable "region" {
type = string
description = "AWS Region"
default = "eu-central-1"
}
# Variable mit Validierung
variable "environment" {
validation {
condition = contains(["dev", "staging", "prod"], var.environment)
error_message = "Umgebung muss dev, staging oder prod sein."
}
}
# Output mit Formatierung
output "connection_string" {
value = "mysql://${aws_db_instance.db.address}:3306/mydb"
description = "Datenbank-Verbindungsstring"
}
# Output nach apply anzeigen
terraform output instance_ip
Tipp: Nutzen Sie terraform.tfvars für Umgebungsspezifische Werte. Verwenden Sie terraform output, um Outputs nach dem Apply anzuzeigen – nützlich für Skripte und CI/CD.

Providers & Modules – Erweiterung und Wiederverwendung

provider · module · terraform registry
# provider.tf provider "aws" { region = var.region } # module.tf module "vpc" { source = "terraform-aws-modules/vpc/aws" version = "5.0.0" name = "my-vpc" }

Provider verbinden Terraform mit Cloud-Anbietern (AWS, Azure, GCP) und anderen APIs. Modules sind wiederverwendbare Terraform-Konfigurationen.

Häufige Provider & Quellen

Provider Beschreibung Quelle
aws Amazon Web Services hashicorp/aws
azurerm Microsoft Azure hashicorp/azurerm
google Google Cloud Platform hashicorp/google
kubernetes Kubernetes Cluster hashicorp/kubernetes
helm Helm Charts hashicorp/helm
docker Docker Container kreuzwerker/docker
Beispiele
# Provider mit Aliasing (Multi-Region)
provider "aws" {
region = "us-east-1"
alias = "primary"
}
provider "aws" {
region = "eu-central-1"
alias = "secondary"
}
# Modul aus dem Terraform Registry
module "eks" {
source = "terraform-aws-modules/eks/aws"
version = "19.15.0"
cluster_name = "my-cluster"
vpc_id = module.vpc.vpc_id
}
Tipp: Verwenden Sie terraform providers und terraform version, um Provider-Versionen zu prüfen. Module aus dem Terraform Registry bieten vorgefertigte, getestete Komponenten.

Terraform Workflow im Überblick

1 Write
Terraform-Konfiguration schreiben (.tf)
2 init
Provider & Backend initialisieren
3 plan
Änderungen anzeigen
4 apply
Infrastruktur bereitstellen
5 destroy
Infrastruktur löschen
State Zentraler State
JSON-Datei oder Remote-Backend

Quick Summary

init
Projekt initialisieren
plan
Änderungen anzeigen
apply
Infrastruktur bereitstellen
destroy
Infrastruktur löschen
state
State verwalten
var
Variablen
output
Ausgaben
provider
Provider & Module
terraform init · terraform plan · terraform apply -auto-approve · terraform destroy