# 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.


# 2. Struktur eines Moduls

Der Bauplan.

Ein sauberes Modul besteht aus:


# 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
}

# 4. Day-2 Operations: Modul-Variablen (Inputs)

Flexibilität ohne Komplexität.

Nutzen Sie Standardwerte (default) in Ihren Modulen.


# 5. Troubleshooting & “War Stories”

Wenn die Kapselung bricht.

# Top 3 Fehlerbilder

  1. Symptom: terraform init schlägt fehl.

    • Ursache: Das Modul-Repository ist nicht erreichbar oder der SSH-Key für Git fehlt.
    • Lösung: git clone manuell testen.
  2. Symptom: Änderungen im Modul werden nicht übernommen.

    • Ursache: Terraform hat das Modul lokal gecacht.
    • Fix: terraform get -update ausführen.
  3. 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.


# 7. Fazit & Empfehlung

Module machen Ihre Infrastruktur wartbar.


# 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

# Referenzen