Vous avez déployé des ressources dans Google Cloud et devez désormais gérer votre Infrastructure as code (IaC) avec Terraform. Google fournit un outil permettant de générer du code Terraform pour les ressources d'un projet, d'un dossier ou d'une organisation.
Avant de commencer
Préparez Cloud Shell.
Lancez Cloud Shell et définissez le projet Google Cloud par défaut dans lequel vous souhaitez générer du code Terraform pour les ressources déployées.
Vous n'avez besoin d'exécuter cette commande qu'une seule fois par projet et vous pouvez l'exécuter dans n'importe quel répertoire.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Les variables d'environnement sont remplacées si vous définissez des valeurs explicites dans le fichier de configuration Terraform.
Dans Cloud Shell, installez l'interface de ligne de commande (CLI) pour Config Connector.
gcloud components install config-connector
Config Connector vous permet d'utiliser l'outil d'exportation groupée Terraform de Google Cloud.
Si
ERROR: (gcloud.components.install) You cannot perform this action because the Google Cloud CLI component manager is disabled for this installation
s'affiche, exécutez plutôt la commande suivante :sudo apt-get install google-cloud-sdk-config-connector
Activez l'API Cloud Asset.
gcloud services enable cloudasset.googleapis.com
Créez un compte de service à utiliser pour cette exportation :
gcloud beta services identity create --service=cloudasset.googleapis.com
Assurez-vous que l'agent de service Cloud Asset (
gcp-sa-cloudasset.iam.gserviceaccount.com
) dispose du rôleroles/servicenetworking.serviceAgent
:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com \ --role=roles/servicenetworking.serviceAgent
Assurez-vous que l'agent de service Cloud Asset (
gcp-sa-cloudasset.iam.gserviceaccount.com
) dispose du rôleroles/storage.objectAdmin
:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com \ --role=roles/storage.objectAdmin
Limites
Certains types de ressources ne sont pas compatibles avec l'exportation au format Terraform, même s'ils sont compatibles avec le fournisseur Terraform pour Google. Pour obtenir la liste des types de ressources compatibles avec l'exportation au format Terraform, exécutez la commande gcloud beta resource-config list-resource-types
.
Exporter la configuration complète du projet vers le code HCL Terraform
La commande gcloud beta resource-config bulk-export --resource-format=terraform
exporte les ressources configurées dans le projet, le dossier ou l'organisation et les affiche à l'écran au format de code HCL.
gcloud beta resource-config bulk-export \ --project=PROJECT_ID \ --resource-format=terraform
Écrire la sortie dans une structure de répertoires
Si vous ne l'avez pas déjà fait, créez le répertoire dans lequel vous souhaitez générer la configuration du projet :
mkdir OUTPUT_DIRECTORY
Exportez l'intégralité de la configuration du projet vers le répertoire :
gcloud beta resource-config bulk-export \ --path=OUTPUT_DIRECTORY \ --project=PROJECT_ID \ --resource-format=terraform
L'option
--path
spécifie l'emplacement de sortie du code HCL.
Après avoir exécuté la commande, le code HCL de chaque ressource est généré dans un fichier .tf
distinct dans la structure de répertoires suivante :
OUTPUT_DIRECTORY/projects/PROJECT_ID/RESOURCE_TYPE
Écrire la sortie dans un seul fichier
Si vous ne souhaitez pas afficher le résultat à l'écran ni créer de fichiers .tf
distincts, vous pouvez écrire l'intégralité de la sortie dans un seul fichier, comme indiqué dans cet exemple :
gcloud beta resource-config bulk-export \ --resource-format=terraform \ --project=PROJECT_ID \ >> gcp_resources.tf
Filtrer la sortie
Filtrez le résultat de la commande d'exportation groupée en spécifiant les types de ressources.
Lister les types de ressources compatibles avec le filtrage
Pour obtenir la liste des types de ressources compatibles avec l'exportation au format Terraform, exécutez la commande gcloud beta resource-config list-resource-types
:
gcloud beta resource-config list-resource-types
Vous pouvez éventuellement écrire le résultat dans un fichier :
gcloud beta resource-config list-resource-types >> strings.txt
Dans le résultat, le type de ressource des VM Compute Engine est listé comme suit :
KRM KIND: ComputeInstance
Vous pouvez ignorer le préfixe KRM KIND:
.
Exporter un seul type de ressource
Utilisez une chaîne, telle que ComputeInstance
, pour exporter des types de ressources spécifiques pour votre projet au format de code HCL :
gcloud beta resource-config bulk-export \ --resource-types=RESOURCE_TYPE \ --project=PROJECT_ID \ --resource-format=terraform
L'option --resource-types
spécifie le type de ressource en sortie.
Exporter plusieurs types de ressources
Exportez les instances de VM et les règles de pare-feu au format de code HCL :
gcloud beta resource-config bulk-export \ --resource-types=ComputeFirewall,ComputeInstance \ --project=PROJECT_ID \ --resource-format=terraform
Utiliser un fichier pour spécifier les types de ressources à exporter
Créez un répertoire appelé
tf-output
.cd && mkdir tf-output && cd tf-output
Créez un fichier appelé
types.txt
et ajoutez une liste de types de ressources. Exemple :ComputeBackendBucket ComputeBackendService ComputeForwardingRule
Exécutez la commande
gcloud beta resource-config bulk-export
avec l'option--resource-types-file
:gcloud beta resource-config bulk-export \ --resource-types-file=types.txt \ --path=tf-output \ --project=PROJECT_ID \ --resource-format=terraform
Si le projet ne contient aucun type de ressource particulier, la commande aboutit, mais aucun résultat n'est généré pour ce type de ressource.
Dépannage
Si l'erreur suivante s'affiche :
"Autorisation refusée lors de l'exportation. Veuillez vous assurer que l'API Cloud Asset Inventory est activée."
Assurez-vous d'avoir suivi les instructions de la section Avant de commencer.