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:
-
Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer
) -
Wenn der Status in einen vorhandenen Bucket (
--storage-path=BUCKET
) geschrieben wird:-
Storage-Objekt-Ersteller (
roles/storage.objectCreator
) -
Storage-Objekt-Betrachter (
roles/storage.objectViewer
)
-
Storage-Objekt-Ersteller (
-
Wenn der Status in einen neuen Bucket geschrieben wird:
Storage-Objekt-Betrachter (
roles/storage.objectViewer
)
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 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 Service 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.