# Infrastructure as Code (IaC): Architektur & Paradigmen der Automatisierung
TL;DR / Management Summary In der modernen IT-Welt wird Infrastruktur nicht mehr “geklickt”, sondern “geschrieben”. Infrastructure as Code (IaC) behandelt Server, Netzwerke und Datenbanken wie Software-Code. Ein Senior Admin nutzt IaC, um Umgebungen reproduzierbar zu machen, menschliche Fehler zu eliminieren und die gesamte Infrastruktur via Git zu versionieren. Das Kernkonzept ist die Idempotenz: Ein Skript kann 100x laufen und sorgt immer für den exakt gleichen Zielzustand.
# 1. Deklarativ vs. Imperativ
Das ‘Was’ vs. das ‘Wie’.
- Imperativ (Skripting): Sie sagen dem System jeden Schritt einzeln.
- Befehl: “Erstelle eine VM, dann installiere Nginx, dann ändere die IP”.
- Problem: Läuft das Skript zweimal, gibt es Fehler (z.B. “VM existiert schon”).
- Deklarativ (Modernes IaC): Sie beschreiben nur den Zielzustand.
- Befehl: “Ich möchte einen Nginx-Server mit IP X”.
- Vorteil: Das Tool (z.B. Terraform) prüft den Ist-Zustand und führt nur die Änderungen aus, die nötig sind (Idempotenz).
# 2. Die Vorteile von IaC
Warum wir uns die Arbeit machen.
- Geschwindigkeit: Ein komplettes Rechenzentrum in Proxmox (Artikel 661) wird in Minuten statt Tagen hochgezogen.
- Versionierung: Jede Änderung am Netz oder am RAM einer VM wird in Git protokolliert. (Wer hat was wann geändert?).
- Self-Documentation: Der Code IST die Dokumentation. Es gibt keinen Unterschied mehr zwischen dem Plan und der Realität.
# 3. Deep Dive: Immutable Infrastructure
Ersetzen statt Reparieren.
In einer IaC-Welt reparieren wir keine Server mehr.
- Vorgang: Wenn eine Applikation ein Update braucht, löschen wir die alte VM und erstellen via Terraform eine neue aus dem aktualisierten Template.
- Vorteil: Keine “Konfigurations-Leichen” (Drift) über Jahre hinweg. Das System ist immer sauber und nachvollziehbar.
# 4. Day-2 Operations: Configuration Drift
Der Feind der Automatisierung.
Configuration Drift passiert, wenn ein Admin manuell in der Proxmox-GUI eine Einstellung ändert, die nicht im Code steht.
- Aktion: Führen Sie regelmäßig einen Plan-Check durch.
- Ergebnis: Das IaC-Tool meldet: “Manuelle Änderung erkannt! Soll ich diese überschreiben?”. Ein Senior Admin lässt den Code immer gewinnen.
# 5. Troubleshooting & “War Stories”
Wenn der Code Amok läuft.
# Top 3 Fehlerbilder
-
Symptom:
terraform applyschlägt fehl, weil das Passwort am Host manuell geändert wurde.- Ursache: Die Authentifizierung der API-Schnittstelle (Artikel 712) wurde unterbrochen.
-
Symptom: “State File Locked”.
- Ursache: Zwei Admins versuchen gleichzeitig, die Infrastruktur zu ändern.
- Lösung: Nutzen Sie zwingend Remote Backends mit Locking-Support.
-
Symptom: Versehentliches Löschen von Ressourcen.
- Fix: Nutzen Sie
prevent_destroyFlags im Code für produktive Datenbanken.
- Fix: Nutzen Sie
# “War Story”: Die “Schatten”-Dokumentation
Ein Unternehmen hatte ein perfektes IaC-Setup. Ein neuer Mitarbeiter kannte das Tool nicht und änderte via GUI den RAM aller VMs, um ein Performance-Problem zu lösen. Das Ergebnis: Am nächsten Morgen lief die automatisierte Wartungspipeline. Da der Code noch die alten RAM-Werte enthielt, setzte Terraform alle 200 VMs auf den alten Stand zurück. Die Applikationen stürzten unter der Last wieder ab. Lehre: IaC funktioniert nur, wenn die GUI für manuelle Änderungen gesperrt ist (ReadOnly-Permissions für Admins im Alltag). Der Code muss die einzige Quelle der Wahrheit bleiben.
# 6. Monitoring & Reporting
Code-Integrität.
# Linting & Validierung
Integrieren Sie Checks in Ihre Pipeline:
- TFLint: Prüft Terraform-Code auf Best Practices.
- Ansible-Lint: Findet potenzielle Fehler in Playbooks.
# 7. Fazit & Empfehlung
IaC ist die Eintrittskarte in die Welt von DevOps und Cloud-Scale.
- Empfehlung: Starten Sie mit Terraform für die Hardware und Ansible für die Software.
- Wichtig: Versionieren Sie ALLES in Git (Artikel 420b). Eine Änderung, die nicht im Git steht, hat niemals stattgefunden.
# Anhang: Die IaC-Werkzeugkiste
| Werkzeug | Typ | Hauptnutzen |
|---|---|---|
| Terraform | Deklarativ | Provisionierung (Hardware) |
| Ansible | Hybrid | Konfiguration (Software) |
| Pulumi | Programmatisch | IaC via Python/TypeScript |
| Cloud-Init | Boot-Script | Erstkonfiguration (OS) |