Gerenciar o arquivo de estado do Terraform

Em 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 modificando o arquivo de estado.

Nesta página, descrevemos 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 nesta página presumem que você tenha familiaridade com o Terraform.

Antes de começar

  1. Confira 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. Confira 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 máquina local.

Alterar ou inspecionar o arquivo de estado

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

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

Bloquear a implantação

  1. Bloqueie a implantação para evitar mudanças nela enquanto você altera o arquivo de estado. A implantação precisa ser bloqueada para que seja possível fazer o download do arquivo de estado.

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

    Substitua:

    • DEPLOYMENT_ID pelo identificador da 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}

Alterar o arquivo de estado localmente

  1. Confirme se a configuração (arquivos *.tf) está no mesmo diretório que o arquivo de estado baixado (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, você pode fazer inspeção de estado ou operações de mutação. Para mais detalhes sobre como trabalhar com o arquivo de estado, consulte Manipular o estado do Terraform.

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

Fazer o upload do arquivo de estado

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

  1. Consiga o ID de bloqueio:

    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. Consiga o ID de bloqueio:

    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