Terraformation: Terraform states agrupados por proyecto, como en CloudFormation
Visor serverless que lee tus Terraform states en S3 y muestra cada proyecto como recursos de AWS, al estilo de CloudFormation.

¿Dónde empezó la idea?
Empecé en la nube con AWS CloudFormation, y una de las cosas que más daba por sentadas era abrir un stack y ver, en una sola pantalla, todos los recursos que ese proyecto había creado: su tipo, su identificador físico y su estado.
Cuando me familiaricé con Terraform, eso fue lo primero que extrañé. Terraform guarda lo que despliega en un archivo de estado, el .tfstate, que en mi caso vive en un bucket de Amazon S3, un archivo por proyecto. Ese archivo está pensado para que Terraform lo lea, no para que una persona lo revise. Si quería saber qué había desplegado un proyecto, terminaba corriendo terraform state list en la carpeta correcta o apoyándome en AWS Resource Explorer.
Cuando me familiaricé con Terraform, eso fue lo primero que extrañé. Terraform guarda lo que despliega en un archivo de estado, el .tfstate, que en mi caso vive en un bucket de Amazon S3, un archivo por proyecto. Ese archivo está pensado para que Terraform lo lea, no para que una persona lo revise. Si quería saber qué había desplegado un proyecto, terminaba corriendo terraform state list en la carpeta correcta o apoyándome en AWS Resource Explorer.
¿Qué logré encontrar?
Busqué visualizadores. Hay varios que dibujan grafos de dependencias, pero yo no quería un grafo. Quería la lista de recursos de un proyecto, como en la consola de CloudFormation.
Lo más cercano fue Terraboard, de Camptocamp. Lee los states de S3 y permite navegarlos y buscar en ellos. Pero el proyecto está discontinuado, y su arquitectura necesita un servidor encendido y una base de datos PostgreSQL todo el tiempo, aunque nadie lo esté usando.
Como fanático de serverless, pensé que todo eso se podía reconstruir en AWS con servicios que cuestan casi nada cuando no se usan. Además, los states cambian pocas veces al día. No tiene sentido consultar el bucket cada pocos minutos si S3 puede avisar cuando algo cambia.
Lo más cercano fue Terraboard, de Camptocamp. Lee los states de S3 y permite navegarlos y buscar en ellos. Pero el proyecto está discontinuado, y su arquitectura necesita un servidor encendido y una base de datos PostgreSQL todo el tiempo, aunque nadie lo esté usando.
Como fanático de serverless, pensé que todo eso se podía reconstruir en AWS con servicios que cuestan casi nada cuando no se usan. Además, los states cambian pocas veces al día. No tiene sentido consultar el bucket cada pocos minutos si S3 puede avisar cuando algo cambia.
¿Qué es Terraformation?
Terraformation lee los archivos .tfstate de un bucket de S3 y muestra, por proyecto, los recursos de AWS desplegados, con su tipo de CloudFormation cuando existe uno.
La arquitectura reacciona a eventos en lugar de consultar periódicamente:
Cuando Terraform escribe una nueva versión del state, S3 envía un evento a Amazon EventBridge.
Una función de AWS Lambda lee esa versión, la resume y la guarda en Amazon DynamoDB.
El frontend es Flutter web, servido desde S3 con Amazon CloudFront. Siempre elijo Flutter porque, si quiero llevarlo a una versión de escritorio o a una app, me resulta más fácil, y además ya lo usaba desde antes de la era de la IA.
Toda la infraestructura está en plantillas anidadas de AWS SAM, y el proyecto está disponible públicamente en github.com/nubesegura/terraformation .
La arquitectura reacciona a eventos en lugar de consultar periódicamente:
Cuando Terraform escribe una nueva versión del state, S3 envía un evento a Amazon EventBridge.
Una función de AWS Lambda lee esa versión, la resume y la guarda en Amazon DynamoDB.
El frontend es Flutter web, servido desde S3 con Amazon CloudFront. Siempre elijo Flutter porque, si quiero llevarlo a una versión de escritorio o a una app, me resulta más fácil, y además ya lo usaba desde antes de la era de la IA.
Toda la infraestructura está en plantillas anidadas de AWS SAM, y el proyecto está disponible públicamente en github.com/nubesegura/terraformation .
¿Qué funcionalidades principales tiene esta primera versión?
- Vista de los recursos de AWS que despliega cada state, agrupados como en un stack de CloudFormation. Es la vista que yo quería desde el principio.
- Un dashboard con proyectos, recursos, versiones de Terraform en uso y actividad en el tiempo, con desgloses por tipo, proveedor y módulo.
- Un grafo interactivo de dependencias entre recursos y entre módulos.
- Búsqueda por tipo, nombre o módulo.
- Interfaz en inglés y español, con tema claro y oscuro.
- Opcional: un resumen de los cambios en lenguaje natural con Amazon Bedrock, apagado por defecto.

¿Cómo se instala?
Terraformation no se instala en un servidor: lo despliegas en tu propia cuenta de AWS con AWS SAM. Te dejo acá los prerrequisitos:
- Un bucket de S3 con los states y el versionado activado. El proyecto no lo crea ni lo administra.
- Terraform 1.10 o superior con use_lockfile = true, si quieres ver los bloqueos.
- AWS CLI v2, make, uv (Python 3.13) y Flutter.
En el repositorio, el despliegue se realiza de manera automática a través de github workflow. La guía paso a paso está en el README del repositorio.
Al terminar el despligue, la URL de la aplicación aparece en las salidas (output) del workflow. Por defecto, la plantilla activa las notificaciones a EventBridge en el bucket, conservando las que ya tengas; si prefieres que no lo modifique, hay un modo manual.
¿Qué costos asociados tiene esta interfaz?
Como todo es serverless, casi todo cae dentro de la capa gratuita de AWS. Los costos fijos vienen principalmente de la distribución de CloudFront y, si decides agregarlo, de AWS WAF.
¿Qué sigue?
Espero que lo revises y me des retroalimentación para mejorarlo. Esto es solo el inicio, y ya tengo varias mejoras por implementar.
Enjoyed reading this content? Let the author know!
Your likes, comments, shares, and saves help creators reach more builders.
Loading recommendations
Loading article