Warum Sie vor der Ausführung von Terraform immer den Plan einsehen sollten
Sie haben gerade eine Terraform-Konfiguration für einen neuen Server und eine neue Datenbank geschrieben. Die Datei sieht korrekt aus. Sie führen terraform apply aus und warten. Wenige Sekunden später stellen Sie fest, dass der Server doppelt so groß ist wie nötig und die Datenbank in der falschen Region liegt. Jetzt müssen Sie alles wieder abbauen und von vorne beginnen.
Dieses Szenario spielt sich ständig in Teams ab, die neu in Infrastructure as Code sind. Der Impuls, den Schritt zu überspringen und Änderungen direkt anzuwenden, ist stark. Aber es gibt einen Schritt, der Zeit, Geld und Frustration spart: den Plan vor der Ausführung einzusehen.
Was passiert, wenn Sie den Plan überspringen
Wenn Sie terraform apply direkt ausführen, beginnt Terraform sofort mit dem Erstellen, Ändern oder Löschen von Ressourcen basierend auf Ihrer Konfiguration. Wenn etwas falsch ist, stellen Sie das erst fest, nachdem die Änderungen vorgenommen wurden. Ein Rollback mag bei manchen Ressourcen einfach sein, bei anderen kann es manuelle Bereinigung, Support-Tickets bei Cloud-Anbietern oder Ausfallzeiten für Benutzer bedeuten.
Das Problem sind nicht nur Fehler in der Konfiguration. Selbst wenn Ihre Konfiguration technisch korrekt ist, können die Änderungen unerwartete Seiteneffekte haben. Eine Änderung der Netzwerkkonfiguration könnte die Verbindung zwischen Diensten unterbrechen. Eine Verkleinerung des Speicherplatzes könnte zu Datenverlust führen. Ein Update einer Sicherheitsgruppe könnte versehentlich interne Ressourcen für das Internet freigeben.
Sie brauchen eine Möglichkeit, eine Vorschau darauf zu erhalten, was Terraform tun wird, bevor es es tut.
Wie Terraform Plan funktioniert
Der Befehl terraform plan erzeugt einen sogenannten Ausführungsplan. Er liest Ihre Konfigurationsdateien und vergleicht sie mit dem aktuellen Zustand Ihrer Infrastruktur, der in der Terraform-Statusdatei gespeichert ist. Die Ausgabe zeigt genau, welche Ressourcen erstellt, geändert oder gelöscht werden, zusammen mit den Details jeder Änderung.
Der entscheidende Unterschied ist, dass terraform plan tatsächlich keine Änderungen vornimmt. Es liest und vergleicht nur. Es werden keine Ressourcen erstellt, aktualisiert oder zerstört. Sie können es beliebig oft ausführen, ohne Ihre Infrastruktur zu beeinträchtigen.
So läuft es ab, wenn Sie es ausführen:
terraform plan
Terraform verbindet sich mit Ihrem Provider, liest Ihre Konfiguration, prüft den aktuellen Zustand und gibt eine Zusammenfassung der geplanten Aktionen aus. Für die Server- und Datenbankkonfiguration von früher könnte die Ausgabe so aussehen:
- Ein virtueller Server wird mit 2 CPU-Kernen und 8 GB RAM erstellt
- Eine Datenbank wird mit 100 GB Speicher erstellt
- Beide Ressourcen werden über ein internes Netzwerk verbunden
Wenn Sie bereits einen Server betreiben und dessen Konfiguration ändern, zeigt der Plan, dass der vorhandene Server direkt aktualisiert und nicht zerstört und neu erstellt wird. Diese Unterscheidung ist wichtig, weil direkte Aktualisierungen in der Regel sicherer und schneller sind als ein Ersatz.
Warum der Plan für Ihren Workflow wichtig ist
Der Ausführungsplan liefert Ihnen drei Dinge, die Sie sonst nur schwer bekommen.
Erstens können Sie überprüfen, ob Ihre Änderungen Ihren Absichten entsprechen. Bevor Sie sich zum Anwenden von Änderungen verpflichten, haben Sie die Möglichkeit, die Details zu prüfen. Haben Sie versehentlich den falschen Instanztyp gewählt? Ist die Datenbank-Engine-Version korrekt? Der Plan zeigt diese Details klar an.
Zweitens können Sie Seiteneffekte erkennen, an die Sie nicht gedacht haben. Vielleicht haben Sie eine Variable geändert, die sich auf mehrere Ressourcen auswirkt. Vielleicht löst eine kleine Konfigurationsänderung einen Ressourcenaustausch anstelle einer Aktualisierung aus. Der Plan deckt diese versteckten Abhängigkeiten auf.
Drittens können Sie den Plan mit anderen teilen. In einem Team muss nicht jeder die Terraform-Syntax verstehen. Aber die meisten Ingenieure können eine Planausgabe lesen und potenzielle Probleme erkennen. Ein Datenbankadministrator kann überprüfen, ob die Speicherkonfiguration angemessen ist. Ein Sicherheitsingenieur kann prüfen, ob die Netzwerkregeln nicht zu freizügig sind.
Verwendung des Plans in CI/CD-Pipelines
In Teamumgebungen wird terraform plan typischerweise in der CI/CD-Pipeline automatisiert. Wenn jemand einen Pull-Request öffnet, der die Infrastrukturkonfiguration ändert, führt die Pipeline automatisch terraform plan aus und veröffentlicht das Ergebnis als Kommentar im Pull-Request.
Dieser Workflow bedeutet, dass das gesamte Team überprüfen kann, was sich ändern wird, bevor der Code gemerged wird. Die Diskussion findet anhand der Planausgabe statt, nicht anhand abstrakter Beschreibungen dessen, was der Code tun könnte. Fragen wie "Warum wird diese Ressource ersetzt?" oder "Sollte diese Sicherheitsgruppe für das Internet offen sein?" werden beantwortet, bevor Änderungen angewendet werden.
Das folgende Flussdiagramm veranschaulicht den typischen Plan-Review-Apply-Zyklus, der in CI/CD-Pipelines verwendet wird:
Einige Teams gehen noch weiter und verlangen eine Genehmigung der Planausgabe, bevor der Apply-Schritt fortgesetzt werden kann. Der Plan wird zu einem Kontrollpunkt, der Änderungen an der Produktionsinfrastruktur absichert.
Ein häufiger Fehler: Veraltete Pläne
Es gibt eine wichtige Einschränkung, die Sie verstehen müssen. Der Ausführungsplan ist eine Momentaufnahme dessen, was Terraform zum Zeitpunkt der Befehlsausführung tun würde. Wenn jemand anderes die Infrastruktur zwischen der Ausführung von terraform plan und terraform apply ändert, ist der Plan möglicherweise nicht mehr korrekt.
Angenommen, Sie führen terraform plan aus und sehen, dass ein Server erstellt wird. Bevor Sie terraform apply ausführen, erstellt ein Teammitglied denselben Server manuell über die Cloud-Konsole. Wenn Sie terraform apply ausführen, erkennt Terraform den Konflikt und schlägt fehl, oder schlimmer noch, es könnte eine doppelte Ressource erstellen, je nachdem, wie Ihre Konfiguration geschrieben ist.
Aus diesem Grund halten gute Workflows die Plan- und Apply-Schritte nahe beieinander. In CI/CD-Pipelines führt derselbe Pipeline-Lauf normalerweise beide Schritte nacheinander aus. Für die lokale Entwicklung sollten Sie den Plan unmittelbar vor dem Apply ausführen, nicht Stunden oder Tage vorher.
Einige Teams verwenden auch State Locking, um gleichzeitige Änderungen zu verhindern. Wenn eine Person oder Pipeline einen Plan oder Apply ausführt, werden andere blockiert, bis der Vorgang abgeschlossen ist.
Praktische Checkliste für die Verwendung von Terraform Plan
- Führen Sie vor jedem
terraform applyterraform planaus, auch bei kleinen Änderungen - Überprüfen Sie die Planausgabe auf unerwartete Ressourcenersetzungen oder -löschungen
- Prüfen Sie, ob die Anzahl der zu erstellenden Ressourcen Ihren Erwartungen entspricht
- Achten Sie auf Änderungen an Sicherheitsgruppen, Netzwerkregeln und IAM-Richtlinien
- Teilen Sie die Planausgabe mit relevanten Teammitgliedern zur Überprüfung
- Veröffentlichen Sie den Plan in CI/CD als Kommentar zu Pull-Requests
- Halten Sie Plan- und Apply-Schritte zeitlich nahe beieinander
- Verwenden Sie State Locking, um Konflikte in Teamumgebungen zu vermeiden
Was Sie durch diese Gewohnheit gewinnen
Die Gewohnheit, vor jeder Änderung terraform plan auszuführen, verschiebt Ihren Workflow von reaktiv zu überlegt. Anstatt Probleme zu entdecken, nachdem Ressourcen erstellt wurden, erkennen Sie sie, während sie noch nur Text auf einem Bildschirm sind. Die Kosten für die Behebung eines Fehlers in einem Plan sind null. Die Kosten für die Behebung nach dem Apply können Stunden des Debuggens, der manuellen Bereinigung und der Koordination mit Ihrem Team betragen.
Wenn Sie das nächste Mal eine Terraform-Konfiguration schreiben, führen Sie zuerst den Plan aus. Lesen Sie die Ausgabe sorgfältig. Entscheiden Sie dann, ob Sie sie anwenden. Dieser eine zusätzliche Schritt trennt Teams, die Infrastruktur souverän verwalten, von Teams, die ständig hinter sich aufräumen müssen.