Destruição de Recursos do Terraform

LinuxBeginner
Pratique Agora

Introdução

Bem-vindo a este laboratório sobre a destruição de recursos no Terraform. Uma parte fundamental do ciclo de vida da infraestrutura não é apenas criar e atualizar recursos, mas também removê-los de forma limpa quando não são mais necessários. Este processo é conhecido como destruição.

O Terraform fornece um fluxo de trabalho direto e seguro para destruir infraestrutura. O comando principal para isso é terraform destroy. Para evitar exclusões acidentais, o Terraform também oferece uma maneira de pré-visualizar o que será destruído antes de você se comprometer com a ação.

Neste laboratório, você aprenderá a:

  • Usar terraform plan -destroy para pré-visualizar um plano de destruição.
  • Interpretar a saída do plano de destruição.
  • Executar o comando terraform destroy para remover recursos.
  • Verificar se os recursos foram removidos com sucesso tanto do sistema quanto do arquivo de estado (state file) do Terraform.

Trabalharemos com um recurso simples local_file, o que nos permite focar no fluxo de trabalho do Terraform sem a necessidade de credenciais de provedor de nuvem.

Este é um Lab Guiado, que fornece instruções passo a passo para ajudá-lo a aprender e praticar. Siga as instruções cuidadosamente para completar cada etapa e ganhar experiência prática. Dados históricos mostram que este é um laboratório de nível iniciante com uma taxa de conclusão de 100%. Recebeu uma taxa de avaliações positivas de 100% dos estudantes.

Confirmar o estado atual do projeto

Antes de começarmos o processo de destruição, vamos primeiro verificar o estado atual do nosso projeto Terraform. Isso ajudará você a entender quais recursos estão atualmente gerenciados pelo Terraform.

Execute os seguintes comandos para verificar o estado atual do projeto:

Primeiro, vamos listar os arquivos no diretório do projeto:

ls -la

Você deverá ver uma saída semelhante à seguinte:

total 20
drwxr-xr-x 1 labex labex  110 Oct 15 13:10 .
drwxr-x--- 1 labex labex 4096 Oct 15 13:10 ..
drwxr-xr-x 3 labex labex   23 Oct 15 13:07 .terraform
-rw-r--r-- 1 labex labex 1181 Oct 15 13:07 .terraform.lock.hcl
-rwxrwxr-x 1 labex labex   45 Oct 15 13:10 example.txt
-rw-rw-r-- 1 labex labex  258 Oct 15 13:10 main.tf
-rw-rw-r-- 1 labex labex 1088 Oct 15 13:10 terraform.tfstate

Isso mostra o arquivo main.tf e o arquivo terraform.tfstate que foram criados pelo script de configuração, juntamente com o arquivo example.txt que foi criado quando a configuração do Terraform foi aplicada.

Em seguida, vamos verificar o estado atual do Terraform:

terraform show

Você deverá ver uma saída semelhante à seguinte:

## local_file.example:
resource "local_file" "example" {
    content              = "This is an example file managed by Terraform."
    directory_permission = "0777"
    file_permission      = "0777"
    filename             = "./example.txt"
    id                   = "ec3adcab998872def2df6200fb03992ac6f237a4"
}

Isso exibe informações sobre o recurso local_file.example que está atualmente gerenciado pelo Terraform.

Executar terraform plan -destroy para pré-visualização

Nesta etapa, você aprenderá a gerar um plano de destruição especulativo. Antes de destruir quaisquer recursos, é uma boa prática pré-visualizar exatamente o que o Terraform pretende fazer. Isso evita a exclusão acidental de infraestrutura crítica. O comando terraform plan -destroy cria um plano de execução que mostra quais recursos serão destruídos, sem realmente executar a destruição.

Todo o seu trabalho será realizado no diretório ~/project. O script de configuração já criou um arquivo main.tf e o aplicou, criando um arquivo chamado example.txt.

Agora, execute o seguinte comando no seu terminal para ver o plano de destruição:

terraform plan -destroy

Você verá uma saída semelhante à seguinte. Esta saída detalha o plano para destruir o único recurso gerenciado pela nossa configuração.

local_file.example: Refreshing state... [id=ec3adcab998872def2df6200fb03992ac6f237a4]

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  - destroy

Terraform will perform the following actions:

  ## local_file.example will be destroyed
  - resource "local_file" "example" {
      - content              = "This is an example file managed by Terraform." -> null
      - directory_permission = "0777" -> null
      - file_permission      = "0777" -> null
      - filename             = "./example.txt" -> null
      - id                   = "ec3adcab998872def2df6200fb03992ac6f237a4" -> null
    }

Plan: 0 to add, 0 to change, 1 to destroy.

────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

Note: You didn't use the -out option to save this plan, so Terraform can't
guarantee to take exactly these actions if you run "terraform apply" now.

Confirmar a saída do plano de destruição

Nesta etapa, analisaremos a saída do comando anterior. Entender o plano é crucial para usar o Terraform com segurança.

Observe a saída do comando terraform plan -destroy. Note estes elementos chave:

  1. Ação do Recurso: A linha ## local_file.example will be destroyed (o recurso local_file.example será destruído) declara claramente a ação pretendida. O símbolo - na frente de resource "local_file" "example" é a notação do Terraform para destruição. Qualquer linha prefixada com - indica que algo será removido.

  2. Mudanças de Atributos: A saída mostra todos os atributos do recurso e indica que eles serão alterados para null, o que significa exclusão. Por exemplo: - filename = "./example.txt" -> null.

  3. Resumo do Plano: A linha final, Plan: 0 to add, 0 to change, 1 to destroy. (Plano: 0 para adicionar, 0 para alterar, 1 para destruir), fornece um resumo de alto nível de todo o plano. Esta é a linha mais importante a ser verificada para uma confirmação rápida das ações planejadas.

Ao revisar este plano, você pode ter certeza de que apenas o recurso local_file.example será afetado. Esta etapa de confirmação é vital em cenários do mundo real, onde uma configuração incorreta pode levar à destruição não intencional de recursos importantes. Não há comandos para executar nesta etapa; ela se concentra na compreensão do processo.

Executar terraform destroy para remover recursos

Nesta etapa, você executará o plano de destruição. Agora que você revisou o plano e está confiante sobre as alterações, pode prosseguir com a destruição real.

O comando terraform destroy primeiro apresentará o mesmo plano de destruição para uma revisão final e, em seguida, solicitará sua confirmação antes de prosseguir.

Execute o seguinte comando no seu terminal:

terraform destroy

O Terraform exibirá o plano novamente e pedirá sua aprovação.

local_file.example: Refreshing state... [id=ec3adcab998872def2df6200fb03992ac6f237a4]

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  - destroy

Terraform will perform the following actions:

  ## local_file.example will be destroyed
  - resource "local_file" "example" {
      - content              = "This is an example file managed by Terraform." -> null
      - directory_permission = "0777" -> null
      - file_permission      = "0777" -> null
      - filename             = "./example.txt" -> null
      - id                   = "ec3adcab998872def2df6200fb03992ac6f237a4" -> null
    }

Plan: 0 to add, 0 to change, 1 to destroy.

Do you really want to destroy all resources?
  Terraform will destroy all your managed infrastructure, as shown above.
  There is no undo. Only 'yes' will be accepted to confirm.

  Enter a value:

Para confirmar a destruição, digite yes e pressione Enter.

yes

Após a confirmação, o Terraform prosseguirá com a destruição do recurso e exibirá o progresso.

local_file.example: Destroying... [id=ec3adcab998872def2df6200fb03992ac6f237a4]
local_file.example: Destruction complete after 0s

Destroy complete! Resources: 1 destroyed.

Isso confirma que o recurso local_file foi destruído com sucesso.

Verificar se o arquivo foi removido do sistema de arquivos

Nesta etapa, você verificará se a destruição do recurso teve o efeito pretendido no sistema. Como nosso recurso era um arquivo local chamado example.txt, a destruição do recurso deve ter excluído este arquivo do sistema de arquivos.

Você pode verificar isso tentando listar o arquivo usando o comando ls.

Execute o seguinte comando no seu terminal:

ls example.txt

Como o arquivo foi excluído, o comando falhará e você verá uma mensagem de erro do sistema operacional. Este erro é o resultado esperado e confirma que o recurso foi destruído com sucesso.

ls: cannot access 'example.txt': No such file or directory

Esta etapa de verificação é importante porque confirma que as ações do Terraform no arquivo de estado (state file) são refletidas no mundo real.

Verificar arquivo terraform.tfstate vazio

Nesta etapa, você inspecionará o arquivo de estado do Terraform (terraform.tfstate) para ver como ele reflete a destruição do recurso. O arquivo de estado é um arquivo JSON que mantém o controle dos recursos gerenciados pelo Terraform e seu estado atual.

Após todos os recursos em uma configuração serem destruídos, o arquivo de estado não é excluído. Em vez disso, ele é atualizado para refletir que não está mais gerenciando nenhum recurso. O array resources dentro do arquivo de estado ficará vazio.

Vamos examinar o conteúdo do arquivo de estado. Use o comando cat para exibi-lo:

cat terraform.tfstate

A saída será um objeto JSON. Observe que a chave resources agora aponta para um array vazio [].

{
  "version": 4,
  "terraform_version": "1.13.3",
  "serial": 3,
  "lineage": "f25aaab8-c186-2b16-1bae-fe9ba25f81e4",
  "outputs": {},
  "resources": [],
  "check_results": null
}

Isso confirma, da perspectiva do Terraform, que não há mais recursos sob seu gerenciamento para esta configuração. O estado agora está limpo.

Resumo

Parabéns por concluir o laboratório! Você percorreu com sucesso o processo de destruição da infraestrutura gerenciada pelo Terraform.

Neste laboratório, você aprendeu:

  • A importância de pré-visualizar as alterações com terraform plan -destroy para evitar exclusões acidentais.
  • Como ler e entender um plano de destruição, prestando atenção ao resumo e às alterações no nível do recurso.
  • Como executar a destruição de recursos usando o comando terraform destroy e a etapa de confirmação necessária.
  • Como verificar se um recurso foi destruído com sucesso, verificando tanto o sistema do mundo real quanto o arquivo de estado do Terraform (terraform.tfstate).

Dominar o fluxo de trabalho de destruição é tão importante quanto dominar a criação de recursos. Isso garante que você possa gerenciar o ciclo de vida completo da sua infraestrutura de forma limpa e segura.