Gerenciar o arquivo de estado do Terraform

Para qualquer implantação, talvez seja necessário inspecionar ou modificar o arquivo de estado. Por exemplo, você pode importar ou remover recursos da implantação, o que é feito modificando o arquivo de estado.

Esta página descreve como trabalhar com o arquivo de estado do Terraform criado para cada implantação e revisão. Para saber mais sobre o arquivo de estado, consulte Estado.

As instruções desta página pressupõem que você conhece o Terraform.

Antes de começar

  1. Verifique se você tem as permissões necessárias para trabalhar com o arquivo de estado. O papel config.admin inclui as permissões necessárias. As permissões específicas necessárias são:

    • config.deployments.lock
    • config.revisions.getState
    • config.deployments.updateState
    • config.deployments.unlock
    • config.deployments.getLock
    • config.deployments.getState
  2. Verifique se você tem uma cópia local da configuração do Terraform. Essa é a configuração que corresponde ao arquivo de estado com que você está trabalhando.

    A cópia local da configuração permite executar comandos como terraform refresh ou terraform plan localmente enquanto você modifica o arquivo de estado.

  3. Instale o Terraform para usar a CLI do Terraform na sua máquina local.

Mutar ou inspecionar o arquivo de estado

Para modificar ou inspecionar o arquivo de estado, é necessário bloquear a implantação e fazer o download dele. Em seguida, você pode modificar ou inspecionar o arquivo de estado.

Depois de modificar o arquivo de estado, faça o upload dele para que o Infra Manager o use na implantação.

Bloquear a implantação

  1. Bloqueie a implantação para evitar mudanças nela enquanto você muda o arquivo de estado. A implantação precisa estar bloqueada para fazer o download do arquivo de estado.

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

    Substitua:

    • DEPLOYMENT_ID com o identificador de implantação.
    • PROJECT_ID pelo projeto em que a implantação é executada.
    • LOCATION pelo local em que a implantação é executada.

    A saída desse comando contém um lock ID que é usado para fazer upload e desbloquear o arquivo de estado.

  2. Para recuperar o ID de bloqueio a qualquer momento, use o comando:

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

Fazer o download do arquivo de estado

Para fazer o download do arquivo de estado, use um URL assinado do Cloud Storage:

   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}

Mutar o arquivo de estado localmente

  1. Confirme se a configuração (arquivos *.tf) está no mesmo diretório que o arquivo de estado transferido por download (terraform.tfstate).

  2. Inicialize o Terraform:

     terraform init
    
  3. Se você já tiver inicializado o Terraform, talvez seja necessário inicializar com a flag de reconfiguração:

     terraform init -reconfigure
    
  4. Trabalhe com o arquivo de estado conforme necessário. Por exemplo, é possível fazer operações de inspeção de estado ou mutação. Para mais detalhes sobre como trabalhar com o arquivo de estado, consulte Manipulação do estado do Terraform.

  5. Se você fizer alterações nos arquivos de configuração do Terraform localmente, faça o upload da configuração modificada. Faça upload dessa configuração para o bucket de armazenamento ou o repositório git público que você está usando como origem para implantar a configuração.

Fazer upload do arquivo de estado

Use um URL assinado do Cloud Storage para fazer upload do arquivo de estado:

  1. Conseguir o ID da fechadura:

     LOCK_ID=$(gcloud infra-manager deployments export-lock DEPLOYMENT_ID --project PROJECT_ID --location LOCATION --format="get(lockId)")
    
  2. Consiga o URL de upload:

     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
    

Desbloquear a implantação

  1. Conseguir o ID da fechadura:

     LOCK_ID=$(gcloud infra-manager deployments export-lock DEPLOYMENT_ID --project PROJECT_ID --location LOCATION --format="get(lockId)")
    
  2. Desbloqueie a implantação:

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

A seguir