Usamos o Terraform extensivamente para criar e gerenciar infraestrutura em nuvem. Em nossa experiência com configurações maiores, nas quais o código é dividido em módulos que são incluídos de maneiras diferentes, os times acabam se deparando com uma parede de repetição inevitável causada por falta de flexibilidade. Lidamos com esse problema usando Terragrunt, um wrapper fino para Terraform que implementa as práticas defendidas por Yevgeniy Brikman em Terraform: Up and Running. Consideramos o Terragrunt útil por encorajar módulos versionados e reutilização para diferentes ambientes. Os ganchos de ciclo de vida são outro recurso útil que fornece flexibilidade adicional. Em termos de empacotamento, o Terragrunt tem as mesmas limitações do Terraform: não há uma maneira adequada de definir pacotes ou dependências entre pacotes. Como solução alternativa, você pode usar módulos e especificar uma versão associada a uma tag 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.