Exporter vos ressources Google Cloud dans le format Terraform

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
    
  • Assurez-vous que l'Agent de service Cloud Asset (gcp-sa-cloudasset.iam.gserviceaccount.com) dispose du rôle roles/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ôle roles/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

  1. 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
    
  2. 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 >> 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

  1. Créez un répertoire appelé tf-output.

    cd && mkdir tf-output && cd tf-output
    
  2. Créez un fichier appelé types.txt et ajoutez une liste de types de ressources. Exemple :

    ComputeBackendBucket
    ComputeBackendService
    ComputeForwardingRule
    
  3. 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.

Étapes suivantes