Introducción
En los laboratorios anteriores, usted asumió el papel del Chef y escribió menús (configuraciones) para que el Robot (Terraform) los cocinara (los compilara). Pero ¿cómo recuerda el robot lo que ya ha cocinado?
Imagine que tiene un almacén, pero ha perdido la lista del inventario. No sabría qué tiene, dónde está ni si alguien ha robado algo.
En Terraform, esta lista de inventario se llama estado. Es la memoria de Terraform. Registra los recursos que creó y relaciona los objetos de configuración con los objetos reales de la infraestructura.
El estado es lo que hace práctico el uso declarativo. Sin él, Terraform podría leer sus archivos, pero no tendría una memoria confiable de qué objetos reales corresponden a esas declaraciones.
El estado es una de las ideas más importantes de Terraform. Sin él, Terraform no sabría qué existe, qué ha cambiado ni qué debe actualizarse o volver a crearse.
En este laboratorio, verá cómo Terraform utiliza el estado para mantener su infraestructura en buen estado. Usted asumirá el papel del «Caos», dañará elementos manualmente y observará cómo Terraform detecta el daño y «repara» el sistema automáticamente.
Inspeccionar el estado
Este entorno ya está preconfigurado. Existe un archivo main.tf y ya se ha ejecutado terraform apply. Esto significa que la infraestructura (un contenedor de Docker) ya está activa.
Primero, verifique que el contenedor esté en ejecución:
sudo docker ps
Debería ver un contenedor llamado tutorial.
Ahora, observe los archivos de su directorio. Verá terraform.tfstate.
ls -l
Este archivo es el «diario secreto» de Terraform. Aquí anota todo lo que hace. Veamos su contenido.
cat terraform.tfstate
La salida está en un formato llamado JSON. Al principio puede parecer complicada, pero solo es una forma estructurada de que los ordenadores tomen notas.
En algún lugar de ese texto verá docker_container y el ID del contenedor en ejecución. Esto demuestra que Terraform «conoce» ese contenedor específico.
Regla fundamental: nunca edite este archivo manualmente. Si lo modifica, Terraform puede perder la información del estado y eliminar o dañar accidentalmente su infraestructura. Permita siempre que Terraform gestione su propio diario.
Esta advertencia es importante porque el estado contiene metadatos autoritativos, no es simplemente un registro. Si se corrompe, Terraform puede tomar más adelante decisiones destructivas o confusas.
Crear una desviación
Terraform espera ser el único responsable de gestionar estos recursos. Pero en el mundo real pueden ocurrir imprevistos. Por ejemplo, un servidor puede fallar o un compañero puede eliminar algo manualmente por accidente.
Esta situación se denomina desviación (drift). Significa que la «realidad» ya no coincide con «el plan».
Las desviaciones son habituales en entornos compartidos, porque las personas, los scripts, los fallos y los sistemas externos pueden cambiar la infraestructura fuera del ciclo normal de control de Terraform.
Vamos a provocar algo de caos. Ignoraremos a Terraform y eliminaremos directamente el contenedor mediante comandos de Docker.
sudo docker rm -f tutorial
Verifique que el contenedor realmente haya desaparecido:
sudo docker ps
En este momento tenemos un problema:
- Realidad: el contenedor está detenido y eliminado.
- Archivo de estado: Terraform cree que el contenedor sigue activo (porque nadie le ha informado de lo contrario).
Detectar la desviación
Ahora comprobaremos si Terraform detecta la desaparición.
Cuando ejecuta terraform plan, lo primero que hace Terraform es una «actualización del estado» (Refresh). Consulta a Docker y pregunta: «Hola, ¿sigue existiendo el contenedor con el ID XYZ?».
Ejecute el comando de planificación:
terraform plan
Observe atentamente la salida. Debería ver: docker_container.nginx: Refreshing state...
Después, Terraform le mostrará un plan con un signo + de color verde (crear).
Terraform will perform the following actions:
## docker_container.nginx will be created
+ resource "docker_container" "nginx" { ... }
¡Terraform lo ha descubierto! Su razonamiento fue: «Mi plan indica que debería existir un contenedor. La realidad indica que no existe ninguno. Por lo tanto, debo crear uno nuevo para alcanzar el estado deseado».
Este comportamiento de reconciliación es una de las propiedades operativas más importantes de Terraform. Terraform compara el estado deseado, el estado registrado y la realidad activa para decidir qué corrección necesita realizar.
Reparar la infraestructura
Esta es la capacidad de «reparación automática» de la infraestructura como código. Como nuestro código define el estado deseado (un contenedor en ejecución), Terraform puede corregir automáticamente cualquier desviación que se produzca.
Ejecute apply para solucionar el problema:
terraform apply
Escriba yes cuando se le solicite.
Cuando termine, vuelva a comprobar Docker:
sudo docker ps
¡El contenedor ha vuelto! Es posible que tenga un ID nuevo y que sea una instancia nueva, pero, desde el punto de vista funcional, su infraestructura ha vuelto a coincidir exactamente con lo que definió en el plano.
Resumen
En este laboratorio, comprobó el poder del estado.
Aprendió lo siguiente:
- El archivo de estado: la memoria de Terraform sobre lo que existe (
terraform.tfstate). - Detección de desviaciones: cómo Terraform detecta que algo ha cambiado sin que se lo hayan notificado (por ejemplo, después de una eliminación manual).
- Reparación automática: cómo
terraform applyrestaura automáticamente los recursos que faltan para que coincidan con su código.
Esta fiabilidad explica por qué se confía en Terraform para gestionar infraestructuras críticas. Incluso cuando ocurren desastres, Terraform le ayuda a volver rápidamente a un estado conocido y correcto.



