Terraform-Zustand in einem Cloud Storage-Bucket speichern

In dieser Anleitung erfahren Sie, wie Sie den Terraform-Zustand in einem Cloud Storage-Bucket speichern.

Standardmäßig speichert Terraform den Status lokal in einer Datei mit dem Namen terraform.tfstate. Diese Standardkonfiguration kann die Verwendung von Terraform für Teams erschweren, wenn mehrere Nutzer Terraform gleichzeitig ausführen und jeder Computer ein eigenes Verständnis der aktuellen Infrastruktur hat.

Um solche Probleme zu vermeiden, erfahren Sie auf dieser Seite, wie Sie einen Remotestatus konfigurieren, der auf einen Cloud Storage-Bucket verweist. Der Remote-Status ist ein Feature von Terraform-Back-Ends.

Kosten

Für Cloud Storage fallen Kosten für Speicher, Lese- und Schreibvorgänge, ausgehenden Netzwerktraffic und die Replikation an.

Für den Cloud Storage-Bucket in dieser Anleitung ist die Objektversionsverwaltung aktiviert, um den Verlauf Ihrer Bereitstellungen zu speichern. Durch das Aktivieren der Objektversionsverwaltung werden die Speicherkosten erhöht. Dies können Sie umgehen, indem Sie die Verwaltung des Objektlebenszyklus so konfigurieren, dass alte Statusversionen gelöscht werden.

Vorbereitung

  1. Achten Sie darauf, dass Sie die erforderlichen Cloud Storage-Berechtigungen für Ihr Nutzerkonto haben:
    • storage.buckets.create
    • storage.buckets.list
    • storage.objects.get
    • storage.objects.create
    • storage.objects.delete
    • storage.objects.update

    Zur IAM-Seite

    Weitere Informationen zu Rollen und Berechtigungen

    Als Best Practice empfehlen wir, dass der Zugriff auf den Bucket und die dort gespeicherten Statusdateien kontrolliert werden. Nur eine kleine Gruppe von Nutzern (z. B. der Haupt-Cloud-Administrator und die Person, die als alternativer oder Sicherungsadministrator fungiert) sollte Administratorberechtigungen für den Bucket haben. Die anderen Entwickler sollten nur Berechtigungen zum Schreiben und Lesen von Objekten im Bucket haben.

  2. Cloud Shell starten

    Cloud Shell ist eine virtuelle Compute Engine-Maschine. Die Dienstanmeldedaten, die dieser virtuellen Maschine zugeordnet sind, erfolgen automatisch. Daher müssen Sie keinen Dienstkontoschlüssel einrichten oder herunterladen.

  3. Aktivieren Sie die Cloud Storage API.

    gcloud services enable storage.googleapis.com
    

Terraform so konfigurieren, dass der Status in einem Cloud Storage-Bucket gespeichert wird

In den folgenden Schritten erstellen Sie einen Cloud Storage-Bucket und ändern die Backend-Konfiguration in Ihren neuen Bucket und Ihr Google Cloud-Projekt.

Bucket erstellen

  1. Fügen Sie einer Terraform-Konfigurationsdatei, z. B. main.tf, die folgende Terraform-Ressource google_storage_bucket hinzu:

    resource "random_id" "bucket_prefix" {
      byte_length = 8
    }
    
    resource "google_storage_bucket" "default" {
      name          = "${random_id.bucket_prefix.hex}-bucket-tfstate"
      force_destroy = false
      location      = "US"
      storage_class = "STANDARD"
      versioning {
        enabled = true
      }
      encryption {
        default_kms_key_name = google_kms_crypto_key.terraform_state_bucket.id
      }
      depends_on = [
        google_project_iam_member.default
      ]
    }

    Im Code-Snippet ist das Feld location hartcodiert in US, d. h., es wird ein Bucket mit mehreren Regionen in den USA erstellt. Sie können dieses Feld in einen Speicherort Ihrer Wahl ändern.

  2. Führen Sie terraform apply aus, um den Storage-Bucket zu erstellen.

Backend-Konfiguration ändern

  1. Fügen Sie einer neuen Terraform-Konfigurationsdatei namens backend.tf den folgenden Text hinzu.

    terraform {
     backend "gcs" {
       bucket  = "BUCKET_NAME"
       prefix  = "terraform/state"
     }
    }
    

    Aktualisieren Sie den BUCKET_NAME so, dass er mit dem Namen Ihres neuen Cloud Storage-Buckets übereinstimmt.

  2. Führen Sie terraform init aus, um Ihr Terraform-Backend zu konfigurieren.

    Terraform erkennt, dass Sie bereits eine Statusdatei lokal haben, und fordert Sie auf, diese in den neuen Cloud Storage-Bucket zu kopieren. Geben Sie yes ein.

Nach der Ausführung dieses Befehls wird der Terraform-Zustand im Cloud Storage-Bucket gespeichert. Terraform ruft den letzten Status aus diesem Bucket ab, bevor ein Befehl ausgeführt wird, und überträgt den neuesten Status nach Ausführung eines Befehls an den Bucket.

Weitere Informationen