Índice
- Introducción
- Entorno
- Principales características de Terragrunt y su Caché
- Detectando el Problema
- Solución: Configuración del Provider Cache
- Resultado: Liberando Espacio
- Código fuente del tutorial
- Conclusiones
- Referencias bibliográficas
1. Introducción
En los proyectos de infraestructura como código, la eficiencia no solo se mide por la rapidez del despliegue o la robustez de la configuración, sino también por el aprovechamiento inteligente de los recursos locales, especialmente cuando trabajamos con herramientas como Terragrunt y Terraform.
En este tutorial quiero compartirte un caso real que me ocurrió recientemente mientras migrábamos la infraestructura de AWS de una cuenta a otra. Descubrimos un problema sorprendente relacionado con el peso desmesurado que puede alcanzar la caché de Terragrunt si no se configura adecuadamente. Lo más interesante es que la solución no solo es sencilla, sino que además supone una mejora aplicable tanto a entornos locales como a pipelines de integración continua.
Si alguna vez te ha sorprendido el tamaño de tu carpeta de despliegue o simplemente quieres aplicar buenas prácticas en el uso de Terragrunt, este tutorial es para ti.
2. Entorno
Antes de profundizar en el caso, es importante que conozcas el entorno en el que trabajamos, por si quieres reproducir los pasos o comparar con el tuyo:
- Hardware: MacBook Pro 16′ (Apple M1 Pro, 32GB RAM, 1TB Flash Storage)
- Sistema Operativo: macOS Sequoia 15.5
- Editor de Código: Cursor 1.0.0 (basado en VS Code 1.96.2)
- Terragrunt versión: 0.77.22
- Terraform versión: 1.12.1
Estos detalles son relevantes, ya que en sistemas Unix/macOS el manejo de variables de entorno y configuración de paths puede variar respecto a entornos Windows.
3. Principales características de Terragrunt y su Caché
Terragrunt es una herramienta que complementa a Terraform, facilitando la gestión de múltiples entornos, el reuso de configuraciones y la orquestación de despliegues complejos. Sin embargo, bajo el capó, Terragrunt genera una caché local donde almacena tanto el código como los providers, es decir, los binarios que permiten interactuar con AWS, Azure, GCP, etc.
Esta caché tiene ventajas, pero también un talón de Aquiles:
✅ Ventajas:
- Acelera los despliegues evitando descargar repetidamente los mismos providers.
- Permite aislar el estado y los módulos por recurso o directorio.
⚠️ Problema:
- Cada recurso o módulo que despliegas genera su propia carpeta
.terraformdentro de la caché de Terragrunt. - Dentro de esa carpeta se almacena una copia completa del provider, lo que puede multiplicar el peso final de forma exagerada.
En nuestro caso, tras desplegar aproximadamente la mitad de la infraestructura, la caché ya pesaba 45GB, y todavía quedaba trabajo por hacer.
4. Detectando el Problema
El detonante fue un comentario casual de un compañero mientras realizaba pruebas a un módulo de EC2 actualizado con los cambios de la última version del provider de AWS. Decidí borrar tanto la caché como el lock para asegurarme que esta se regenerase de cero, y surgió la pregunta:
"¿Has encontrado la manera de optimizar la caché de Terragrunt?"
En ese momento no era consciente del problema, pero al investigar, descubrí que efectivamente, cada recurso generaba su propia carpeta .terraform con el provider incluido, lo que explicaba los 45GB de peso en mi directorio de despliegue.
Aunque gracias al .gitignore esta caché no se versiona (lo cual es fundamental por seguridad y espacio), seguía siendo un problema importante a nivel de almacenamiento local, especialmente al trasladar datos entre máquinas o trabajar en entornos CI/CD.
5. Solución: Configuración del Provider Cache
Revisando la documentación oficial de Terragrunt sobre la caché, descubrimos una opción muy interesante: Provider Cache.
Esta funcionalidad permite centralizar el almacenamiento de los providers en un único directorio, evitando duplicados innecesarios y optimizando el uso de espacio en disco.
Pasos para activar el Provider Cache:
Simplemente hay que definir dos variables de entorno:
|
Bash
|
|
|---|---|
|
export TG_PROVIDER_CACHE=1
export TG_PROVIDER_CACHE_DIR=/ruta/a/tu/cache |
|
En mi caso personal, decidí almacenarlo en un directorio específico dentro de mi usuario:
|
Bash
|
|
|---|---|
|
export TG_PROVIDER_CACHE=1
export TG_PROVIDER_CACHE_DIR=~/.aws/cache/providers |
|
Consejo: Si utilizas zsh como shell, lo ideal es añadir estas líneas en tu archivo .zshrc para que se apliquen automáticamente en cada terminal.
Con esto, Terragrunt almacenará los providers en un único directorio centralizado y, cuando hagas terragrunt plan o terragrunt apply, simplemente creará un enlace simbólico (symlink) a esa ubicación, sin duplicar el contenido.
6. Resultado: Liberando Espacio
Tras aplicar esta configuración, el cambio fue drástico. El directorio que antes ocupaba 45GB, ahora apenas pesa 51MB.
Una optimización muy significativa, especialmente cuando se trabaja con cientos de recursos. Además, esto sienta las bases para futuras optimizaciones en entornos de CI/CD o pipelines automatizados con herramientas como Atlantis, ya que el tiempo es oro, pero de esto ya hablaremos en un próximo tutorial.
7. Código fuente del tutorial
Dado que este tutorial se basa en configuración y buenas prácticas, no hay un repositorio de código como tal, pero dejo aquí un ejemplo mínimo de configuración aplicable:
Archivo .zshrc (fragmento relevante):
|
Bash
|
|
|---|---|
|
# Optimización de caché de Terragrunt
export TG_PROVIDER_CACHE=1 export TG_PROVIDER_CACHE_DIR=~/.aws/cache/providers |
|
Comando útil para limpiar la caché (opcional):
|
Bash
|
|
|---|---|
|
find . -type d -name ".terragrunt-cache" -exec rm -rf {} +
|
|
Este comando, recomendado por la documentación oficial, permite eliminar todas las carpetas de caché generadas por Terragrunt, en caso de que quieras hacer limpieza antes de activar el Provider Cache.
8. Conclusiones
Este tutorial demuestra cómo problemas aparentemente secundarios, como el tamaño de la caché local, pueden convertirse en una gran oportunidad para introducir mejoras significativas en nuestros proyectos de infraestructura como código.
Habilitar el Provider Cache en Terragrunt:
✅ Ahorra espacio de almacenamiento local.
✅ Mejora el rendimiento al evitar descargas redundantes.
✅ Sienta las bases para optimizaciones en entornos CI/CD.
✅ Refuerza las buenas prácticas de gestión de configuración.
Además, situaciones como esta nos recuerdan la importancia de cuestionar el estado actual, investigar la documentación oficial y aprovechar cualquier oportunidad para optimizar procesos, mejorar la eficiencia y reforzar la seguridad.
En próximos tutoriales profundizaremos en temas como:
- Optimización avanzada de monorepositorios de módulos.
- Uso de Atlantis para gestión automática de PRs y despliegues en Terraform/Terragrunt.
- Buenas prácticas de seguridad en despliegues de infraestructura.
Recuerda: Cada pequeño ajuste suma en la construcción de un sistema más robusto, eficiente y mantenible.
9. Referencias bibliográficas
- Documentación oficial de Terragrunt sobre la caché:
https://terragrunt.gruntwork.io/docs/reference/terragrunt-cache/
Información oficial sobre la caché de Terragrunt.