Terraform Ressourcenzerstörung

LinuxBeginner
Jetzt üben

Einführung

Willkommen zu diesem Lab über die Zerstörung von Terraform-Ressourcen. Ein wesentlicher Bestandteil des Infrastruktur-Lebenszyklus ist nicht nur das Erstellen und Aktualisieren von Ressourcen, sondern auch deren sauberes Entfernen, wenn sie nicht mehr benötigt werden. Dieser Prozess wird als Zerstörung (Destruction) bezeichnet.

Terraform bietet einen unkomplizierten und sicheren Workflow für die Zerstörung von Infrastruktur. Der primäre Befehl hierfür ist terraform destroy. Um versehentliches Löschen zu verhindern, bietet Terraform auch eine Möglichkeit, eine Vorschau dessen anzuzeigen, was zerstört wird, bevor Sie die Aktion bestätigen.

In diesem Lab lernen Sie, wie Sie:

  • terraform plan -destroy verwenden, um einen Zerstörungsplan in der Vorschau anzuzeigen.
  • Die Ausgabe des Zerstörungsplans interpretieren.
  • Den Befehl terraform destroy ausführen, um Ressourcen zu entfernen.
  • Überprüfen, ob die Ressourcen sowohl aus dem System als auch aus der Terraform-Zustandsdatei (State File) erfolgreich entfernt wurden.

Wir werden mit einer einfachen local_file-Ressource arbeiten, damit wir uns auf den Terraform-Workflow konzentrieren können, ohne Anmeldeinformationen für Cloud-Anbieter zu benötigen.

Aktuellen Projektstatus bestätigen

Bevor wir mit dem Zerstörungsprozess beginnen, überprüfen wir zunächst den aktuellen Zustand unseres Terraform-Projekts. Dies hilft Ihnen zu verstehen, welche Ressourcen derzeit von Terraform verwaltet werden.

Führen Sie die folgenden Befehle aus, um den aktuellen Projektstatus zu überprüfen:

Zuerst listen wir die Dateien im Projektverzeichnis auf:

ls -la

Sie sollten eine Ausgabe sehen, die der folgenden ähnelt:

total 20
drwxr-xr-x 1 labex labex  110 Oct 15 13:10 .
drwxr-x--- 1 labex labex 4096 Oct 15 13:10 ..
drwxr-xr-x 3 labex labex   23 Oct 15 13:07 .terraform
-rw-r--r-- 1 labex labex 1181 Oct 15 13:07 .terraform.lock.hcl
-rwxrwxr-x 1 labex labex   45 Oct 15 13:10 example.txt
-rw-rw-r-- 1 labex labex  258 Oct 15 13:10 main.tf
-rw-rw-r-- 1 labex labex 1088 Oct 15 13:10 terraform.tfstate

Dies zeigt die Datei main.tf und die Datei terraform.tfstate, die durch das Setup-Skript erstellt wurden, zusammen mit der Datei example.txt, die erstellt wurde, als die Terraform-Konfiguration angewendet wurde.

Als Nächstes überprüfen wir den aktuellen Terraform-Zustand (State):

terraform show

Sie sollten eine Ausgabe sehen, die der folgenden ähnelt:

## local_file.example:
resource "local_file" "example" {
    content              = "This is an example file managed by Terraform."
    directory_permission = "0777"
    file_permission      = "0777"
    filename             = "./example.txt"
    id                   = "ec3adcab998872def2df6200fb03992ac6f237a4"
}

Dies zeigt Informationen über die Ressource local_file.example, die derzeit von Terraform verwaltet wird.

Führen Sie terraform plan -destroy zur Vorschau aus

In diesem Schritt lernen Sie, wie Sie einen spekulativen Zerstörungsplan (Destruction Plan) erstellen. Bevor Sie Ressourcen zerstören, ist es eine bewährte Methode, genau zu überprüfen, was Terraform tun wird. Dies verhindert die versehentliche Löschung kritischer Infrastruktur. Der Befehl terraform plan -destroy erstellt einen Ausführungsplan, der anzeigt, welche Ressourcen zerstört werden, ohne die Zerstörung tatsächlich durchzuführen.

Alle Ihre Arbeiten finden im Verzeichnis ~/project statt. Das Setup-Skript hat bereits eine main.tf-Datei erstellt und angewendet, wodurch eine Datei namens example.txt erzeugt wurde.

Führen Sie nun den folgenden Befehl in Ihrem Terminal aus, um den Zerstörungsplan anzuzeigen:

terraform plan -destroy

Sie werden eine Ausgabe sehen, die der folgenden ähnelt. Diese Ausgabe beschreibt den Plan zur Zerstörung der einen Ressource, die durch unsere Konfiguration verwaltet wird.

local_file.example: Refreshing state... [id=ec3adcab998872def2df6200fb03992ac6f237a4]

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  - destroy

Terraform will perform the following actions:

  ## local_file.example will be destroyed
  - resource "local_file" "example" {
      - content              = "This is an example file managed by Terraform." -> null
      - directory_permission = "0777" -> null
      - file_permission      = "0777" -> null
      - filename             = "./example.txt" -> null
      - id                   = "ec3adcab998872def2df6200fb03992ac6f237a4" -> null
    }

Plan: 0 to add, 0 to change, 1 to destroy.

────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

Note: You didn't use the -out option to save this plan, so Terraform can't
guarantee to take exactly these actions if you run "terraform apply" now.

Zerstörungsplan-Ausgabe bestätigen

In diesem Schritt analysieren wir die Ausgabe des vorherigen Befehls. Das Verständnis des Plans ist entscheidend für die sichere Verwendung von Terraform.

Betrachten Sie die Ausgabe von terraform plan -destroy. Achten Sie auf diese Schlüsselelemente:

  1. Ressourcenaktion (Resource Action): Die Zeile ## local_file.example will be destroyed gibt die beabsichtigte Aktion klar an. Das Symbol - vor resource "local_file" "example" ist die Notation von Terraform für die Zerstörung. Jede Zeile, der ein - vorangestellt ist, zeigt an, dass etwas entfernt wird.

  2. Attributänderungen (Attribute Changes): Die Ausgabe zeigt alle Attribute der Ressource und gibt an, dass sie auf null geändert werden, was die Löschung signalisiert. Zum Beispiel: - filename = "./example.txt" -> null.

  3. Plan-Zusammenfassung (Plan Summary): Die letzte Zeile, Plan: 0 to add, 0 to change, 1 to destroy., bietet eine zusammenfassende Übersicht über den gesamten Plan. Dies ist die wichtigste Zeile, um schnell die geplanten Aktionen zu bestätigen.

Durch die Überprüfung dieses Plans können Sie sicher sein, dass nur die Ressource local_file.example betroffen sein wird. Dieser Bestätigungsschritt ist in realen Szenarien unerlässlich, in denen eine Fehlkonfiguration zur unbeabsichtigten Zerstörung wichtiger Ressourcen führen könnte. In diesem Schritt sind keine Befehle auszuführen; der Fokus liegt auf dem Verständnis des Prozesses.

Führen Sie terraform destroy aus, um Ressourcen zu entfernen

In diesem Schritt werden Sie den Zerstörungsplan ausführen. Nachdem Sie den Plan überprüft und sich von den Änderungen überzeugt haben, können Sie mit der eigentlichen Zerstörung fortfahren.

Der Befehl terraform destroy zeigt zunächst denselben Zerstörungsplan zur endgültigen Überprüfung an und fordert Sie dann zur Bestätigung auf, bevor er fortfährt.

Führen Sie den folgenden Befehl in Ihrem Terminal aus:

terraform destroy

Terraform zeigt den Plan erneut an und bittet um Ihre Zustimmung.

local_file.example: Refreshing state... [id=ec3adcab998872def2df6200fb03992ac6f237a4]

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  - destroy

Terraform will perform the following actions:

  ## local_file.example will be destroyed
  - resource "local_file" "example" {
      - content              = "This is an example file managed by Terraform." -> null
      - directory_permission = "0777" -> null
      - file_permission      = "0777" -> null
      - filename             = "./example.txt" -> null
      - id                   = "ec3adcab998872def2df6200fb03992ac6f237a4" -> null
    }

Plan: 0 to add, 0 to change, 1 to destroy.

Do you really want to destroy all resources?
  Terraform will destroy all your managed infrastructure, as shown above.
  There is no undo. Only 'yes' will be accepted to confirm.

  Enter a value:

Um die Zerstörung zu bestätigen, geben Sie yes ein und drücken Sie die Enter-Taste.

yes

Nach Ihrer Bestätigung fährt Terraform mit der Zerstörung der Ressource fort und gibt den Fortschritt aus.

local_file.example: Destroying... [id=ec3adcab998872def2df6200fb03992ac6f237a4]
local_file.example: Destruction complete after 0s

Destroy complete! Resources: 1 destroyed.

Dies bestätigt, dass die Ressource local_file erfolgreich zerstört wurde.

Überprüfen, ob die Datei vom Dateisystem entfernt wurde

In diesem Schritt überprüfen Sie, ob die Zerstörung der Ressource die beabsichtigte Wirkung auf das System hatte. Da unsere Ressource eine lokale Datei namens example.txt war, sollte die Zerstörung dieser Ressource die Datei vom Dateisystem gelöscht haben.

Sie können dies überprüfen, indem Sie versuchen, die Datei mit dem Befehl ls aufzulisten.

Führen Sie den folgenden Befehl in Ihrem Terminal aus:

ls example.txt

Da die Datei gelöscht wurde, wird der Befehl fehlschlagen und Sie erhalten eine Fehlermeldung vom Betriebssystem. Dieser Fehler ist das erwartete Ergebnis und bestätigt, dass die Ressource erfolgreich zerstört wurde.

ls: cannot access 'example.txt': No such file or directory

Dieser Verifizierungsschritt ist wichtig, da er bestätigt, dass die Aktionen von Terraform in der State-Datei in der realen Welt widergespiegelt werden.

Leere terraform.tfstate Datei prüfen

In diesem Schritt untersuchen Sie die Terraform-Zustandsdatei (terraform.tfstate), um zu sehen, wie sie die Zerstörung der Ressource widerspiegelt. Die Zustandsdatei ist eine JSON-Datei, die die von Terraform verwalteten Ressourcen und deren aktuellen Zustand verfolgt.

Nachdem alle Ressourcen in einer Konfiguration zerstört wurden, wird die Zustandsdatei nicht gelöscht. Stattdessen wird sie aktualisiert, um widerzuspiegeln, dass sie keine Ressourcen mehr verwaltet. Das Array resources innerhalb der Zustandsdatei wird leer sein.

Untersuchen wir den Inhalt der Zustandsdatei. Verwenden Sie den Befehl cat, um sie anzuzeigen:

cat terraform.tfstate

Die Ausgabe wird ein JSON-Objekt sein. Beachten Sie, dass der Schlüssel resources nun auf ein leeres Array [] verweist.

{
  "version": 4,
  "terraform_version": "1.13.3",
  "serial": 3,
  "lineage": "f25aaab8-c186-2b16-1bae-fe9ba25f81e4",
  "outputs": {},
  "resources": [],
  "check_results": null
}

Dies bestätigt aus der Sicht von Terraform, dass für diese Konfiguration keine Ressourcen mehr unter seiner Verwaltung stehen. Der Zustand ist nun sauber.

Zusammenfassung

Herzlichen Glückwunsch zum Abschluss des Labs! Sie haben erfolgreich den Prozess der Zerstörung von Infrastruktur, die von Terraform verwaltet wird, durchlaufen.

In diesem Lab haben Sie gelernt:

  • Die Wichtigkeit der Vorschau von Änderungen mit terraform plan -destroy, um versehentliches Löschen zu verhindern.
  • Wie man einen Zerstörungsplan liest und versteht, wobei man auf die Zusammenfassung und die Änderungen auf Ressourcenebene achtet.
  • Wie man die Zerstörung von Ressourcen mit dem Befehl terraform destroy und dem erforderlichen Bestätigungsschritt ausführt.
  • Wie man überprüft, ob eine Ressource erfolgreich zerstört wurde, indem man sowohl das reale System als auch die Terraform-Zustandsdatei (terraform.tfstate) überprüft.

Die Beherrschung des Zerstörungs-Workflows ist genauso wichtig wie die Beherrschung der Ressourcenerstellung. Es stellt sicher, dass Sie den gesamten Lebenszyklus Ihrer Infrastruktur sauber und sicher verwalten können.