Terraform 33: Terraform Módulos 1: Usar un módulo
easy⏱ 5 mincourseterraform
Invocar un módulo
Un bloque module envuelve otra configuración. source indica dónde vive; cada otro argumento es una variable de entrada que el módulo declara. Terraform trata al módulo como un nodo del grafo — plan/apply fluyen a través de él como con cualquier recurso.
module "orders_fn" {
source = "./modules/function-app"
# inputs the module declares as variables
app_name = "orders"
environment_name = "dev"
location = "westus2"
subnet_id = azurerm_subnet.apps.id
}
Leé outputs con module.<name>.<output>
Un módulo solo expone lo que declara como outputs. Desde el que lo invoca los referenciás como module.orders_fn.function_id — no podés alcanzar un recurso interno directamente. Los outputs son la API pública del módulo.
# The module declares: output "function_id" { value = azurerm_linux_function_app.fn.id }
# The caller consumes it:
resource "azurerm_role_assignment" "reader" {
scope = module.orders_fn.function_id
role_definition_name = "Reader"
principal_id = var.pipeline_object_id
}
terraform init descarga módulos
Después de agregar o cambiar un bloque module tenés que correr terraform init de nuevo — ahí Terraform baja/enlaza el módulo en .terraform/modules. Si lo olvidás, plan falla con Module not installed.
Armá una referencia a un output de módulo
Escribí moduleOutputRef(moduleName, output) que devuelva la referencia del lado del invocador module.<moduleName>.<output>. Logueá moduleOutputRef("orders_fn", "function_id") — debe imprimir module.orders_fn.function_id.