Terraform 16: Data sources — leer infraestructura existente
easy⏱ 5 mincourseterraform
data vs resource
data "<type>" "<name>" hace una búsqueda de solo lectura durante el plan. Terraform nunca modifica ni destruye lo que referencia un data source — solo obtiene atributos que podés usar en otro lado como data.<type>.<name>.<attr>. Usalo para referenciar infra compartida que no poseés.
# Look up an EXISTING Key Vault by name (someone else created it).
data "azurerm_key_vault" "shared" {
name = "orders-kv-dev"
resource_group_name = "myorg-orders-dev-rg"
}
# Now use its attributes elsewhere:
output "kv_id" { value = data.azurerm_key_vault.shared.id }
output "kv_uri" { value = data.azurerm_key_vault.shared.vault_uri }
Leer un secreto de un Key Vault existente
Un patrón común: buscar un Key Vault con un data source y después leer un secreto de él con otro data source. Pasás el id del vault del primer data source al segundo — nunca hardcodees el valor del secreto en HCL.
data "azurerm_key_vault" "shared" {
name = "orders-kv-dev"
resource_group_name = "myorg-orders-dev-rg"
}
data "azurerm_key_vault_secret" "db_password" {
name = "orders-db-password"
key_vault_id = data.azurerm_key_vault.shared.id
}
# Reference the value where a secret is needed (marked sensitive downstream):
# data.azurerm_key_vault_secret.db_password.value
Un data source que no existe hace fallar el plan
Si el objetivo de un data source no existe, Terraform da error durante el plan ("no se encontró el recurso"). Es una característica — significa que tu config depende de infraestructura real y presente. A diferencia de un resource, un bloque data nunca va a crear la cosa por vos.
Simulá la búsqueda de un data source de Key Vault
Te damos existingVaults, un mapa de name -> id. Escribí lookupKeyVault(name) que devuelva el id si el vault existe, o que lance Error("no key vault found: <name>") si no (un data source falla el plan cuando su objetivo no existe). Logueá lookupKeyVault("orders-kv-dev") y después, en un try/catch, logueá el mensaje de error de lookupKeyVault("ghost-kv").