Corte localizado
Módulos Terraform: contratos, composición y evolución segura
Cómo diseñar inputs, outputs y dependencias de provider para reutilizar infraestructura sin convertir el módulo en una caja negra.
Un módulo es una frontera contractual
Inputs expresan decisiones permitidas, recursos implementan invariantes y outputs publican solo lo que otro componente necesita. Extraer una carpeta no crea por sí mismo una abstracción útil: el contrato debe reducir acoplamiento sin ocultar decisiones operativas importantes.
Compón módulos pequeños en el root module
Terraform favorece composición explícita, no herencia. El root module conecta redes, identidad y workloads pasando outputs a inputs. Los child modules deben declarar providers requeridos y recibir configuraciones desde arriba, evitando credenciales, aliases o regiones implícitas difíciles de probar.
- Modela objetos cohesionados, no una bandera por cada recurso posible.
- Mantén ownership, lifecycle y límites de estado visibles en la composición.
Versiona el contrato y prueba la migración
Cambiar nombres de recursos, tipos de variables o outputs puede romper direcciones de estado y consumidores. Usa constraints, changelog, moved blocks y tests para demostrar compatibilidad. Una release mayor debe explicar la ruta de migración, no limitarse a anunciar que hubo breaking changes.
Referencias
[1]
Terraform module developmentDocumentación oficial sobre estructura, composición y publicación de módulos.
[2]
OpenTofu module developmentContrato equivalente en OpenTofu para módulos reutilizables y providers.