Destrucción de Recursos con Terraform

LinuxBeginner
Practicar Ahora

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 -destroy para previsualizar un plan de destrucción.
  • Interpretar la salida del plan de destrucción.
  • Ejecutar el comando terraform destroy para 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.

Este es un Guided Lab, que proporciona instrucciones paso a paso para ayudarte a aprender y practicar. Sigue las instrucciones cuidadosamente para completar cada paso y obtener experiencia práctica. Los datos históricos muestran que este es un laboratorio de nivel principiante con una tasa de finalización del 100%. Ha recibido una tasa de reseñas positivas del 100% por parte de los estudiantes.

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:

  1. 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 de resource "local_file" "example" es la notación de Terraform para la destrucción. Cualquier línea precedida por - indica que algo será eliminado.

  2. 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.

  3. 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 -destroy para 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 destroy y 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.