Terraform 14: Valores de salida (outputs)
easy⏱ 5 mincourseterraform
Declarar outputs
Un bloque output tiene un value (cualquier expresión, normalmente un atributo de un recurso) y una description opcional. Después de terraform apply, los outputs se imprimen en consola y se consultan con terraform output <name> — ideal para conectar pipelines.
# outputs.tf
output "resource_group_id" {
value = azurerm_resource_group.app.id
description = "ID of the created resource group."
}
output "resource_group_name" {
value = azurerm_resource_group.app.name
}
sensitive = true oculta valores en la salida
Marcá los outputs con secretos con sensitive = true. Entonces Terraform imprime <sensitive> en vez del valor en los logs de plan/apply (igual queda en el state, así que protegé el state también). Cualquier output que referencie un valor sensible también debe marcarse sensible, o Terraform da error.
output "kv_uri" {
value = azurerm_key_vault.main.vault_uri
}
output "admin_connection_string" {
value = azurerm_key_vault_secret.conn.value
sensitive = true # printed as <sensitive> in the CLI
}
Los outputs son la API pública de un módulo
Cuando llamás a un módulo hijo, lo único que el padre puede leer de vuelta son los outputs de ese módulo (accedidos como module.<name>.<output>). Así que diseñá los outputs con cuidado — son el contrato del que depende el resto del código.
Ocultá outputs sensibles
Dado un arreglo outputs donde cada item es { name, value, sensitive }, escribí printable(outputs) que devuelva un nuevo arreglo de { name, value } donde toda entrada sensitive: true tenga su valor reemplazado por el string "<sensitive>". Logueá JSON.stringify(printable(outputs)) — el valor del secreto debe quedar oculto, el no-secreto intacto.