Terraform-Zustandsdatei verwalten

Sie können die Statusdatei für jede Bereitstellung prüfen oder ändern. Beispielsweise können Sie Ressourcen aus der Bereitstellung importieren oder entfernen. Dazu müssen Sie die Statusdatei ändern.

Auf dieser Seite wird beschrieben, wie Sie mit der Terraform-Zustandsdatei arbeiten, die für jede Bereitstellung und Version erstellt wird. Weitere Informationen zur Statusdatei finden Sie unter Status.

Die Anleitung auf dieser Seite setzt voraus, dass Sie mit Terraform vertraut sind.

Hinweis

  1. Prüfen Sie, ob Sie die erforderlichen Berechtigungen zum Arbeiten mit der Statusdatei haben. Die Rolle config.admin enthält die erforderlichen Berechtigungen. Folgende Berechtigungen sind erforderlich:

    • config.deployments.lock
    • config.revisions.getState
    • config.deployments.updateState
    • config.deployments.unlock
    • config.deployments.getLock
    • config.deployments.getState
  2. Sie benötigen eine lokale Kopie der Terraform-Konfiguration. Dies ist die Konfiguration, die der verwendeten Statusdatei entspricht.

    Mit der lokalen Kopie der Konfiguration können Sie Befehle wie terraform refresh oder terraform plan lokal ausführen, während Sie die Statusdatei ändern.

  3. Installieren Sie Terraform, um die Terraform-Befehlszeile auf Ihrem lokalen Computer zu verwenden.

Statusdatei mutieren oder prüfen

Wenn Sie die Statusdatei ändern oder prüfen möchten, müssen Sie die Bereitstellung sperren und die Statusdatei herunterladen. Sie können die Statusdatei dann mutieren oder prüfen.

Nachdem Sie die Statusdatei geändert haben, laden Sie sie hoch, damit sie von Infra Manager für Ihre Bereitstellung verwendet werden kann.

Bereitstellung sperren

  1. Sperren Sie die Bereitstellung, um Änderungen an der Bereitstellung zu verhindern, während Sie die Statusdatei ändern. Die Bereitstellung muss gesperrt sein, damit die Statusdatei heruntergeladen werden kann.

     gcloud infra-manager deployments lock DEPLOYMENT_ID --project PROJECT_ID --location LOCATION
    

    Ersetzen Sie:

    • DEPLOYMENT_ID durch die Bereitstellungskennung.
    • PROJECT_ID durch das Projekt, in dem die Bereitstellung ausgeführt wird.
    • LOCATION durch den Standort, an dem die Bereitstellung ausgeführt wird.

    Die Ausgabe dieses Befehls enthält eine lock ID, die zum Hochladen und Entsperren der Statusdatei verwendet wird.

  2. Sie können die Sperr-ID jederzeit mit dem folgenden Befehl abrufen:

     gcloud infra-manager deployments export-lock DEPLOYMENT_ID --project PROJECT_ID --location LOCATION
    

Statusdatei herunterladen

Zum Herunterladen der Zustandsdatei verwenden Sie eine signierte Cloud Storage-URL:

   SIGNED_STATE_DOWNLOAD_URL=$(gcloud infra-manager deployments export-statefile DEPLOYMENT_ID --project PROJECT_ID --location LOCATION --format="get(signedUri)")

   curl -s -X GET --output terraform.tfstate ${SIGNED_STATE_DOWNLOAD_URL}

Statusdatei lokal ändern

  1. Prüfen Sie, ob sich die Konfiguration (*.tf-Dateien) im selben Verzeichnis wie die heruntergeladene Zustandsdatei (terraform.tfstate) befindet.

  2. Initialisieren Sie Terraform:

     terraform init
    
  3. Wenn Sie Terraform bereits initialisiert haben, müssen Sie es möglicherweise mit dem Flag „reconfigure“ initialisieren:

     terraform init -reconfigure
    
  4. Bearbeiten Sie die Statusdatei nach Bedarf. Sie können beispielsweise Statusprüfungen oder Mutationsvorgänge ausführen. Weitere Informationen zum Arbeiten mit der Statusdatei finden Sie unter Terraform-Status bearbeiten.

  5. Wenn Sie lokale Änderungen an den Terraform-Konfigurationsdateien vornehmen, laden Sie die geänderte Konfiguration hoch. Laden Sie diese Konfiguration in den Speicher-Bucket oder das öffentliche Git-Repository hoch, das Sie als Quelle für die Bereitstellung der Konfiguration verwenden.

Statusdatei hochladen

Verwenden Sie eine signierte Cloud Storage-URL, um die Statusdatei hochzuladen:

  1. Rufen Sie die Schloss-ID ab:

     LOCK_ID=$(gcloud infra-manager deployments export-lock DEPLOYMENT_ID --project PROJECT_ID --location LOCATION --format="get(lockId)")
    
  2. Rufen Sie die Upload-URL ab:

     SIGNED_STATE_UPLOAD_URL=$(gcloud infra-manager deployments import-statefile DEPLOYMENT_ID --project PROJECT_ID --location LOCATION --lock-id ${LOCK_ID} --format="get(signedUri)")
    
     curl -s -X PUT --upload-file terraform.tfstate $SIGNED_STATE_UPLOAD_URL
    

Bereitstellung entsperren

  1. Rufen Sie die Schloss-ID ab:

     LOCK_ID=$(gcloud infra-manager deployments export-lock DEPLOYMENT_ID --project PROJECT_ID --location LOCATION --format="get(lockId)")
    
  2. Entsperren Sie die Bereitstellung:

     gcloud infra-manager deployments unlock DEPLOYMENT_ID --project PROJECT_ID --location LOCATION --lock-id ${LOCK_ID}
    

Nächste Schritte