Terraform 36: Terraform Módulos 4: Desplegar muchos con for_each
easy⏱ 5 mincourseterraform
for_each sobre un mapa de configs
Dale a for_each un mapa indexado por un identificador estable. Dentro del bloque, each.key es la clave del mapa y each.value es el objeto de esa entrada. Un bloque, muchas instancias — agregá un servicio al mapa y el próximo apply lo crea.
locals {
services = {
orders = { sku = "P1v3" }
billing = { sku = "P1v3" }
notifications = { sku = "B1" }
}
}
module "app" {
source = "./modules/function-app"
for_each = local.services
app_name = each.key
service_plan_sku = each.value.sku
environment_name = "dev"
}
La dirección de instancia es module.<name>["<key>"]
Con for_each, module.app se vuelve un mapa de instancias. Referenciá una como module.app["orders"].function_id. La clave del mapa — no un índice numérico — es la identidad estable, así que quitar notifications nunca perturba a orders en el state.
Preferí for_each sobre count para cosas con nombre
count indexa por posición (module.app[0]), así que borrar el ítem del medio renumera y recrea todo lo que sigue. Para recursos con nombre, for_each sobre un mapa mantiene identidades estables. Usá count solo para copias realmente intercambiables.
Calculá las direcciones de instancia
Dados los nombres de servicio de un mapa for_each, escribí moduleInstanceAddresses(names) que devuelva module.app["<name>"] para cada uno. Logueá JSON.stringify(moduleInstanceAddresses(["orders", "billing", "notifications"])) — la primera entrada debe ser module.app["orders"].