Terraform 4: Tipos de HCL — primitivos y colecciones
easy⏱ 5 mincourseterraform
Tipos primitivos
Los tres primitivos son string, number y bool. Un bloque variable declara un type y un default opcional. Las variables tipadas atrapan errores temprano — pasar "yes" donde se espera un bool falla en el plan, no a las 2am.
variable "service" {
type = string
default = "orders"
}
variable "instance_count" {
type = number
default = 2
}
variable "enable_https" {
type = bool
default = true
}
Tipos de colección: list, set, map, object
list(T) es ordenada y permite duplicados; set(T) es desordenada y única; map(T) es clave→valor de un mismo tipo; object({...}) es una forma fija con atributos nombrados y tipados individualmente. Los maps y objects son los caballos de batalla para config que varía por entorno.
variable "allowed_locations" {
type = list(string)
default = ["westus2", "eastus2"]
}
# Per-environment sizing — a map keyed by env name
variable "sku_per_env" {
type = map(string)
default = {
dev = "Standard_B1s"
uat = "Standard_B2s"
prod = "Standard_D2s_v5"
}
}
# A structured object with individually-typed attributes
variable "network" {
type = object({
address_space = list(string)
dns_servers = list(string)
enable_ddos = bool
})
default = {
address_space = ["10.0.0.0/16"]
dns_servers = ["10.0.0.4"]
enable_ddos = false
}
}
Buscá valores del mapa con el índice o lookup()
Leé un valor del mapa por clave con var.sku_per_env[var.env]. Si una clave podría faltar, lookup(var.sku_per_env, var.env, "Standard_B1s") da un default en vez de fallar. Este mapa + un índice es todo el patrón de 'config por entorno'.
locals {
# Pick the SKU for the current environment
sku = lookup(var.sku_per_env, var.env, "Standard_B1s")
}
Buscá config por entorno
Modelá skuPerEnv como Record<string, string> (dev, uat, prod). Escribí skuFor(env: string): string que devuelva el SKU, cayendo a "Standard_B1s" cuando falta la clave. Logueá skuFor("prod") y skuFor("sandbox").