Terraform peut importer l'infrastructure existante. Cela vous permet de récupérer les ressources que vous avez créées par d'autres moyens et de les gérer sous Terraform. Google fournit un outil permettant d'importer vos ressources Google Cloud dans l'état Terraform afin de pouvoir gérer votre déploiement dans Terraform.
Vous pouvez importer l'état d'un projet, d'un dossier ou d'une organisation.
Avant de commencer
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'importation Terraform de Google Cloud.
Générer du code Terraform pour vos ressources
Exécutez la commande gcloud beta resource-config
bulk-export
pour sortir la configuration complète du projet dans le chemin d'accès, entire-tf-output
:
gcloud beta resource-config bulk-export \ --path=entire-tf-output \ --project=PROJECT_ID \ --resource-format=terraform
Créer des modules Terraform à partir du code généré
Exécutez la commande gcloud beta resource-config terraform
generate-import
en pointant vers le contenu du répertoire de sortie :
gcloud beta resource-config terraform generate-import entire-tf-output
Cette commande génère les modules Terraform et un script d'importation :
Le fichier
gcloud-export-modules.tf
. Ce fichier pointe vers tous les modules des sous-ressources. Le contenu de ce fichier se présente comme suit :provider "google" { project = "PROJECT_ID" } module "entire-tf-output-projects-PROJECT_ID-ComputeFirewall" { source = "./entire-tf-output/projects/PROJECT_ID/ComputeFirewall" } module "entire-tf-output-projects-PROJECT_ID-ComputeBackendService-global" { source = "./entire-tf-output/projects/PROJECT_ID/ComputeBackendService/global" } ...and so on
Un script shell exécutable portant un nom du type
terraform_import_20220331-19-12-33.sh
. Le script shell contient une liste de commandesterraform import
:#!/bin/sh # Terraform Import Script generated by gcloud cli terraform import module.entire-tf-output-projects-PROJECT_ID-ComputeFirewall.google_compute_firewall.allow_ssh projects/PROJECT_ID/global/firewalls/allow-ssh ...and so on
Les commandes
terraform import
permettent d'importer les modules créés par la commandegenerate-import
dans l'état Terraform.
Importer les modules dans l'état Terraform
Initialisez-le :
terraform init
Exécutez le script :
./terraform_import_20220331-19-12-33.sh
Sortie :
module.examples-projects-PROJECT_ID-ComputeInstance-us-central1-a.google_compute_instance.instance_1: Importing from ID "projects/PROJECT_ID/zones/us-central1-a/instances/instance-1"... module.examples-projects-PROJECT_ID-ComputeInstance-us-central1-a.google_compute_instance.instance_1: Import prepared! Prepared google_compute_instance for import module.examples-projects-PROJECT_ID-ComputeInstance-us-central1-a.google_compute_instance.instance_1: Refreshing state... [id=projects/PROJECT_ID/zones/us-central1-a/instances/instance-1] Import successful! The resources that were imported are shown above. These resources are now in your Terraform state and will henceforth be managed by Terraform.