Einführung
In den vorherigen Labs haben Sie die Rolle des Kochs übernommen: Sie haben Menüs (Konfigurationen) für den Roboter (Terraform) geschrieben, damit dieser sie zubereitet (erstellt). Aber wie merkt sich der Roboter, was er bereits gekocht hat?
Stellen Sie sich vor, Sie hätten ein Lager, aber die Inventarliste verloren. Sie wüssten nicht, was vorhanden ist, wo es sich befindet oder ob etwas gestohlen wurde.
In Terraform wird diese Inventarliste State genannt. Sie ist das Gedächtnis von Terraform. Sie erfasst, welche Ressourcen Terraform erstellt hat, und ordnet Konfigurationsobjekte den entsprechenden Infrastrukturobjekten in der realen Welt zu.
Der State macht die deklarative Verwaltung praktisch. Ohne ihn könnte Terraform Ihre Dateien lesen, hätte aber keine zuverlässige Zuordnung zwischen den dort beschriebenen Objekten und den tatsächlich vorhandenen Objekten.
Der State gehört zu den wichtigsten Konzepten in Terraform. Ohne ihn wüsste Terraform nicht, was bereits vorhanden ist, was sich geändert hat und was aktualisiert oder neu erstellt werden muss.
In diesem Lab sehen Sie, wie Terraform diesen State verwendet, um Ihre Infrastruktur funktionsfähig zu halten. Sie übernehmen die Rolle des „Chaos“: Sie beschädigen Dinge absichtlich und beobachten, wie Terraform den Schaden erkennt und das System automatisch „heilt“.
Den State untersuchen
Die Umgebung ist bereits für Sie vorkonfiguriert. Eine Datei main.tf ist vorhanden, und terraform apply wurde bereits ausgeführt. Das bedeutet, dass die Infrastruktur, ein Docker-Container, bereits läuft.
Überprüfen Sie zunächst, ob der Container ausgeführt wird:
sudo docker ps
In der Ausgabe sollte ein Container mit dem Namen tutorial erscheinen.
Sehen Sie sich nun die Dateien in Ihrem Verzeichnis an. Dort finden Sie terraform.tfstate.
ls -l
Diese Datei ist das „geheime Tagebuch“ von Terraform. Terraform hält darin alles fest, was es tut. Sehen wir hinein.
cat terraform.tfstate
Die Ausgabe hat das Format JSON. Auf den ersten Blick wirkt es möglicherweise kompliziert, aber es handelt sich lediglich um eine strukturierte Form, in der Computer Informationen speichern.
An einer Stelle dieses Textes sehen Sie docker_container sowie die ID des laufenden Containers. Das beweist, dass Terraform diesen konkreten Container kennt.
Wichtige Regel: Bearbeiten Sie diese Datei niemals manuell. Wenn Sie sie ändern, verliert Terraform sein Gedächtnis und könnte Ihre Infrastruktur versehentlich löschen oder beschädigen. Lassen Sie Terraform sein eigenes Tagebuch immer selbst verwalten.
Diese Warnung ist wichtig, weil der State verbindliche Metadaten und nicht nur ein Protokoll enthält. Wenn Sie ihn beschädigen, kann Terraform später schädliche oder schwer nachvollziehbare Entscheidungen treffen.
Eine Abweichung erzeugen
Terraform erwartet, dass es der einzige Verantwortliche für die Verwaltung dieser Ressourcen ist. In der Praxis können jedoch verschiedene Dinge passieren. Vielleicht fällt ein Server aus, oder ein Kollege löscht versehentlich etwas manuell.
Diese Situation wird Drift genannt. Das bedeutet, dass die „Realität“ nicht mehr mit dem „Plan“ übereinstimmt.
Drift kommt in gemeinsam genutzten Umgebungen häufig vor, weil Menschen, Skripte, Abstürze und externe Systeme die Infrastruktur außerhalb des normalen Kontrollzyklus von Terraform verändern können.
Sorgen wir für etwas Chaos. Wir umgehen Terraform und löschen den Container direkt mit Docker-Befehlen.
sudo docker rm -f tutorial
Überprüfen Sie, ob der Container tatsächlich verschwunden ist:
sudo docker ps
In diesem Moment besteht ein Problem:
- Realität: Der Container ist nicht mehr vorhanden.
- State-Datei: Terraform denkt, dass der Container noch vorhanden ist, weil niemand Terraform über die Änderung informiert hat.
Drift erkennen
Sehen wir nun, ob Terraform den „Diebstahl“ bemerkt.
Wenn Sie terraform plan ausführen, aktualisiert Terraform zunächst den State („Refresh“). Terraform fragt Docker dabei: „Existiert der Container mit der ID XYZ noch?“
Führen Sie den Plan-Befehl aus:
terraform plan
Sehen Sie sich die Ausgabe genau an. Sie sollte Folgendes enthalten: docker_container.nginx: Refreshing state...
Anschließend wird ein Plan mit einem grünen + für die Erstellung angezeigt.
Terraform will perform the following actions:
## docker_container.nginx will be created
+ resource "docker_container" "nginx" { ... }
Terraform hat die Abweichung erkannt. Es folgert: „Laut meinem Plan sollte ein Container vorhanden sein. In der Realität ist keiner vorhanden. Daher muss ich einen neuen Container erstellen, um den gewünschten Zustand herzustellen.“
Dieses Verhalten zur Abstimmung verschiedener Zustände gehört zu den wichtigsten Betriebseigenschaften von Terraform. Terraform vergleicht den gewünschten Zustand, den gespeicherten State und die tatsächlich laufende Infrastruktur, um die erforderliche Korrektur zu bestimmen.
Die Infrastruktur wiederherstellen
Dies ist die Fähigkeit zur „Selbstheilung“ von Infrastructure as Code. Da unser Code den gewünschten Zustand definiert — einen laufenden Container — kann Terraform jede auftretende Abweichung automatisch beheben.
Führen Sie apply aus, um das Problem zu beheben:
terraform apply
Geben Sie bei der Eingabeaufforderung yes ein.
Überprüfen Sie anschließend Docker erneut:
sudo docker ps
Der Container ist wieder vorhanden. Er hat möglicherweise eine neue ID und ist möglicherweise eine neue Instanz, aber funktional entspricht Ihre Infrastruktur wieder genau der Definition in der Vorlage.
Zusammenfassung
In diesem Lab haben Sie die Leistungsfähigkeit des State erlebt.
Sie haben gelernt:
- Die State-Datei: Das Gedächtnis von Terraform darüber, was vorhanden ist (
terraform.tfstate). - Drifterkennung: Wie Terraform bemerkt, dass sich Dinge außerhalb seiner Kontrolle ändern, beispielsweise durch ein manuelles Löschen.
- Selbstheilung: Wie
terraform applyfehlende Ressourcen automatisch wiederherstellt, sodass sie wieder mit Ihrem Code übereinstimmen.
Diese Zuverlässigkeit ist der Grund, warum Terraform für die Verwaltung kritischer Infrastrukturen eingesetzt wird. Selbst wenn Ausfälle auftreten, hilft Terraform Ihnen dabei, schnell wieder einen bekannten, funktionierenden Zustand herzustellen.



