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
Erstellen Sie ein Dienstkonto für diesen Export:
gcloud beta services identity create --service=cloudasset.googleapis.com
Prüfen Sie, ob der Cloud-Asset-Dienst-Agent (
gcp-sa-cloudasset.iam.gserviceaccount.com
) die Rolleroles/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 Rolleroles/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
Erstellen Sie das Verzeichnis, in dem Sie die Projektkonfiguration ausgeben möchten, falls Sie dies noch nicht getan haben:
mkdir OUTPUT_DIRECTORY
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
Erstellen Sie ein Verzeichnis mit dem Namen
tf-output
.cd && mkdir tf-output && cd tf-output
Erstellen Sie eine Datei mit dem Namen
types.txt
und fügen Sie eine Liste mit Ressourcentypen hinzu. Beispiel:ComputeBackendBucket ComputeBackendService ComputeForwardingRule
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.