jorge alarcon
Jorge Iván Rivera Montaño
Julián Agudelo
Cuando despliegas una arquitectura completa en la nube, tu script de Terraform puede crecer hasta 2.000 líneas de código y volverse imposible de navegar. La solución es fragmentar ese archivo en módulos de Terraform, una práctica que funciona igual que las clases en programación: encapsulas código funcional y lo invocas desde un archivo principal.
¿Qué son los módulos en Terraform y por qué usarlos?
Un módulo es una carpeta con archivos .tf que agrupa recursos relacionados para reutilizarlos desde un script principal. La ventaja es directa: divides un archivo gigante en piezas pequeñas, mantenibles y reutilizables.
¿Qué es un módulo en Terraform? Es una carpeta que contiene recursos agrupados por función (red, seguridad, cómputo) y se invoca desde un
main.tfprincipal usando variables de entrada y salidas.
En el ejercicio se parte de una máquina virtual ya desplegada con grupo de recursos, red virtual, subred, IP pública, grupo de seguridad de red, tarjeta de red y la VM. La idea es agrupar esos recursos en módulos según su responsabilidad.
¿Cómo decido qué recursos agrupar en cada módulo?
No existe una regla rígida sobre cómo separar recursos, pero sí un criterio práctico: agrupa por dominio funcional. En el ejemplo se crean tres carpetas dentro de Módulos [00:54]:
VNet para la red virtual, la subred y la IP pública.NSG para el grupo de seguridad de red.VM para la tarjeta de red, su asociación con el NSG y la máquina virtual.Podrías meter el NSG dentro de VNet, pero separarlo te da más control y muestra cómo conectar módulos entre sí.
¿Qué archivos necesita cada módulo en Terraform?
Cada carpeta de módulo necesita tres archivos básicos [02:30]:
main.tf con los recursos del módulo.variables.tf con las variables de entrada que el módulo recibe.output.tf con los valores que el módulo devuelve al script principal.Una práctica útil es nombrar el archivo en singular output.tf dentro de cada módulo y dejar outputs.tf en plural para el archivo general. Esa diferencia visual te ayuda a saber en qué nivel del proyecto estás trabajando.
¿Por qué separar variables.tf y output.tf en cada módulo? Porque un módulo es una caja negra: recibe datos por
variables.tfy entrega resultados poroutput.tf. Sin esa separación, no podrías reutilizarlo.
¿Cómo refactorizo el main principal hacia los módulos?
El proceso consiste en mover bloques desde el main.tf principal hacia el main.tf de cada módulo. En el ejemplo:
virtual_network, subnet y public_ip se cortan y pegan en VNet/main.tf.network_security_group se mueve a NSG/main.tf.VM/main.tf.En el main.tf principal queda únicamente el grupo de recursos, que sirve como punto de partida para todo lo demás.
¿Cómo conecto las variables entre módulos en Terraform?
Al mover los recursos, los módulos pierden acceso directo a valores como location o resource_group_name. Esos valores deben convertirse en variables de entrada usando la sintaxis var.nombre_variable.
En el módulo NSG, por ejemplo, se reemplaza la ubicación heredada por var.location y se declara esa variable en NSG/variables.tf junto con resource_group_name. El mismo patrón se aplica al módulo VNet [06:25].
¿Las variables del módulo deben llamarse igual que las del proyecto principal?
No es obligatorio. Podrías declarar nsg_location o nsg_resource_group dentro del módulo y funcionaría igual. Por economía de tiempo y claridad, suele convenir mantener los mismos nombres entre el módulo y el archivo principal.
¿Cómo paso un valor de un módulo a otro? Declaras un
outputen el módulo origen y lo recibes comovariableen el módulo destino, conectándolos desde elmain.tfprincipal.
¿Cómo manejo dependencias entre módulos como subnet_id o nsg_id?
El módulo VM necesita información que producen otros módulos: el ID de la subred, el ID de la IP pública y el ID del grupo de seguridad. Para resolverlo se crean tres variables nuevas en VM/variables.tf:
subnet_id de tipo string.public_ip_address_id de tipo string.nsg_id de tipo string.Luego, dentro de VM/main.tf, los valores fijos se reemplazan por var.subnet_id, var.public_ip_address_id y var.nsg_id. La recomendación es usar nombres de variables largos pero explícitos para que el código se lea solo.
¿Cómo me ubico entre tantos archivos main.tf y variables.tf?
Una ayuda visual fundamental viene de Visual Studio Code: las pestañas muestran la ruta completa del archivo. Verás variables.tf — Módulos o variables.tf — Módulos/VM, lo que evita que confundas el archivo de variables principal con el de un módulo cuando trabajas con varios abiertos a la vez.
Esta guía visual es fundamental para no equivocarte en Terraform, sobre todo cuando refactorizas decenas de bloques entre carpetas.
Con los tres módulos funcionando de manera fragmentada, el siguiente paso es enlazar las variables recién creadas desde el main.tf principal para que todo el despliegue se ejecute como un solo flujo. ¿Ya intentaste modularizar un proyecto propio? Cuéntame en los comentarios qué criterio usaste para separar tus carpetas.
jorge alarcon
Jorge Iván Rivera Montaño
Julián Agudelo
Javier Reyes
Cristian Alvis
Maria Alejandra Castillo
Maria Alejandra Castillo
muy buen curso, sin embargo no veo gente por aquí 🤣🤣🤣
Es que esta enfocado en azure :( , aunque el azure tiene 20% del mercado la mayoría usamos AWS (30%). Esta muy bueno pero por mi parte estoy haciendolo en AWS , es incomodo .. pero efectivo al final.
Estoy de acuerdo con Jorge, deberían sacar una versión con AWS
De los mejores cursos que he tomado en platzi hasta ahora
🤓🤓🤓🤓
Aqui pueden ver toda la informacion relacionada con el curso, lo tengo recopilado en notion,
Es de los mejores cursos que hay aqui!