Introducción
Bienvenidos a este laboratorio sobre la destrucción de recursos de Terraform. Una parte clave del ciclo de vida de la infraestructura no es solo crear y actualizar recursos, sino también eliminarlos de forma limpia cuando ya no son necesarios. Este proceso se conoce como destrucción.
Terraform proporciona un flujo de trabajo sencillo y seguro para destruir infraestructura. El comando principal para esto es terraform destroy. Para evitar la eliminación accidental, Terraform también ofrece una forma de previsualizar lo que se destruirá antes de comprometerse con la acción.
En este laboratorio, aprenderá a:
- Usar
terraform plan -destroypara previsualizar un plan de destrucción. - Interpretar la salida del plan de destrucción.
- Ejecutar el comando
terraform destroypara eliminar recursos. - Verificar que los recursos se han eliminado correctamente tanto del sistema como del archivo de estado de Terraform.
Trabajaremos con un recurso simple local_file, lo que nos permite centrarnos en el flujo de trabajo de Terraform sin necesidad de credenciales de proveedor de nube.
Confirmar el estado actual del proyecto
Antes de comenzar con el proceso de destrucción, verifiquemos primero el estado actual de nuestro proyecto de Terraform. Esto le ayudará a comprender qué recursos están siendo gestionados actualmente por Terraform.
Ejecute los siguientes comandos para verificar el estado actual del proyecto:
Primero, listemos los archivos en el directorio del proyecto:
ls -la
Debería ver una salida similar a la siguiente:
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
Esto muestra el archivo main.tf y el archivo terraform.tfstate que fueron creados por el script de configuración, junto con el archivo example.txt que se creó cuando se aplicó la configuración de Terraform.
A continuación, comprobemos el estado actual de Terraform:
terraform show
Debería ver una salida similar a la siguiente:
## 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"
}
Esto muestra información sobre el recurso local_file.example que está siendo gestionado actualmente por Terraform.
Ejecutar terraform plan -destroy para previsualizar
En este paso, aprenderá a generar un plan de destrucción especulativo. Antes de destruir cualquier recurso, es una buena práctica previsualizar exactamente lo que Terraform tiene la intención de hacer. Esto previene la eliminación accidental de infraestructura crítica. El comando terraform plan -destroy crea un plan de ejecución que muestra qué recursos se destruirán, sin realizar realmente la destrucción.
Todo su trabajo se realizará en el directorio ~/project. El script de configuración ya ha creado un archivo main.tf y lo ha aplicado, creando un archivo llamado example.txt.
Ahora, ejecute el siguiente comando en su terminal para ver el plan de destrucción:
terraform plan -destroy
Verá una salida similar a la siguiente. Esta salida detalla el plan para destruir el único recurso gestionado por nuestra configuración.
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 la salida del plan de destrucción
En este paso, analizaremos la salida del comando anterior. Comprender el plan es crucial para usar Terraform de manera segura.
Observe la salida del comando terraform plan -destroy. Fíjese en estos elementos clave:
Acción del Recurso: La línea
## local_file.example will be destroyed(local_file.example será destruido) indica claramente la acción prevista. El símbolo-delante deresource "local_file" "example"es la notación de Terraform para la destrucción. Cualquier línea precedida por-indica que algo será eliminado.Cambios de Atributos: La salida muestra todos los atributos del recurso e indica que cambiarán a
null, lo que significa eliminación. Por ejemplo:- filename = "./example.txt" -> null.Resumen del Plan: La línea final,
Plan: 0 to add, 0 to change, 1 to destroy.(Plan: 0 para agregar, 0 para cambiar, 1 para destruir), proporciona un resumen de alto nivel de todo el plan. Esta es la línea más importante para verificar una confirmación rápida de las acciones planificadas.
Al revisar este plan, puede estar seguro de que solo se verá afectado el recurso local_file.example. Este paso de confirmación es vital en escenarios del mundo real donde una configuración incorrecta podría llevar a la destrucción no intencionada de recursos importantes. No hay comandos que ejecutar en este paso; se centra en comprender el proceso.
Ejecutar terraform destroy para eliminar recursos
En este paso, ejecutará el plan de destrucción. Ahora que ha revisado el plan y está seguro de los cambios, puede proceder con la destrucción real.
El comando terraform destroy primero presentará el mismo plan de destrucción para una revisión final y luego le pedirá confirmación antes de continuar.
Ejecute el siguiente comando en su terminal:
terraform destroy
Terraform mostrará el plan nuevamente y solicitará su aprobación.
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 la destrucción, escriba yes y presione Enter.
yes
Después de confirmar, Terraform procederá a destruir el recurso y mostrará el progreso.
local_file.example: Destroying... [id=ec3adcab998872def2df6200fb03992ac6f237a4]
local_file.example: Destruction complete after 0s
Destroy complete! Resources: 1 destroyed.
Esto confirma que el recurso local_file ha sido destruido exitosamente.
Verificar que el archivo fue eliminado del sistema de archivos
En este paso, verificará que la destrucción del recurso tuvo el efecto deseado en el sistema. Dado que nuestro recurso era un archivo local llamado example.txt, destruir el recurso debería haber eliminado este archivo del sistema de archivos.
Puede verificar esto intentando listar el archivo usando el comando ls.
Ejecute el siguiente comando en su terminal:
ls example.txt
Dado que el archivo ha sido eliminado, el comando fallará y verá un mensaje de error del sistema operativo. Este error es el resultado esperado y confirma que el recurso fue destruido exitosamente.
ls: cannot access 'example.txt': No such file or directory
Este paso de verificación es importante porque confirma que las acciones de Terraform en el archivo de estado se reflejan en el mundo real.
Comprobar que el archivo terraform.tfstate está vacío
En este paso, inspeccionará el archivo de estado de Terraform (terraform.tfstate) para ver cómo refleja la destrucción de recursos. El archivo de estado es un archivo JSON que realiza un seguimiento de los recursos administrados por Terraform y su estado actual.
Después de que todos los recursos en una configuración son destruidos, el archivo de estado no se elimina. En su lugar, se actualiza para reflejar que ya no está administrando ningún recurso. El array resources dentro del archivo de estado quedará vacío.
Examinemos el contenido del archivo de estado. Utilice el comando cat para mostrarlo:
cat terraform.tfstate
La salida será un objeto JSON. Observe que la clave resources ahora apunta a un array vacío [].
{
"version": 4,
"terraform_version": "1.13.3",
"serial": 3,
"lineage": "f25aaab8-c186-2b16-1bae-fe9ba25f81e4",
"outputs": {},
"resources": [],
"check_results": null
}
Esto confirma desde la perspectiva de Terraform que no hay más recursos bajo su gestión para esta configuración. El estado ahora está limpio.
Resumen
¡Felicidades por completar el laboratorio! Ha recorrido con éxito el proceso de destrucción de la infraestructura administrada por Terraform.
En este laboratorio, aprendió:
- La importancia de previsualizar los cambios con
terraform plan -destroypara prevenir eliminaciones accidentales. - Cómo leer y comprender un plan de destrucción, prestando atención al resumen y a los cambios a nivel de recurso.
- Cómo ejecutar la destrucción de recursos utilizando el comando
terraform destroyy el paso de confirmación requerido. - Cómo verificar que un recurso ha sido destruido exitosamente revisando tanto el sistema del mundo real como el archivo de estado de Terraform (
terraform.tfstate).
Dominar el flujo de trabajo de destrucción es tan importante como dominar la creación de recursos. Asegura que puede gestionar el ciclo de vida completo de su infraestructura de manera limpia y segura.



