Ya en un post previo mencioné como puedes usar módulos para hacer el despliegue de toda tu infraestructura. La cuestión vendrá cuando te des cuenta que ciertos módulos dependen de la creación de otros más. Esto puede ser un problema ¿no? Veamos un caso simple en Azure.
Si quieres crear una Web App es indispensable que tengas ya creado un App Service Plan, lo fácil sería que simplemente lo crearas antes y le pases el nombre, pero tú y yo sabemos que eso no es viable y no es la razón por la que estamos aquí, además, eso sería simple y aburrido.

Por otro lado, si creas dos módulos en una infraestructura de Terraform entonces las cosas se ponen buenas. ¿Cómo puedo pasarle el identificador del módulo del Service Plan al módulo de mi Web App? Es fácil, utilizando variables de salida o mejor dicho output.tf.

Comienza por crear dos carpetas, una para el plan y otra para la aplicación web. Dentro de la carpeta del plan, agrega después de main y variables, un archivo de output.tf.

En el archivo output.tf, debes poner todos los datos que desees extraer del elemento recién creado, en este caso puedes solo extraer el identificador.
output "service_plan_id" { value = azurerm_app_service_plan.service_plan.id } |
Como verás, la sintaxis del valor de salida es el nombre de la herramienta por crear, el nombre asignado en Terraform y la propiedad esperada. De esta manera estos datos pueden ser extraídos por el otro módulo PERO ÚNICAMENTE desde el archivo donde todos los nodos son invocados.
module "web_app" { source = "./modules/webApp" resource_group_name = azurerm_resource_group.rg.name location = var.location tag_env = var.tag_env app_name = var.app_name plan_id = module.app_service_plan.service_plan_id } |
Aquí puedes ver que se invoca al otro módulo, el del plan, se invoca por medio de la palabra module, el nombre del módulo y la propiedad extraída de la variable de salida.
Por último, algo súper importante, esto crea cierta secuencia, es decir, para poder crear la aplicación web es necesario tener la variable obtenida del plan así que esta herramienta no se creará hasta que el plan haya sido creado garantizando así que no vayas a tener un problema por no tener un plan y tratar de crear una web app en este escenario.