Terraform 18: Funciones integradas y expresiones
easy⏱ 5 mincourseterraform
Las expresiones calculan valores
Donde HCL espera un valor podés escribir una expresión: una referencia, un operador o una llamada a función. Las funciones son puras — mismos argumentos, mismo resultado, sin efectos secundarios. Las componés para derivar nombres y ajustes a partir de pocos inputs y no repetir nada a mano.
locals {
org = "myorg"
service = "orders"
environment = "dev"
# format("%s-%s-%s", ...) builds a printf-style string
name_prefix = format("%s-%s-%s", local.org, local.service, local.environment)
# join(sep, list) glues a list with a separator -> "orders,billing"
csv_scopes = join(",", ["orders", "billing"])
}
resource "azurerm_resource_group" "main" {
name = format("%s-rg", local.name_prefix) # myorg-orders-dev-rg
location = "westus2"
}
lookup, merge y coalesce
lookup(map, key, default) lee un mapa con un valor por defecto, así una clave ausente nunca rompe el plan. merge(a, b, ...) combina mapas superficialmente, ganando las claves posteriores — el idioma para superponer tags base con tags por recurso. coalesce(a, b, ...) devuelve el primer argumento no nulo / no vacío — ideal para "usá el override, si no el default".
locals {
base_tags = {
managed_by = "terraform"
org = "myorg"
}
# per-service SKUs; lookup falls back to "Standard" if service is absent
skus = { orders = "Premium", billing = "Standard" }
orders_sku = lookup(local.skus, "orders", "Standard")
}
resource "azurerm_storage_account" "tfstate" {
name = "myorgtfstatedev"
resource_group_name = azurerm_resource_group.main.name
location = "westus2"
account_tier = "Standard"
account_replication_type = coalesce(var.replication, "LRS") # override or LRS
# base tags + a per-resource tag; "tier" is added, base keys preserved
tags = merge(local.base_tags, { tier = "state" })
}
Las funciones son toda la caja de herramientas
No podés definir tus propias funciones en Terraform — componés las integradas. Repasá las categorías una vez: string (format, join, split, replace), colección (merge, lookup, concat, flatten) y codificación (jsonencode, base64encode). Experimentá en terraform console — evalúa cualquier expresión al instante.
Componé format + coalesce en TypeScript
Implementá coalesce(...args) que devuelva el primer valor que no sea null, undefined ni "". Después escribí resourceName(org, service, env, type) que devuelva "{org}-{service}-{env}-{type}". Construí un nombre para org myorg, service orders, env coalesce(undefined, "dev"), type rg, y logueá el resultado (esperado myorg-orders-dev-rg).