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 -destroypara pré-visualizar um plano de destruição. - Interpretar a saída do plano de destruição.
- Executar o comando
terraform destroypara 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.
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:
Ação do Recurso: A linha
## local_file.example will be destroyed(o recursolocal_file.exampleserá destruído) declara claramente a ação pretendida. O símbolo-na frente deresource "local_file" "example"é a notação do Terraform para destruição. Qualquer linha prefixada com-indica que algo será removido.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.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 -destroypara 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 destroye 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.



