arrow_back

Infrastruktur als Code mit Terraform

Anmelden Teilnehmen
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

Infrastruktur als Code mit Terraform

Lab 1 Stunde universal_currency_alt 5 Guthabenpunkte show_chart Mittelstufe
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

Dieses Lab wurde mit unserem Partner HashiCorp entwickelt. Ihre personenbezogenen Daten werden möglicherweise an HashiCorp, den Lab-Sponsor, weitergegeben, wenn Sie zugestimmt haben, Produktupdates, Mitteilungen und Angebote in Ihrem Kontoprofil zu erhalten.

GSP750

Logo: Google Cloud-Labs zum selbstbestimmten Lernen

Übersicht

Terraform ist das Infrastruktur-als-Code-Angebot von HashiCorp. Es handelt sich dabei um ein Tool zum sicheren und wiederholbaren Erstellen, Ändern und Verwalten einer Infrastruktur. Operatoren und Infrastrukturteams können Terraform verwenden, um Umgebungen über eine Konfigurationssprache mit dem Namen HashiCorp Configuration Language (HCL) für visuell lesbare, automatisierte Deployments zu verwalten.

Infrastruktur als Code ist der Prozess, bei dem eine Infrastruktur in einer oder mehreren Dateien verwaltet wird, statt Ressourcen manuell über eine Benutzeroberfläche zu konfigurieren. Eine Ressource in dieser Instanz ist jede Art von Infrastruktur in einer bestimmten Umgebung, z. B. eine virtuelle Maschine, eine Sicherheitsgruppe, eine Netzwerkschnittstelle usw. Auf übergeordneter Ebene ermöglicht Terraform den Operatoren, HCL zu verwenden, um Dateien zu erstellen, die Definitionen der gewünschten Ressourcen bei fast jedem Anbieter (AWS, Google Cloud, GitHub, Docker usw.) enthalten. Außerdem wird mit Terraform das Erstellen dieser Ressourcen zum Zeitpunkt der Anwendung automatisiert.

Ein einfacher Workflow zur Bereitstellung orientiert sich eng an den folgenden Schritten:

  • Umfang festlegen: Geben Sie an, welche Ressourcen für ein bestimmtes Projekt erstellt werden müssen.
  • Erstellen: Erstellen Sie die Konfigurationsdatei in HCL anhand der festgelegten Parameter.
  • Initialisieren: Führen Sie terraform init im Projektverzeichnis mit den Konfigurationsdateien aus. Dadurch werden die richtigen Anbieter-Plug-ins für das Projekt heruntergeladen.
  • Planen und anwenden: Führen Sie terraform plan aus, um den Erstellungsprozess zu bestätigen. Erstellen Sie dann mit terraform apply echte Ressourcen sowie die Statusdatei, mit der zukünftige Änderungen in Ihren Konfigurationsdateien mit dem verglichen wird, was tatsächlich in Ihrer Bereitstellungsumgebung vorhanden ist.

Lernziele

Aufgaben in diesem Lab:

  • Infrastruktur mit Terraform erstellen, ändern und löschen
  • Ressourcenabhängigkeiten mit Terraform erstellen
  • Infrastruktur mit Terraform bereitstellen

Einrichtung und Anforderungen

Vor dem Klick auf „Start Lab“ (Lab starten)

Lesen Sie diese Anleitung. Labs sind zeitlich begrenzt und können nicht pausiert werden. Der Timer beginnt zu laufen, wenn Sie auf Lab starten klicken, und zeigt Ihnen, wie lange die Ressourcen für das Lab verfügbar sind.

In diesem praxisorientierten Lab können Sie die Lab-Aktivitäten in einer echten Cloud-Umgebung selbst durchführen – nicht in einer Simulations- oder Demo-Umgebung. Dazu erhalten Sie neue, temporäre Anmeldedaten, mit denen Sie für die Dauer des Labs auf Google Cloud zugreifen können.

Für dieses Lab benötigen Sie Folgendes:

  • Einen Standardbrowser (empfohlen wird Chrome)
Hinweis: Nutzen Sie den privaten oder Inkognitomodus, um dieses Lab durchzuführen. So wird verhindert, dass es zu Konflikten zwischen Ihrem persönlichen Konto und dem Teilnehmerkonto kommt und zusätzliche Gebühren für Ihr persönliches Konto erhoben werden.
  • Zeit für die Durchführung des Labs – denken Sie daran, dass Sie ein begonnenes Lab nicht unterbrechen können.
Hinweis: Wenn Sie über ein persönliches Google Cloud-Konto oder -Projekt verfügen, verwenden Sie es nicht für dieses Lab. So werden zusätzliche Kosten für Ihr Konto vermieden.

Lab starten und bei der Google Cloud Console anmelden

  1. Klicken Sie auf Lab starten. Wenn Sie für das Lab bezahlen müssen, wird ein Pop-up-Fenster geöffnet, in dem Sie Ihre Zahlungsmethode auswählen können. Auf der linken Seite befindet sich der Bereich Details zum Lab mit diesen Informationen:

    • Schaltfläche Google Cloud Console öffnen
    • Restzeit
    • Temporäre Anmeldedaten für das Lab
    • Ggf. weitere Informationen für dieses Lab
  2. Klicken Sie auf Google Cloud Console öffnen (oder klicken Sie mit der rechten Maustaste und wählen Sie Link in Inkognitofenster öffnen aus, wenn Sie Chrome verwenden).

    Im Lab werden Ressourcen aktiviert. Anschließend wird ein weiterer Tab mit der Seite Anmelden geöffnet.

    Tipp: Ordnen Sie die Tabs nebeneinander in separaten Fenstern an.

    Hinweis: Wird das Dialogfeld Konto auswählen angezeigt, klicken Sie auf Anderes Konto verwenden.
  3. Kopieren Sie bei Bedarf den folgenden Nutzernamen und fügen Sie ihn in das Dialogfeld Anmelden ein.

    {{{user_0.username | "Username"}}}

    Sie finden den Nutzernamen auch im Bereich Details zum Lab.

  4. Klicken Sie auf Weiter.

  5. Kopieren Sie das folgende Passwort und fügen Sie es in das Dialogfeld Willkommen ein.

    {{{user_0.password | "Password"}}}

    Sie finden das Passwort auch im Bereich Details zum Lab.

  6. Klicken Sie auf Weiter.

    Wichtig: Sie müssen die für das Lab bereitgestellten Anmeldedaten verwenden. Nutzen Sie nicht die Anmeldedaten Ihres Google Cloud-Kontos. Hinweis: Wenn Sie Ihr eigenes Google Cloud-Konto für dieses Lab nutzen, können zusätzliche Kosten anfallen.
  7. Klicken Sie sich durch die nachfolgenden Seiten:

    • Akzeptieren Sie die Nutzungsbedingungen.
    • Fügen Sie keine Wiederherstellungsoptionen oder Zwei-Faktor-Authentifizierung hinzu (da dies nur ein temporäres Konto ist).
    • Melden Sie sich nicht für kostenlose Testversionen an.

Nach wenigen Augenblicken wird die Google Cloud Console in diesem Tab geöffnet.

Hinweis: Wenn Sie sich eine Liste der Google Cloud-Produkte und ‑Dienste ansehen möchten, klicken Sie oben links auf das Navigationsmenü. Symbol für Navigationsmenü

Cloud Shell aktivieren

Cloud Shell ist eine virtuelle Maschine, auf der Entwicklertools installiert sind. Sie bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und läuft auf Google Cloud. Mit Cloud Shell erhalten Sie Befehlszeilenzugriff auf Ihre Google Cloud-Ressourcen.

  1. Klicken Sie oben in der Google Cloud Console auf Cloud Shell aktivieren Symbol für Cloud Shell-Aktivierung.

Wenn Sie verbunden sind, sind Sie bereits authentifiziert und das Projekt ist auf Ihre Project_ID, eingestellt. Die Ausgabe enthält eine Zeile, in der die Project_ID für diese Sitzung angegeben ist:

Ihr Cloud-Projekt in dieser Sitzung ist festgelegt als {{{project_0.project_id | "PROJECT_ID"}}}

gcloud ist das Befehlszeilentool für Google Cloud. Das Tool ist in Cloud Shell vorinstalliert und unterstützt die Tab-Vervollständigung.

  1. (Optional) Sie können den aktiven Kontonamen mit diesem Befehl auflisten:
gcloud auth list
  1. Klicken Sie auf Autorisieren.

Ausgabe:

ACTIVE: * ACCOUNT: {{{user_0.username | "ACCOUNT"}}} Um das aktive Konto festzulegen, führen Sie diesen Befehl aus: $ gcloud config set account `ACCOUNT`
  1. (Optional) Sie können die Projekt-ID mit diesem Befehl auflisten:
gcloud config list project

Ausgabe:

[core] project = {{{project_0.project_id | "PROJECT_ID"}}} Hinweis: Die vollständige Dokumentation für gcloud finden Sie in Google Cloud in der Übersicht zur gcloud CLI.

Aufgabe 1: Infrastruktur erstellen

Terraform ist in Cloud Shell vorinstalliert. Sie können also direkt beginnen und Infrastruktur erstellen.

Erstellen Sie zuerst Ihre Beispielkonfiguration in einer Datei mit dem Namen main.tf. Terraform erkennt Dateien mit der Endung .tf oder .tf.json als Konfigurationsdateien und lädt diese, wenn es ausgeführt wird.

  1. Erstellen Sie die Datei main.tf:
touch main.tf
  1. Klicken Sie auf die Schaltfläche Editor öffnen in der Symbolleiste von Cloud Shell. (Sie können zwischen Cloud Shell und dem Code-Editor wechseln. Verwenden Sie dazu entsprechend die Symbole Editor öffnen und Terminal öffnen oder klicken Sie auf die Schaltfläche In neuem Fenster öffnen, damit der Editor auf einem eigenen Tab geöffnet bleibt.)

  2. Fügen Sie im Editor die folgenden Inhalte der Datei main.tf hinzu.

terraform { required_providers { google = { source = "hashicorp/google" version = "3.5.0" } } } provider "google" { project = "{{{project_0.project_id | PROJECT ID}}}" region = "{{{project_0.default_region | REGION}}}" zone = "{{{project_0.default_zone | ZONE}}}" } resource "google_compute_network" "vpc_network" { name = "terraform-network" } Hinweis: Entfernen Sie den Block terraform {}, um dieses Snippet in Terraform 0.12 zu verwenden.

Terraform-Block

Der Block terraform {} ist erforderlich, damit Terraform weiß, welcher Anbieter aus der Terraform-Registry heruntergeladen werden soll. In der Konfiguration oben ist die Quelle des Anbieters google als hashicorp/google definiert, was die Abkürzung für registry.terraform.io/hashicorp/google ist.

Sie können auch jedem im Block required_providers definierten Anbieter eine Version zuweisen. Das Argument version ist optional, wird aber empfohlen. Es wird verwendet, um den Anbieter auf eine bestimmte Version oder Reihe von Versionen zu beschränken. So wird verhindert, dass ein neuer Anbieter heruntergeladen wird, der möglicherweise funktionsgefährdende Änderungen enthält. Wird die Version nicht angegeben, lädt Terraform bei der Initialisierung automatisch den neuesten Anbieter herunter.

Weitere Informationen finden Sie auf der Website von HashiCorp Terraform unter Provider Requirements (Anbieteranforderungen).

Anbieter

Der Block provider wird verwendet, um den genannten Anbieter, in diesem Fall google, zu konfigurieren. Ein Anbieter ist für das Erstellen und Verwalten von Ressourcen verantwortlich. Mehrere Anbieterblöcke können vorhanden sein, wenn eine Terraform-Konfiguration Ressourcen von unterschiedlichen Anbietern verwaltet.

Initialisierung

Der erste Befehl, der bei einer neuen Konfiguration ausgeführt wird, lautet terraform init. Dies gilt auch, wenn Sie eine bestehende Konfiguration der Versionsverwaltung überprüfen. Mit diesem Befehl werden verschiedene lokale Einstellungen und Daten initialisiert, die von den nachfolgenden Befehlen verwendet werden.

  • Initialisieren Sie Ihre neue Terraform-Konfiguration, indem Sie den Befehl terraform init im gleichen Verzeichnis wie Ihre Datei main.tf ausführen:
terraform init

Ressourcen erstellen

  1. Wenden Sie Ihre Konfiguration nun durch Ausführen des Befehls terraform apply an:
terraform apply

In der Ausgabe steht ein + neben der Ressource "google_compute_network" "vpc_network". Das bedeutet, dass Terraform diese Ressource erstellen wird. Darunter werden die Attribute angezeigt, die festgelegt werden. Wird der Wert (known after apply) angezeigt, bedeutet das, dass der Wert unbekannt ist, bis die Ressource erstellt wird.

Wenn der Plan erfolgreich erstellt wurde, hält Terraform an und fährt erst nach einer Bestätigung fort. An dieser Stelle kann ohne Änderungen an der Infrastruktur abgebrochen werden, falls etwas im Plan fehlerhaft oder gefährlich erscheint.

Wenn terraform apply aufgrund eines Fehlers fehlgeschlagen ist, lesen Sie die Fehlermeldung und beheben Sie den aufgetretenen Fehler.

  1. Hier sieht der Plan akzeptabel aus. Geben Sie also, wenn Sie zur Bestätigung aufgefordert werden, yes ein, um fortzufahren.

Die Ausführung des Plans dauert einige Minuten, da Terraform wartet, bis das Netzwerk erfolgreich erstellt wurde:

# ... Enter a value: yes google_compute_network.vpc_network: Creating... google_compute_network.vpc_network: Still creating... [10s elapsed] google_compute_network.vpc_network: Still creating... [20s elapsed] google_compute_network.vpc_network: Still creating... [30s elapsed] google_compute_network.vpc_network: Still creating... [40s elapsed] google_compute_network.vpc_network: Still creating... [50s elapsed] google_compute_network.vpc_network: Creation complete after 58s [id=terraform-network] Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Danach ist Terraform fertig. In der Cloud Console wird das Netzwerk angezeigt, das Sie bereitgestellt haben.

  1. Gehen Sie in der Console über das Navigationsmenü zum VPC-Netzwerk. Sie sehen, dass das terraform-network bereitgestellt wurde.

Seite der VPC-Netzwerke

  1. Führen Sie in Cloud Shell den Befehl terraform show aus, um den aktuellen Status zu prüfen:
terraform show

Diese Werte können als Referenz für die Konfiguration weiterer Ressourcen oder Ausgaben dienen. Dies wird später in diesem Lab beschrieben.

Klicken Sie auf Fortschritt prüfen. Ressourcen in Terraform erstellen

Aufgabe 2: Infrastruktur ändern

Im vorherigen Abschnitt haben Sie eine grundlegende Infrastruktur mit Terraform erstellt: ein VPC-Netzwerk. In diesem Abschnitt werden Sie Ihre Konfiguration ändern und sehen, wie Terraform mit den Änderungen umgeht.

Eine Infrastruktur verändert sich ständig und Terraform ist darauf ausgelegt, diese Änderung zu bewältigen und umzusetzen. Wenn Sie Terraform-Konfigurationen ändern, erstellt Terraform einen Ausführungsplan, der nur das verändert, was für den gewünschten Status notwendig ist.

Durch den Einsatz von Terraform für die Änderung der Infrastruktur können Sie nicht nur die Versionen Ihrer Konfigurationen, sondern auch den Status verwalten. Damit können Sie dann sehen, wie sich die Infrastruktur im Laufe der Zeit weiterentwickelt.

Ressourcen hinzufügen

Sie können neue Ressourcen hinzufügen, indem Sie diese Ihrer Terraform-Konfiguration hinzufügen und terraform apply ausführen, um sie bereitzustellen.

  1. Fügen Sie im Editor main.tf eine Compute-Instanzressource hinzu:
resource "google_compute_instance" "vm_instance" { name = "terraform-instance" machine_type = "e2-micro" boot_disk { initialize_params { image = "debian-cloud/debian-11" } } network_interface { network = google_compute_network.vpc_network.name access_config { } } }

Diese Ressource enthält weitere Argumente. Der Name und der Maschinentyp sind einfache Strings. boot_disk und network_interface sind jedoch komplexere Blöcke. Alle verfügbaren Optionen finden Sie in der Dokumentation zu google_compute_instance.

Für dieses Beispiel verwendet Ihre Compute-Instanz ein Debian-Betriebssystem. Dieses wird mit dem zuvor erstellten VPC-Netzwerk verbunden. Beachten Sie, wie diese Konfiguration sich mit google_compute_network.vpc_network.name auf das Namensattribut des Netzwerks bezieht. google_compute_network.vpc_network ist die ID, die die Werte in dem Block abgleicht, der das Netzwerk definiert, und name ist ein Attribut dieser Ressource.

Durch das Vorhandensein des Blocks access_config wird auch ohne Argumente sichergestellt, dass die Instanz über das Internet zugänglich sein wird.

  1. Führen Sie jetzt terraform apply aus, um die Compute-Instanz zu erstellen:
terraform apply
  1. Bestätigen Sie wieder mit yes, wenn Sie dazu aufgefordert werden.

Dies ist eine relativ einfache Änderung. Sie haben Ihrer Konfiguration eine Ressource „google_compute_instance“ mit dem Namen „vm_instance“ hinzugefügt und Terraform erstellte die Ressource in Google Cloud.

Ressourcen ändern

Neben dem Erstellen von Ressourcen kann Terraform auch Änderungen an diesen Ressourcen vornehmen.

  1. Fügen Sie Ihrer „vm_instance“ ein Argument tags hinzu, damit es so aussieht:
resource "google_compute_instance" "vm_instance" { name = "terraform-instance" machine_type = "e2-micro" tags = ["web", "dev"] # ... }
  1. Führen Sie wieder terraform apply aus, um die Instanz zu aktualisieren:
terraform apply
  1. Das Präfix ~ bedeutet, dass Terraform die Ressource direkt aktualisiert. Sie können diese Änderung jetzt vornehmen, indem Sie mit yes antworten. Terraform fügt dann Ihrer Instanz die Tags hinzu.

Klicken Sie auf Fortschritt prüfen. Infrastruktur ändern

Destruktive Änderungen

Eine destruktive Änderung ist eine Änderung, bei der der Anbieter die vorhandene Ressource ersetzt, anstatt sie zu aktualisieren. Das passiert normalerweise, wenn der Cloud-Anbieter das Aktualisieren der Ressource nicht wie in Ihrer Konfiguration beschrieben unterstützt.

Das Ändern des Laufwerk-Images Ihrer Instanz ist ein Beispiel einer destruktiven Änderung.

  1. Bearbeiten Sie den Block boot_disk in der Ressource vm_instance in Ihrer Konfigurationsdatei und nehmen Sie folgende Änderung vor:
boot_disk { initialize_params { image = "cos-cloud/cos-stable" } }
  1. Führen Sie jetzt wieder terraform apply aus, um zu sehen, wie Terraform diese Änderung auf die vorhandenen Ressourcen anwendet:
terraform apply

Das Präfix -/+ bedeutet, dass Terraform die Ressource löscht und neu erstellt, anstatt sie direkt zu aktualisieren. Einige Attribute können direkt aktualisiert werden und werden mit dem Präfix ~ angezeigt. Wenn Sie aber das Bootlaufwerk-Image für eine Instanz ändern, müssen Sie es neu erstellen. Terraform und der Google Cloud-Anbieter übernehmen diese Detailarbeit für Sie und aus dem Ausführungsplan geht klar hervor, welche Aktionen Terraform vornimmt.

Außerdem zeigt der Ausführungsplan, dass die Änderung des Laufwerk-Images der Grund dafür ist, dass Ihre Instanz ersetzt werden musste. Anhand dieser Informationen können Sie Ihre Änderungen anpassen, um möglicherweise Aktualisierungen zum Löschen/Erstellen zu vermeiden, wenn sie in einigen Situationen nicht akzeptabel sind.

  1. Bevor Sie fortfahren können, fordert Terraform Sie wieder zur Genehmigung des Ausführungsplans auf. Antworten Sie mit yes, um die geplanten Schritte auszuführen.

Wie im Ausführungsplan angegeben löschte Terraform zuerst die vorhandene Instanz und erstellte dann eine neue. Sie können wieder terraform show verwenden, um die neuen mit dieser Instanz verknüpften Werte anzuzeigen.

Infrastruktur löschen

Sie haben nun gesehen, wie eine Infrastruktur erstellt und geändert wird. Bevor wir mit dem Erstellen mehrerer Ressourcen und deren Abhängigkeiten fortfahren, erfahren Sie, wie Sie Ihre über Terraform verwaltete Infrastruktur vollständig löschen können.

Das Löschen einer Infrastruktur kommt in Produktionsumgebungen selten vor. Wenn Sie aber Terraform verwenden, um mehrere Umgebungen z. B. für Entwicklung, Tests und Staging hochzufahren, ist das Löschen oft sinnvoll.

Ressourcen können mit dem Befehl terraform destroy gelöscht werden. Dieser ähnelt terraform apply, verhält sich aber so, als ob alle Ressourcen aus der Konfiguration entfernt wurden.

  • Testen Sie den Befehl terraform destroy. Antworten Sie yes, um diesen Plan auszuführen und die Infrastruktur zu löschen.
terraform destroy

Das Präfix - gibt an, dass die Instanz und das Netzwerk gelöscht werden. Wie bei „apply“ zeigt Terraform den Ausführungsplan und wartet auf die Genehmigung, bevor Änderungen vorgenommen werden.

Genau wie bei terraform apply legt Terraform die Löschreihenfolge fest. Google Cloud erlaubt nicht, dass ein VPC-Netzwerk gelöscht wird, wenn es noch Ressourcen enthält. Deshalb wartet Terraform, bis die Instanz gelöscht ist, bevor das Netzwerk gelöscht wird. Bei der Durchführung von Vorgängen erstellt Terraform ein Abhängigkeitsdiagramm, um die richtige Reihenfolge der Vorgänge festzulegen. In komplizierteren Fällen mit mehreren Ressourcen führt Terraform Vorgänge parallel durch, sofern dies sicher ist.

Klicken Sie auf Fortschritt prüfen. Destruktive Änderungen

Aufgabe 3: Ressourcenabhängigkeiten erstellen

In diesem Abschnitt erfahren Sie mehr über Ressourcenabhängigkeiten und wie Sie Ressourcenparameter verwenden können, um Informationen über eine Ressource an andere Ressourcen weiterzugeben.

Eine echte Infrastruktur hat unterschiedliche Ressourcen und Ressourcentypen. Terraform-Konfigurationen können mehrere Ressourcen und Ressourcentypen enthalten, die sich wiederum über mehrere Anbieter erstrecken können.

In diesem Abschnitt wird anhand eines einfachen Beispiels erklärt, wie Sie mehrere Ressourcen konfigurieren und Ressourcenattribute zur Konfiguration weiterer Ressourcen verwenden können.

  • Erstellen Sie Ihr Netzwerk und Ihre Instanz neu. Nachdem Sie den Prompt mit yes beantwortet haben, werden die Ressourcen erstellt:
terraform apply

Statische IP-Adresse zuweisen

  1. Ergänzen Sie nun Ihre Konfiguration, indem Sie der VM-Instanz eine statische IP in main.tf zuweisen:
resource "google_compute_address" "vm_static_ip" { name = "terraform-static-ip" }

Dies sollte Ihnen aus dem vorherigen Beispiel für das Hinzufügen einer VM-Instanzressource bekannt sein. Dieses Mal erstellen Sie allerdings einen Ressourcentyp „google_compute_address“. Dieser Ressourcentyp weist Ihrem Projekt eine reservierte IP-Adresse zu.

  1. Führen Sie als nächstes terraform plan aus:
terraform plan

Sie können sehen, was mit terraform plan erstellt wird:

$ terraform plan Refreshing Terraform state in-memory prior to plan... The refreshed state will be used to calculate this plan, but will not be persisted to local or remote state storage. google_compute_network.vpc_network: Refreshing state... [id=terraform-network] google_compute_instance.vm_instance: Refreshing state... [id=terraform-instance] ------------------------------------------------------------------------ An execution plan has been generated and is shown below. Resource actions are indicated with the following symbols: + create Terraform will perform the following actions: # google_compute_address.vm_static_ip will be created + resource "google_compute_address" "vm_static_ip" { + address = (known after apply) + address_type = "EXTERNAL" + creation_timestamp = (known after apply) + id = (known after apply) + name = "terraform-static-ip" + network_tier = (known after apply) + project = (known after apply) + region = (known after apply) + self_link = (known after apply) + subnetwork = (known after apply) + users = (known after apply) } Plan: 1 to add, 0 to change, 0 to destroy. ------------------------------------------------------------------------ Note: You didn't specify an "-out" parameter to save this plan, so Terraform can't guarantee that exactly these actions will be performed if "terraform apply" is subsequently run.

Im Gegensatz zu terraform apply zeigt der Befehl plan nur, was geändert werden würde, und die Änderungen werden nie direkt angewendet. Beachten Sie, dass Sie bisher als einzige Änderung eine statische IP hinzugefügt haben. Als Nächstes müssen Sie die IP-Adresse an Ihre Instanz anhängen.

  1. Aktualisieren Sie die Konfiguration network_interface für Ihre Instanz so:
network_interface { network = google_compute_network.vpc_network.self_link access_config { nat_ip = google_compute_address.vm_static_ip.address } }

Der Block access_config hat mehrere optionale Argumente und in diesem Fall setzen Sie nat_ip als statische IP-Adresse. Wenn Terraform diese Konfiguration liest, geschieht dies:

  • Es wird dafür gesorgt, dass vm_static_ip vor vm_instance erstellt wird
  • Die Attribute von vm_static_ip werden im Status gespeichert
  • nat_ip wird auf den Wert des Attributs vm_static_ip.address gesetzt
  1. Führen Sie den Terraform-Plan noch einmal aus und speichern Sie dieses Mal den Plan:
terraform plan -out static_ip

Wenn Sie den Plan auf diese Weise speichern, sorgen Sie dafür, dass Sie genau denselben Plan in Zukunft anwenden können. Sollten Sie versuchen, die vom Plan erstellte Datei anzuwenden, prüft Terraform vor dem Anwenden des Plans zuerst, ob genau dieselben Änderungen vorgenommen werden.

In diesem Fall können Sie sehen, dass Terraform eine neue google_compute_address erstellt und die vorhandene VM so aktualisiert, dass diese verwendet wird.

  1. Führen Sie terraform apply "static_ip" aus, um zu sehen, wie Terraform diese Änderung anwenden möchte:
terraform apply "static_ip"

Wie oben gezeigt, hat Terraform die statische IP erstellt, bevor die VM-Instanz geändert wurde. Aufgrund des Interpolationsausdrucks, der die IP-Adresse an die Netzwerkschnittstellen-Konfiguration der Instanz übergibt, kann Terraform eine Abhängigkeit ableiten. Außerdem weiß Terraform, dass die statische IP erstellt werden muss, bevor die Instanz aktualisiert wird.

Klicken Sie auf Fortschritt prüfen. Ressourcenabhängigkeiten erstellen

Implizite und explizite Abhängigkeiten

Terraform untersucht die in den Interpolationsausdrücken verwendeten Ressourcenattribute und kann so automatisch ableiten, ob eine Ressource von einer anderen abhängt. Im obigen Beispiel wird durch den Verweis auf google_compute_address.vm_static_ip.address eine implizite Abhängigkeit von der google_compute_address mit dem Namen vm_static_ip erstellt.

Terraform verwendet diese Informationen zur Abhängigkeit, um die korrekte Reihenfolge zu ermitteln, in der unterschiedliche Ressourcen erstellt und aktualisiert werden. Im obigen Beispiel weiß Terraform, dass die vm_static_ip erstellt werden muss, bevor die vm_instance aktualisiert wird, um diese zu verwenden.

Implizite Abhängigkeiten über Interpolationsausdrücke sind die beste Möglichkeit, Terraform über diese Beziehungen zu informieren, und sollten verwendet werden, wann immer dies möglich ist.

Manchmal gibt es Abhängigkeiten zwischen Ressourcen, die für Terraform nicht sichtbar sind. Das Argument depends_on kann einer beliebigen Ressource hinzugefügt werden und akzeptiert eine Liste von Ressourcen, für die explizite Abhängigkeiten erstellt werden sollen.

Beispielsweise erwartet eine Anwendung, die Sie auf Ihrer Instanz ausführen, die Verwendung eines bestimmten Cloud Storage-Buckets, aber diese Abhängigkeit ist innerhalb des Anwendungscodes konfiguriert und somit für Terraform nicht sichtbar. In diesem Fall können Sie depends_on verwenden, um die Abhängigkeit explizit zu deklarieren.

  1. Fügen Sie einen Cloud Storage-Bucket und eine Instanz mit einer expliziten Abhängigkeit von dem Bucket hinzu, indem Sie main.tf Folgendes hinzufügen:
# New resource for the storage bucket our application will use. resource "google_storage_bucket" "example_bucket" { name = "<UNIQUE-BUCKET-NAME>" location = "US" website { main_page_suffix = "index.html" not_found_page = "404.html" } } # Create a new instance that uses the bucket resource "google_compute_instance" "another_instance" { # Tells Terraform that this VM instance must be created only after the # storage bucket has been created. depends_on = [google_storage_bucket.example_bucket] name = "terraform-instance-2" machine_type = "e2-micro" boot_disk { initialize_params { image = "cos-cloud/cos-stable" } } network_interface { network = google_compute_network.vpc_network.self_link access_config { } } } Hinweis: Storage-Buckets müssen global eindeutig sein. Deshalb müssen Sie UNIQUE-BUCKET-NAME durch einen eindeutigen, gültigen Namen für einen Bucket ersetzen. Ihr Name und das aktuelle Datum sind normalerweise ausreichend für einen eindeutigen Bucket-Namen.

Sie fragen sich vielleicht, wo in Ihrer Konfiguration diese Ressourcen eingesetzt werden sollen. Die Reihenfolge, in der Ressourcen in einer Terraform-Konfigurationsdatei definiert werden, hat keine Auswirkung darauf, wie Terraform Ihre Änderungen anwendet. Organisieren Sie Ihre Konfigurationsdateien so, dass es für Sie und Ihr Team am sinnvollsten ist.

  1. Führen Sie nun „terraform plan“ und „terraform apply“ aus, um diese Änderungen in Aktion zu sehen:
terraform plan terraform apply

Klicken Sie auf Fortschritt prüfen. Bucket-abhängige Instanz erstellen

  1. Bevor Sie fortfahren, entfernen Sie diese neuen Ressourcen aus Ihrer Konfiguration und führen Sie terraform apply noch einmal aus, um diese zu löschen. Sie werden den Bucket oder die zweite Instanz in diesem Lab nicht weiter verwenden.

Aufgabe 4: Infrastruktur bereitstellen

Die Compute-Instanz, die Sie an dieser Stelle gestartet haben, basiert auf dem angegebenen Google-Image. Es ist jedoch keine zusätzliche Software installiert oder Konfiguration angewendet.

Google Cloud ermöglicht es Kunden, ihre eigenen benutzerdefinierten Betriebssystem-Images zu verwalten. So lässt sich sicherstellen, dass die von Ihnen mit Terraform bereitgestellten Instanzen nach Ihren Anforderungen vorkonfiguriert sind. Packer ist das ideale Tool hierfür und beinhaltet einen Builder für Google Cloud.

Terraform verwendet Bereitsteller, um Dateien hochzuladen, Shell-Scripts auszuführen oder andere Software wie Tools für die Konfigurationsverwaltung zu installieren und auszulösen.

Bereitsteller definieren

  1. Zur Definition eines Bereitstellers ändern Sie den Ressourcenblock, der die erste vm_instance in Ihrer Konfiguration definiert, so:
resource "google_compute_instance" "vm_instance" { name = "terraform-instance" machine_type = "e2-micro" tags = ["web", "dev"] provisioner "local-exec" { command = "echo ${google_compute_instance.vm_instance.name}: ${google_compute_instance.vm_instance.network_interface[0].access_config[0].nat_ip} >> ip_address.txt" } # ... }

Damit wird ein provisioner-Block innerhalb des Blocks resource hinzugefügt. Mehrere provisioner-Blöcke können hinzugefügt werden, um mehrere Bereitstellungsschritte zu definieren. Terraform unterstützt viele Bereitsteller. Für dieses Beispiel verwenden Sie allerdings den Bereitsteller local-exec.

Der Bereitsteller local-exec führt einen Befehl lokal auf dem Rechner aus, der Terraform ausführt, aber nicht auf der VM-Instanz selbst. Sie verwenden diesen Bereitsteller im Vergleich zu den anderen, weshalb wir jetzt keine Verbindungsinformationen angeben müssen.

Dies zeigt auch ein Beispiel der String-Interpolation, das komplexer als bisher ist. Jede VM-Instanz kann mehrere Netzwerkschnittstellen haben. Benennen Sie deshalb die erste network_interface[0] und beginnen Sie die Zählung wie in den meisten Programmiersprachen bei 0. Jede Netzwerkschnittstelle hat auch mehrere „access_config“-Blöcke, also geben Sie auch hier den ersten an.

  1. Führen Sie terraform apply aus:
terraform apply

An dieser Stelle kann die Ausgabe auf den ersten Blick verwirrend sein.

Terraform hat keine durchzuführenden Aufgaben gefunden. Wenn Sie nachsehen, werden Sie feststellen, dass es keine Datei ip_address.txt auf ihrem lokalen Rechner gibt.

Terraform behandelt Bereitsteller aus anderen Argumenten anders. Bereitsteller werden nur ausgeführt, wenn eine Ressource erstellt wird. Das Hinzufügen eines Bereitstellers erzwingt aber nicht, dass eine Ressource gelöscht oder neu erstellt wird.

  1. Verwenden Sie terraform taint, um Terraform anzuweisen, die Instanz neu zu erstellen:
terraform taint google_compute_instance.vm_instance

Eine markierte Ressource wird gelöscht und während des nächsten apply neu erstellt.

  1. Führen Sie jetzt terraform apply aus:
terraform apply
  1. Sehen Sie sich den Inhalt der Datei ip_address.txt an, um zu überprüfen, ob alles funktioniert hat.

Sie enthält wie angewiesen die IP-Adresse.

Fehlgeschlagene Bereitsteller und markierte Ressourcen

Wenn eine Ressource erfolgreich erstellt wurde, jedoch in einem Bereitstellungsschritt fehlschlägt, gibt Terraform einen Fehler aus und kennzeichnet die Ressource als markiert. Eine markierte Ressource ist weiterhin vorhanden, sollte jedoch nicht als sicher gelten, da die Bereitstellung fehlgeschlagen ist.

Wenn Sie Ihren nächsten Ausführungsplan generieren, entfernt Terraform alle markierten Ressourcen, erstellt neue Ressourcen und versucht, sie nach dem Erstellen wieder bereitzustellen.

Destroy-Bereitsteller

Es können auch Bereitsteller definiert werden, die nur während eines Löschvorgangs ausgeführt werden. Diese sind hilfreich, wenn Sie ein System bereinigen, Daten extrahieren usw.

Für viele Ressourcen wird empfohlen, nach Möglichkeit integrierte Bereinigungsmechanismen (z. B. init-Scripts) zu verwenden. Bei Bedarf können aber Bereitsteller verwendet werden.

In diesem Lab werden keine Beispiele für Destroy-Bereitsteller gezeigt. Weitere Informationen zu Destroy-Bereitstellern finden Sie in der Dokumentation für Bereitsteller.

Das wars! Sie haben das Lab erfolgreich abgeschlossen.

In diesem Lab haben Sie gelernt, wie Sie mit Terraform eine Infrastruktur aufbauen, ändern und löschen. Sie haben dann Ressourcenabhängigkeiten erstellt und die grundlegende Infrastruktur mit Terraform-Konfigurationsdateien bereitgestellt.

Nächste Schritte / Weitere Informationen

In den folgenden Ressourcen finden Sie mehr praktische Übungen für Terraform:

Google Cloud-Schulungen und -Zertifizierungen

In unseren Schulungen erfahren Sie alles zum optimalen Einsatz unserer Google Cloud-Technologien und können sich entsprechend zertifizieren lassen. Unsere Kurse vermitteln technische Fähigkeiten und Best Practices, damit Sie möglichst schnell mit Google Cloud loslegen und Ihr Wissen fortlaufend erweitern können. Wir bieten On-Demand-, Präsenz- und virtuelle Schulungen für Anfänger wie Fortgeschrittene an, die Sie individuell in Ihrem eigenen Zeitplan absolvieren können. Mit unseren Zertifizierungen weisen Sie nach, dass Sie Experte im Bereich Google Cloud-Technologien sind.

Anleitung zuletzt am 26. Januar 2024 aktualisiert

Lab zuletzt am 25. September 2023 getestet

© 2024 Google LLC. Alle Rechte vorbehalten. Google und das Google-Logo sind Marken von Google LLC. Alle anderen Unternehmens- und Produktnamen können Marken der jeweils mit ihnen verbundenen Unternehmen sein.