Google Cloud-Ressourcen in das Terraform-Format exportieren

Sie haben Ressourcen in Google Cloud bereitgestellt und müssen nun Ihre Infrastruktur als Code (IaC) mit Terraform verwalten. Google stellt ein Tool bereit, mit dem Sie Terraform-Code für Ressourcen in einem Projekt, Ordner oder einer Organisation generieren können.

Hinweis

  • Bereiten Sie Cloud Shell vor.

    Starten Sie Cloud Shell und legen Sie das Google Cloud-Standardprojekt fest, in dem Sie Terraform-Code für die bereitgestellten Ressourcen generieren möchten.

    Sie müssen diesen Befehl nur einmal pro Projekt und in einem beliebigen Verzeichnis ausführen.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Umgebungsvariablen werden überschrieben, wenn Sie in der Terraform-Konfigurationsdatei explizite Werte festlegen.

  • Installieren Sie in Cloud Shell die Befehlszeile für Config Connector.

    gcloud components install config-connector
    

    Mit Config Connector können Sie das Bulk-Exporttool Terraform von Google Cloud verwenden.

    Wenn ERROR: (gcloud.components.install) You cannot perform this action because the Google Cloud CLI component manager is disabled for this installation angezeigt wird, führen Sie stattdessen den folgenden Befehl aus:

    sudo apt-get install google-cloud-sdk-config-connector
    
  • Aktivieren Sie die Cloud Asset API.

    gcloud services enable cloudasset.googleapis.com
    
  • Prüfen Sie, ob der Cloud-Asset-Dienst-Agent (gcp-sa-cloudasset.iam.gserviceaccount.com) die Rolle roles/servicenetworking.serviceAgent hat:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com \
      --role=roles/servicenetworking.serviceAgent
    
  • Prüfen Sie, ob der Cloud-Asset-Dienst-Agent (gcp-sa-cloudasset.iam.gserviceaccount.com) die Rolle roles/storage.objectAdmin hat:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com \
      --role=roles/storage.objectAdmin
    

Beschränkungen

Einige Ressourcentypen werden nicht für das Exportieren in das Terraform-Format unterstützt, obwohl sie vom Terraform-Google-Anbieter unterstützt werden. Führen Sie den Befehl gcloud beta resource-config list-resource-types aus, um eine Liste der Ressourcentypen aufzurufen, die für den Export in das Terraform-Format unterstützt werden.

Exportieren Sie die gesamte Projektkonfiguration in den Terraform-HCL-Code

Der Befehl gcloud beta resource-config bulk-export --resource-format=terraform exportiert Ressourcen, die derzeit im Projekt, im Ordner oder in der Organisation konfiguriert sind, und gibt sie im HCL-Codeformat auf dem Bildschirm aus.

gcloud beta resource-config bulk-export \
  --project=PROJECT_ID \
  --resource-format=terraform

Ausgabe in eine Verzeichnisstruktur schreiben

  1. Erstellen Sie das Verzeichnis, in dem Sie die Projektkonfiguration ausgeben möchten, falls Sie dies noch nicht getan haben:

    mkdir OUTPUT_DIRECTORY
    
  2. Exportieren Sie die gesamte Konfiguration des Projekts in das Verzeichnis:

    gcloud beta resource-config bulk-export \
     --path=OUTPUT_DIRECTORY \
     --project=PROJECT_ID \
     --resource-format=terraform
    

    Das Flag --path gibt den Speicherort für den HCL-Code an.

Nach der Ausführung des Befehls wird der HCL-Code für jede Ressource in eine separate .tf-Datei in der folgenden Verzeichnisstruktur ausgegeben:

OUTPUT_DIRECTORY/projects/PROJECT_ID/RESOURCE_TYPE

Ausgabe in eine einzelne Datei schreiben

Wenn Sie die Ausgabe nicht auf dem Bildschirm drucken oder separate .tf-Dateien erstellen möchten, können Sie die gesamte Ausgabe in eine einzelne Datei schreiben, wie in diesem Beispiel gezeigt:

gcloud beta resource-config bulk-export --resource-format=terraform >> gcp_resources.tf

Ausgabe filtern

Filtern Sie die Ausgabe des Bulk-Exportbefehls, indem Sie Ressourcentypen angeben.

Unterstützte Ressourcentypen auflisten, nach denen gefiltert werden soll

Führen Sie den Befehl gcloud beta resource-config list-resource-types aus, um eine Liste der Ressourcentypen aufzurufen, die für den Export in das Terraform-Format unterstützt werden:

gcloud beta resource-config list-resource-types

Optional können Sie die Ausgabe in eine Datei schreiben:

gcloud beta resource-config list-resource-types >> strings.txt

In der Ausgabe wird der Ressourcentyp für Compute Engine-VMs so aufgeführt:

KRM KIND: ComputeInstance

Sie können das Präfix KRM KIND: ignorieren.

Einzelnen Ressourcentyp exportieren

Verwenden Sie einen String wie ComputeInstance, um bestimmte Ressourcentypen für Ihr Projekt im HCL-Codeformat zu exportieren:

gcloud beta resource-config bulk-export \
  --resource-types=RESOURCE_TYPE \
  --project=PROJECT_ID \
  --resource-format=terraform

Das Flag --resource-types gibt den Ressourcentyp an, der ausgegeben werden soll.

Mehrere Ressourcentypen exportieren

Exportieren Sie VM-Instanzen und Firewallregeln im HCL-Codeformat:

gcloud beta resource-config bulk-export \
  --resource-types=ComputeFirewall,ComputeInstance \
  --project=PROJECT_ID \
  --resource-format=terraform

Datei zum Angeben der zu exportierenden Ressourcentypen verwenden

  1. Erstellen Sie ein Verzeichnis mit dem Namen tf-output.

    cd && mkdir tf-output && cd tf-output
    
  2. Erstellen Sie eine Datei mit dem Namen types.txt und fügen Sie eine Liste mit Ressourcentypen hinzu. Beispiel:

    ComputeBackendBucket
    ComputeBackendService
    ComputeForwardingRule
    
  3. Führen Sie den Befehl gcloud beta resource-config bulk-export mit dem Flag --resource-types-file aus.

    gcloud beta resource-config bulk-export \
     --resource-types-file=types.txt \
     --path=tf-output \
     --project=PROJECT_ID \
     --resource-format=terraform
    

Wenn das Projekt keinen bestimmten Ressourcentyp enthält, ist der Befehl erfolgreich, aber für diesen Ressourcentyp wird nichts ausgegeben.

Fehlerbehebung

Wenn folgende Fehlermeldung angezeigt wird:

„Berechtigung während des Exports verweigert. Achten Sie darauf, dass die Cloud Asset Inventory API aktiviert ist.“

Folgen Sie der Anleitung im Abschnitt Vorbereitung.

Nächste Schritte