Terraform 19: El meta-argumento count y count.index
easy⏱ 5 mincourseterraform
count crea N copias
Poné count = <número> y Terraform crea esa cantidad de instancias del bloque. Cada instancia se direcciona por posición — azurerm_subnet.app[0], [1], … — y count.index (base 0) está disponible adentro para diferenciarlas, por ejemplo en un nombre.
variable "subnet_count" {
type = number
default = 3
}
resource "azurerm_subnet" "app" {
count = var.subnet_count
name = format("orders-app-subnet-%02d", count.index) # ...-00, -01, -02
resource_group_name = azurerm_resource_group.main.name
virtual_network_name = azurerm_virtual_network.main.name
address_prefixes = [cidrsubnet("10.0.0.0/16", 8, count.index)]
}
count = condición ? 1 : 0 enciende/apaga un recurso
Un idioma muy común: condicionar un recurso a un booleano dándole un count de 1 (crear) o 0 (omitir). El recurso sigue siendo una lista, así que referenciás la única instancia como resource.name[0] — normalmente vía one(...) o try(...) cuando puede no existir.
variable "enable_prod_alerts" {
type = bool
default = false
}
# Created only when the flag is true — 1 copy, else 0
resource "azurerm_monitor_action_group" "oncall" {
count = var.enable_prod_alerts ? 1 : 0
name = "orders-oncall-ag"
resource_group_name = azurerm_resource_group.main.name
short_name = "oncall"
}
count es posicional — reordenás y se recrea
Como las instancias se indexan por posición, quitar o reordenar un elemento corre todos los índices siguientes — Terraform destruirá y recreará recursos que solo "se movieron". Usá count para una cantidad homogénea de cosas; cuando los elementos tienen identidad estable (un map/set de nombres), preferí for_each (próxima lección).
Expandí un count en TypeScript
Escribí expandCount(baseName, count) que devuelva un array de count direcciones como "orders-app-subnet[0]", "[1]", … usando el índice. Llamala con "orders-app-subnet" y 3, y logueá JSON.stringify(result) (esperado 3 entradas terminando en [0], [1], [2]).