Recorte localizado
Módulos Terraform: contratos, composição e evolução segura
Como desenhar inputs, outputs e dependências de provider para reutilizar infraestrutura sem transformar o módulo em uma caixa-preta.
Um módulo é uma fronteira contratual
Inputs expressam decisões permitidas, recursos implementam invariantes e outputs publicam apenas o que outro componente necessita. Extrair uma pasta não cria automaticamente uma abstração útil: o contrato deve reduzir acoplamento sem esconder escolhas operacionais importantes.
Componha módulos pequenos no root module
Terraform favorece composição explícita, não herança. O root module conecta rede, identidade e workloads passando outputs para inputs. Child modules devem declarar providers necessários e receber configurações do nível superior, evitando credenciais, aliases ou regiões implícitas difíceis de testar.
- Modele objetos coesos em vez de uma opção para cada recurso possível.
- Mantenha ownership, lifecycle e limites de estado visíveis na composição.
Versione o contrato e teste a migração
Renomear recursos, tipos de variáveis ou outputs pode quebrar endereços de estado e consumidores. Use constraints, changelog, moved blocks e testes para demonstrar compatibilidade. Uma release maior deve explicar o caminho de migração, não apenas anunciar que existem breaking changes.
Referências
[1]
Terraform module developmentDocumentação oficial sobre estrutura, composição e publicação de módulos.
[2]
OpenTofu module developmentContrato equivalente no OpenTofu para módulos reutilizáveis e providers.