Ressourcen von Google Cloud in das Terraform-Format exportieren

Sie haben Ressourcen in Google Cloudbereitgestellt 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.

Rollen

Damit Sie Assets in Terraform exportieren können, lassen Sie sich von Ihrem Administrator die folgenden IAM-Rollen für die Organisation, den Ordner oder das Projekt zuweisen:

Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.

Hinweise

  • Bereiten Sie Cloud Shell vor.

    Starten Sie Cloud Shell und legen Sie das Standardprojekt Google Cloud 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 Cloudverwenden.

    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
    
  • Erstellen Sie ein Dienstkonto für diesen Export:

    gcloud beta services identity create --service=cloudasset.googleapis.com
    
  • Prüfen Sie, ob der Cloud Asset Service 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 Service 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 \
  --project=PROJECT_ID \
  >> 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