Terraform-Status in einem Cloud Storage-Bucket speichern

Mit Sammlungen den Überblick behalten Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.

In dieser Anleitung erfahren Sie, wie Sie den Terraform-Status 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 Back-End-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
      }
    }

    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.

Wenn der Apply-Vorgang fehlschlägt, kann dies daran liegen, dass der Bucket-Name nicht global eindeutig ist. Im nächsten Abschnitt erfahren Sie, wie Sie dieses Problem beheben können.

Bucket-Namen eindeutig machen

Um den Bucket-Namen global eindeutig zu machen, können Sie ein Terraform-Plug-in zum Erstellen zufälliger IDs hinzufügen.

// Terraform plugin for creating random IDs
resource "random_id" "instance_id" {
  byte_length = 8
}

Dann verwenden Sie die Zufalls-ID im Attribut name des Buckets.

resource "google_storage_bucket" "default" {
  name = "bucket-tfstate-${random_id.instance_id.hex}"
  ...
}

Führen Sie den Befehl terraform apply noch einmal aus.

Back-End-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-Back-End 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-Status 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