Gérer le fichier d'état Terraform

Pour tout déploiement, vous pouvez inspecter ou modifier le fichier d'état. Par exemple, vous pouvez importer ou supprimer des ressources du déploiement, ce que vous faites en modifiant le fichier d'état.

Cette page explique comment utiliser le fichier d'état Terraform créé pour chaque déploiement et chaque révision. Pour en savoir plus sur le fichier d'état, consultez la section État.

Les instructions de cette page partent du principe que vous connaissez bien Terraform.

Avant de commencer

  1. Assurez-vous de disposer des autorisations requises pour utiliser le fichier d'état. Le rôle config.admin inclut les autorisations requises. Les autorisations spécifiques requises sont les suivantes:

    • config.deployments.lock
    • config.revisions.getState
    • config.deployments.updateState
    • config.deployments.unlock
    • config.deployments.getLock
    • config.deployments.getState
  2. Assurez-vous de disposer d'une copie locale de la configuration Terraform. Il s'agit de la configuration qui correspond au fichier d'état avec lequel vous travaillez.

    La copie locale de la configuration vous permet d'exécuter des commandes telles que terraform refresh ou terraform plan localement lorsque vous modifiez le fichier d'état.

  3. Installez Terraform pour utiliser la CLI Terraform sur votre machine locale.

Muter ou inspecter le fichier d'état

Pour muter (modifier) ou inspecter le fichier d'état, vous devez verrouiller le déploiement et télécharger le fichier d'état. Vous pouvez ensuite modifier ou inspecter le fichier d'état.

Après avoir modifié le fichier d'état, vous l'importez pour qu'Infra Manager l'utilise dans votre déploiement.

Verrouiller le déploiement

  1. Verrouillez le déploiement pour empêcher toute modification du déploiement pendant que vous modifiez le fichier d'état. Le déploiement doit être verrouillé pour pouvoir télécharger le fichier d'état.

     gcloud infra-manager deployments lock DEPLOYMENT_ID --project PROJECT_ID --location LOCATION
    

    Remplacez :

    • DEPLOYMENT_ID par l'identifiant de déploiement.
    • PROJECT_ID par le projet dans lequel le déploiement s'exécute.
    • LOCATION par l'emplacement où le déploiement s'exécute.

    Le résultat de cette commande contient un lock ID qui permet d'importer et de déverrouiller le fichier d'état.

  2. Pour récupérer l'ID de la serrure à tout moment, utilisez la commande suivante:

     gcloud infra-manager deployments export-lock DEPLOYMENT_ID --project PROJECT_ID --location LOCATION
    

Télécharger le fichier d'état

Pour télécharger le fichier d'état, vous devez utiliser une URL Cloud Storage signée:

   SIGNED_STATE_DOWNLOAD_URL=$(gcloud infra-manager deployments export-statefile DEPLOYMENT_ID --project PROJECT_ID --location LOCATION --format="get(signedUri)")

   curl -s -X GET --output terraform.tfstate ${SIGNED_STATE_DOWNLOAD_URL}

Muter le fichier d'état en local

  1. Vérifiez que la configuration (fichiers *.tf) se trouve dans le même répertoire que le fichier d'état téléchargé (terraform.tfstate).

  2. Initialisez Terraform :

     terraform init
    
  3. Si vous avez déjà initialisé Terraform, vous devrez peut-être l'initialiser avec l'option de reconfiguration:

     terraform init -reconfigure
    
  4. Utilisez le fichier d'état selon vos besoins. Par exemple, vous pouvez effectuer des opérations d'inspection de l'état ou de mutation. Pour en savoir plus sur l'utilisation du fichier d'état, consultez la section Manipuler l'état Terraform.

  5. Si vous apportez des modifications aux fichiers de configuration Terraform localement, importez la configuration modifiée. Importez cette configuration dans le bucket de stockage ou le dépôt git public que vous utilisez comme source pour déployer la configuration.

Importer le fichier d'état

Utilisez une URL Cloud Storage signée pour importer le fichier d'état:

  1. Obtenez l'ID de la serrure:

     LOCK_ID=$(gcloud infra-manager deployments export-lock DEPLOYMENT_ID --project PROJECT_ID --location LOCATION --format="get(lockId)")
    
  2. Obtenez l'URL d'importation:

     SIGNED_STATE_UPLOAD_URL=$(gcloud infra-manager deployments import-statefile DEPLOYMENT_ID --project PROJECT_ID --location LOCATION --lock-id ${LOCK_ID} --format="get(signedUri)")
    
     curl -s -X PUT --upload-file terraform.tfstate $SIGNED_STATE_UPLOAD_URL
    

Déverrouiller le déploiement

  1. Obtenez l'ID de la serrure:

     LOCK_ID=$(gcloud infra-manager deployments export-lock DEPLOYMENT_ID --project PROJECT_ID --location LOCATION --format="get(lockId)")
    
  2. Déverrouillez le déploiement:

     gcloud infra-manager deployments unlock DEPLOYMENT_ID --project PROJECT_ID --location LOCATION --lock-id ${LOCK_ID}
    

Étape suivante