Faça a gestão do ficheiro de estado do Terraform

Para qualquer implementação, é recomendável inspecionar ou modificar o ficheiro de estado. Por exemplo, pode querer importar ou remover recursos da implementação, o que faz através da modificação do ficheiro de estado.

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

As instruções nesta página pressupõem que tem conhecimentos sobre o Terraform.

Antes de começar

  1. Certifique-se de que tem as autorizações necessárias para trabalhar com o ficheiro de estado. A função config.admin inclui as autorizações necessárias. As autorizaçõ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. Certifique-se de que tem uma cópia local da configuração do Terraform. Esta é a configuração que corresponde ao ficheiro de estado com o qual está a trabalhar.

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

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

Altere ou inspecione o ficheiro de estado

Para alterar ou inspecionar o ficheiro de estado, tem de bloquear a implementação e transferir o ficheiro de estado. Em seguida, pode alterar ou inspecionar o ficheiro de estado.

Depois de alterar o ficheiro de estado, carregue o ficheiro para o Infra Manager usar na sua implementação.

Bloqueie a implementação

  1. Bloqueie a implementação para impedir alterações à implementação enquanto altera o ficheiro de estado. A implementação tem de estar bloqueada para poder transferir o ficheiro de estado.

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

    Substituição:

    • DEPLOYMENT_ID com o identificador de implementação.
    • PROJECT_ID com o projeto onde a implementação é executada.
    • LOCATION com a localização onde a implementação é executada.

    O resultado deste comando contém um lock ID que é usado para carregar e desbloquear o ficheiro de estado.

  2. Para obter o ID do cadeado em qualquer altura, use o comando:

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

Transfira o ficheiro de estado

Para transferir o ficheiro de estado, usa um URL do Cloud Storage assinado:

   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}

Altere o ficheiro de estado localmente

  1. Confirme que a configuração (ficheiros *.tf) está no mesmo diretório que o ficheiro de estado transferido (terraform.tfstate).

  2. Inicialize o Terraform:

     terraform init
    
  3. Se tiver inicializado o Terraform anteriormente, pode ter de o inicializar com a flag de reconfiguração:

     terraform init -reconfigure
    
  4. Trabalhe com o ficheiro de estado conforme necessário. Por exemplo, pode fazer operações de inspeção de estado ou mutação. Para ver mais detalhes sobre como trabalhar com o ficheiro de estado, consulte o artigo Manipular o estado do Terraform.

  5. Se fizer alterações aos ficheiros de configuração do Terraform localmente, carregue a configuração modificada. Carregue esta configuração para o contentor de armazenamento ou o repositório git público que está a usar como origem para implementar a configuração.

Carregue o ficheiro de estado

Use um URL do Cloud Storage assinado para carregar o ficheiro de estado:

  1. Obtenha o ID do bloqueio:

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

     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
    

Desbloqueie a implementação

  1. Obtenha o ID do bloqueio:

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

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

O que se segue?