Terraform 10: Argumentos vs atributos y referencias entre recursos
easy⏱ 5 mincourseterraform
Argumentos que definís, atributos que leés
Los argumentos son valores que asignás (name, location). Los atributos son valores que el proveedor expone después de (o durante) la creación — algunos también los definís, pero muchos son calculados, como el id de un recurso. Solo podés referenciar un atributo después de declarar el recurso que lo produce; la sintaxis es TIPO.NOMBRELOCAL.ATRIBUTO.
resource "azurerm_resource_group" "orders" {
name = "myorg-orders-dev-rg" # argument (you set)
location = "westus2" # argument (you set)
}
# After apply, azurerm_resource_group.orders exposes:
# .id → computed attribute (the full Azure resource ID)
# .name → "myorg-orders-dev-rg"
# .location → "westus2"
Referenciar un atributo en otro recurso
En vez de reescribir el nombre y la ubicación del resource group en cada recurso hijo, referencialos. Una storage account lee azurerm_resource_group.orders.name y .location — así, si el grupo cambia, los dependientes se actualizan solos y quedan consistentes.
resource "azurerm_storage_account" "orders" {
name = "myorgordersdev"
resource_group_name = azurerm_resource_group.orders.name
location = azurerm_resource_group.orders.location
account_tier = "Standard"
account_replication_type = "LRS"
}
Las referencias son expresiones sin comillas
azurerm_resource_group.orders.name es una expresión, no un string — escribila sin comillas. Para incrustarla dentro de un string más grande, usá interpolación: "${azurerm_resource_group.orders.name}-data". Poner comillas a toda la referencia la convierte en un literal que nunca se resolverá.
Resolvé una referencia entre recursos
Modelá un resource group como { type: "azurerm_resource_group", name: "orders", attributes: { name, location } }. Escribí resolveRef(rg, path) donde path sea como "azurerm_resource_group.orders.location"; devuelve el valor del atributo. Logueá resolveRef(rg, "azurerm_resource_group.orders.location") — debe imprimir westus2.