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.

Estado de traducción: sourceIdioma fuente: Español

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. [1]

    Terraform module development

    Documentación oficial sobre estructura, composición y publicación de módulos.

  2. [2]

    OpenTofu module development

    Contrato equivalente en OpenTofu para módulos reutilizables y providers.