Gérer le fichier d'état Terraform

Pour n'importe quel déploiement, vous pouvez inspecter ou modifier le fichier d'état. Par exemple, vous pouvez importer ou supprimer des ressources du déploiement 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 nécessaires 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 que vous utilisez.

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

  3. Installez Terraform pour utiliser l'interface de ligne de commande Terraform sur votre machine locale.

Modifier ou inspecter le fichier d'état

Pour 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 pendant que vous modifiez le fichier d'état. Le déploiement doit être verrouillé pour que vous puissiez 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 du déploiement.
    • PROJECT_ID par le projet dans lequel le déploiement s'exécute.
    • LOCATION par l'emplacement dans lequel le déploiement s'exécute.

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

  2. Pour récupérer l'ID de verrouillage à 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, utilisez 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}

Modifier 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'indicateur de reconfiguration :

    terraform init -reconfigure
    
  4. Utilisez le fichier d'état comme vous le souhaitez. Par exemple, vous pouvez effectuer des opérations d' inspection de l'état ou de modification. 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 en local, 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 verrouillage :

    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 verrouillage :

    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