- 1 Section
- 10 Lessons
- unbegrenzt
- CI/CD, Automatisierung & IaC10
- 1.1Was ist CI/CD?
- 1.2CI/CD-Pipeline aufbauen: Phasen und Stages
- 1.3GitHub Actions: Workflows und YAML
- 1.4GitLab CI/CD: Pipelines und Jobs
- 1.5Jenkins: Grundlagen und Jenkinsfile
- 1.6Automatisiertes Testen in der Pipeline
- 1.7Ansible: Playbooks und Inventory
- 1.8Terraform: Infrastructure as Code
- 1.9Monitoring der Pipeline
- 1.10Aufgaben CI/CD
Terraform: Infrastructure as Code
Während Ansible Server konfiguriert, beschäftigt sich Terraform mit der Stufe davor: das Erstellen der Server selbst – und der ganzen Cloud-Infrastruktur drumherum. Du beschreibst „ich brauche 3 EC2-Instanzen, einen Load Balancer, eine RDS-Datenbank, ein S3-Bucket" – Terraform erstellt das alles automatisch auf AWS, Azure, GCP oder bei dutzenden anderen Anbietern.
Diese Lektion zeigt dir Infrastructure as Code (IaC) mit Terraform: HCL-Syntax, Providers, Resources, State-Management, der typische plan/apply-Workflow, Variables und Modules. Pflicht-Skill für Cloud-Operations und einer der gefragtesten IT-Kompetenzen heute.
1) Was ist Infrastructure as Code?
Klassisch wurden Server im Cloud-Konsolen-Interface erstellt: AWS-Console aufrufen, „Launch EC2 Instance" klicken, Region wählen, AMI auswählen, Instance-Typ wählen, Storage konfigurieren, Security Group setzen, … nach 30 Klicks läuft eine Maschine. Bei 50 Servern wird das mühsam, fehleranfällig, undokumentiert.
Infrastructure as Code löst das: deine Infrastruktur wird als Code-Datei beschrieben. Mit einem Befehl wird sie erzeugt. Mit demselben Befehl in einer anderen Region kannst du sie identisch nochmal aufbauen. In Git versioniert. Code-Review wie normale Software.
- Konsolen-Klicken in AWS/Azure/GCP-UI
- Nicht reproduzierbar, nicht dokumentiert
- Wer hat was geändert? Schwer nachvollziehbar
- Manuelle Fehler bei jedem neuen Setup
- Inkonsistente Umgebungen (dev/staging/prod)
- Disaster Recovery? Wochenarbeit.
- Code-Dateien beschreiben Infrastruktur
- In Git versioniert, Code-Review möglich
- Reproduzierbar – gleicher Code = gleiche Infra
- Audit-Trail durch Git-History
- Identische Dev/Staging/Prod-Umgebungen
- Disaster Recovery in Minuten möglich
2) Hello Terraform: eine erste Ressource
Terraform-Konfigurationen schreibst du in HCL (HashiCorp Configuration Language) – einer eigenen, deklarativen Sprache. Hier eine minimale Konfig die einen AWS-Server (EC2) erstellt:
Drei Blöcke: terraform (welche Provider werden benötigt), provider (Konfig des Cloud-Anbieters), resource (was soll erstellt werden). Mit terraform apply baut Terraform diese EC2-Instanz auf AWS. Mit terraform destroy löschst du sie wieder.
3) Der Terraform-Workflow
Terraform folgt einem klaren 4-Schritte-Workflow. Klick die Schritte für Details:
Initialisiert das Arbeitsverzeichnis. Lädt die benötigten Provider-Plugins (z.B. AWS-Provider) herunter, erstellt das State-Backend, prüft die Konfiguration. Einmaliger Schritt pro Projekt (oder bei Provider-Updates).
4) Der State: Terraforms Gedächtnis
Das wichtigste interne Konzept von Terraform: der State. Terraform speichert in einer Datei (terraform.tfstate), welche Ressourcen es verwaltet und in welchem Zustand. Beim nächsten plan vergleicht es:
instance_type = "t3.small"
instance_type = "t3.small"
versioning = true
versioning = false
(neu im Code)
5) Variables und Outputs
Hardcoded Werte sind Anti-Pattern. Mit Variables machst du deine Konfig parametrisierbar:
Beim Apply kannst du Variablen überschreiben: terraform apply -var="environment=prod" -var="instance_count=5". Oder du legst eine terraform.tfvars-Datei an wo alle Werte stehen. Mit Outputs zeigt Terraform am Ende wichtige Werte (z.B. die generierten IP-Adressen).
6) Ressourcen-Abhängigkeiten
Terraform erkennt automatisch Abhängigkeiten zwischen Ressourcen. Wenn Resource A auf Resource B referenziert, wird B zuerst erstellt. So entsteht ein Dependency Graph:
terraform graph kannst du den kompletten Graph visualisieren.7) Providers: Cloud-Unterstützung
Terraforms wahre Stärke ist die Provider-Bibliothek: hunderte Plugins für verschiedene Cloud-Anbieter und Services. Hier die wichtigsten:
8) Modules: Wiederverwendung
Wie Ansible-Roles bietet Terraform Modules – wiederverwendbare Konfig-Bausteine. Statt eine Webapp-Infrastruktur immer wieder zu schreiben, machst du daraus ein Module und nutzt es mehrfach:
Die Terraform Registry (registry.terraform.io) ist wie ein App-Store für Module – tausende geprüfte Module für AWS-VPC, EKS-Cluster, RDS-Datenbanken, Azure-Setups, GCP-Komponenten. Die meisten von HashiCorp oder den Cloud-Anbietern selbst.
9) State-Backends
Per Default liegt die State-Datei lokal auf deiner Festplatte. Schlecht für Teams: jeder hätte einen eigenen State, Konflikte vorprogrammiert. Lösung: Remote Backends – State liegt zentral:
State liegt in S3, DynamoDB sorgt für Locking (verhindert dass zwei Personen gleichzeitig apply machen). Alternative Backends: Terraform Cloud (managed Service von HashiCorp), Azure Storage, GCS, Consul, eigene HTTP-Backends. Für Teams unbedingt verwenden – nicht in Git committen!
10) Terraform vs. Ansible
Häufige Frage: wann nehme ich was? Die Kurzantwort: beide – sie ergänzen sich.
| Aspekt | Terraform | Ansible |
|---|---|---|
| Fokus | Infrastruktur (Server, Netzwerk, DB) | Configuration (Pakete, Files, Services) |
| Modell | Deklarativ („was") | Prozedural („wie") |
| State | Mit State-Datei | Stateless |
| Sprache | HCL | YAML |
| Architektur | API-Aufrufe an Cloud-APIs | SSH zu Servern |
| Lifecycle | Provisionierung + Lifecycle | Konfiguration nach Provisionierung |
Typische Workflow-Kombination: Terraform erstellt die EC2-Instanzen, Netzwerk, Datenbank. Dann übernimmt Ansible und installiert Software, kopiert Configs, startet Services. Beide Tools werden in CI/CD-Pipelines orchestriert.
11) Best Practices
Was du beachten solltest in produktiven Terraform-Projekten:
- State niemals in Git: enthält Secrets! Immer Remote Backend mit Verschlüsselung
- State-Locking: DynamoDB (AWS), Blob Lease (Azure), GCS Lock (GCP)
- Verschiedene Workspaces für dev/staging/prod: getrennte States
- Variablen für alles: keine hardcoded Werte, alles parametrisierbar
- terraform fmt: automatische Formatierung, vor jedem Commit
- terraform validate: Syntax-Check
- tflint und checkov: Linter und Security-Scanner
- Modules für Wiederverwendung: vor allem für identische Patterns (Webapp, DB-Cluster)
- plan vor apply – immer reviewen was passieren würde
- Code-Reviews für Terraform-Code wie für jeden anderen Code
- Versionspinning:
required_version = "~> 1.5"verhindert Surprises - Secrets nicht in tfvars: lieber AWS Secrets Manager, Vault, oder Variables aus Umgebungs-Variablen
12) Terraform in CI/CD
Wie Ansible wird Terraform oft in CI/CD-Pipelines integriert. Klassisches Muster:
- PR opened:
terraform planläuft, Ergebnis als Kommentar im PR - PR merged:
terraform apply -auto-approvewendet Änderungen an - Bei Fehler: Alarmierung, ggf. Rollback
Tools wie Atlantis oder Terraform Cloud automatisieren diesen Workflow. Bei größeren Setups Standard – Infrastructure-Änderungen gehen durch denselben Review-Prozess wie Code-Änderungen.
13) OpenTofu: der Open-Source-Fork
Kurz erwähnt: HashiCorp hat 2023 Terraforms Lizenz von Open Source auf eine restriktivere Business-Source-Lizenz geändert. Daraufhin wurde OpenTofu als Community-Fork unter der Apache-2.0-Lizenz geboren. OpenTofu ist API-kompatibel mit Terraform – die meisten Konfigs laufen identisch. Eine Bewegung die Beachtung verdient, gerade in Europa wo Open-Source-Compliance wichtig ist.
Zusammenfassung
Terraform ist das führende Tool für Infrastructure as Code (IaC). Du beschreibst Cloud-Infrastruktur in HCL (HashiCorp Configuration Language), Terraform setzt es um. Workflow: init (Provider laden) → plan (Vorschau) → apply (Ausführen) → destroy (Aufräumen). State ist Terraforms Gedächtnis – Vergleich zwischen Konfig und Realität. Variables und Outputs für Parametrisierung. Resources sind die Bausteine (EC2, S3, RDS, ...), Providers die Cloud-Plugins (AWS, Azure, GCP, hunderte mehr). Modules für Wiederverwendung – Registry mit fertigen Modulen. Remote State Backends (S3+DynamoDB) für Teams – mit Locking. Plan-vor-Apply ist Pflicht. Ergänzt sich gut mit Ansible: Terraform provisioniert Infra, Ansible konfiguriert sie. OpenTofu ist der Open-Source-Fork seit Lizenzänderung. In CI/CD wichtig – Infrastructure-Änderungen via PR und Pipeline.
