# Terraform Modules: Infrastruktur-Komponenten modular gestalten
TL;DR / Management Summary Jedes Mal den gleichen Code für eine VM zu schreiben, verstößt gegen das DRY-Prinzip (Don’t Repeat Yourself). Terraform Module erlauben es uns, Infrastruktur-Komponenten (z.B. einen kompletten Datenbank-Stack oder ein Netzwerk-Layout) in eine wiederverwendbare Box zu packen. Ein Senior Admin nutzt Module, um “Unternehmens-Standards” zu definieren: Ein einziger Modulaufruf erstellt eine VM nach den exakten Security-Vorgaben der Firma, inklusive Backups, Monitoring und Firewall-Regeln.
# 1. Was ist ein Modul?
Die Funktion der Infrastruktur.
Ein Modul ist im Grunde ein Verzeichnis mit .tf Dateien.
- Root Module: Das Verzeichnis, in dem Sie
terraform applyausführen. - Child Module: Ein Unterverzeichnis, das vom Root-Modul aufgerufen wird.
- Vorteil: Kapselung. Komplizierte Provider-Details werden hinter einfachen Eingabe-Variablen versteckt.
# 2. Struktur eines Moduls
Der Bauplan.
Ein sauberes Modul besteht aus:
variables.tf: Die Eingaben (z.B.vm_name,vlan_id).main.tf: Die Ressourcen-Definitionen.outputs.tf: Die Rückgabewerte (z.B. die generierte IP).README.md: Dokumentation für andere Admins.
# 3. Deep Dive: Module aus Git laden
Zentrale Blueprints.
Anstatt Module lokal zu kopieren, speichern wir sie in einem zentralen Git-Repository.
module "standard_web_server" {
source = "git::https://gitlab.firma.de/infra/modules.git//pve-vm?ref=v1.2.0"
hostname = "web-01"
ram_mb = 4096
}
- Vorteil: Versionierung. Sie können für Produktion die Version
v1.2.0nutzen, während Sie in der Entwicklung bereits mitv1.3.0testen.
# 4. Day-2 Operations: Modul-Variablen (Inputs)
Flexibilität ohne Komplexität.
Nutzen Sie Standardwerte (default) in Ihren Modulen.
- Aktion: Definieren Sie im Modul, dass jede VM standardmäßig
protection = truehat. - Nutzen: Ein Junior-Admin kann eine VM erstellen, ohne an den Löschschutz zu denken – das Modul erzwingt den Firmenstandard automatisch.
# 5. Troubleshooting & “War Stories”
Wenn die Kapselung bricht.
# Top 3 Fehlerbilder
-
Symptom:
terraform initschlägt fehl.- Ursache: Das Modul-Repository ist nicht erreichbar oder der SSH-Key für Git fehlt.
- Lösung:
git clonemanuell testen.
-
Symptom: Änderungen im Modul werden nicht übernommen.
- Ursache: Terraform hat das Modul lokal gecacht.
- Fix:
terraform get -updateausführen.
-
Symptom: “Cycle detected”.
- Ursache: Modul A braucht eine Information von Modul B, das wiederum auf Modul A wartet.
# “War Story”: Das “Hardcoded” Modul
Ein Admin erstellte ein perfektes Modul für Windows-Server. Er vergaß jedoch, die VLAN ID als Variable anzulegen und schrieb fest VLAN 10 in den Code.
Das Ergebnis: Monate später sollten Server in ein neues DMZ-VLAN (Artikel 560). Er musste das Modul an 50 Stellen ändern, was hunderte Recreations der VMs auslöste.
Lehre: Ein Modul sollte alle umgebungsspezifischen Parameter als Variablen anbieten. Hartkodierte Werte innerhalb eines Moduls zerstören dessen Sinn.
# 6. Monitoring & Reporting
Modul-Nutzung auditieren.
# Module Registry (Terraform Cloud/GitLab)
Nutzen Sie die Registry-Funktion Ihres Git-Servers.
- KPI:
Module Adoption Rate. Wie viele unserer Projekte nutzen die offiziellen Firmen-Module vs. “Custom-Code”?
# 7. Fazit & Empfehlung
Module machen Ihre Infrastruktur wartbar.
- Empfehlung: Bauen Sie für jede Kern-Technologie (Proxmox-VM, OPNsense-VLAN, S3-Bucket) ein eigenes Modul.
- Wichtig: Dokumentieren Sie die Outputs Ihrer Module akribisch. Sie sind die Schnittstelle für nachgelagerte Automatisierungsschritte (z.B. Ansible).
# Anhang: Cheatsheet (Module CLI)
| Aufgabe | Befehl |
|---|---|
| Module laden | terraform init |
| Updates holen | terraform get -update |
| Baum ansehen | terraform state list (zeigt module.name.resource) |
| Graph exportieren | `terraform graph |