Hemos usado Terraform extensivamente para crear y manejar infraestructuras en la nube. En nuestra experiencia con instalaciones más grandes, donde el código se encuentra dividido en módulos y las configuraciones se incluyen de diferentes maneras, los equipos eventualmente se tropiezan con un muro inevitable de repetición ocasionado por la falta de flexibilidad. Hemos resuelto esto utilizando Terragrunt, una delgada capa para Terraform que implementa las prácticas propuestas por Yevgeniy Brikman en su libro Terraform: Up and Running. Hemos encontrado útil a Terragrunt porque fomenta la creación de módulos versionados y la reutilización para distintos entornos. Los hooks para el ciclo de vida son otra funcionalidad útil que entrega flexibilidad adicional. En términos de empaquetado, Terragrunt tiene las mismas limitaciones que Terraform: no hay una forma apropiada para definir paquetes o dependencias entre paquetes. Como alternativa, puedes utilizar módulos y versiones específicas asociadas a una etiqueta de Git.
We widely use Terraform as code to configure a cloud infrastructure. Terragrunt is a thin wrapper for Terraform that implements the practices advocated by the Terraform: Up and Running book. We've found Terragrunt helpful as it encourages versioned modules and reusability for different environments with some handy features, including recursive code execution in subdirectories. We'd like to see the tool evolve to support CD practices natively, where all code can be packaged, versioned and reused across different environments on CD pipelines. Our team achieves this today with workarounds.