Terraform 12: Variables de entrada (type, default, description, validation)
easy⏱ 5 mincourseterraform
Declarar una variable
Un bloque variable le da a un valor un nombre, una restricción de tipo, un default opcional y una descripción. Referencialo en cualquier lado como var.<name>. Sin default, la variable es obligatoria — Terraform la pide (o falla en CI) hasta que se la proporcionás.
# variables.tf
variable "environment" {
type = string
description = "Deployment environment (dev, uat, or prod)."
# No default => required. The caller must supply it.
}
variable "location" {
type = string
default = "westus2"
description = "Azure region for all resources."
}
variable "instance_count" {
type = number
default = 1
description = "How many app instances to run."
}
# Using them
resource "azurerm_resource_group" "app" {
name = "myorg-orders-${var.environment}-rg"
location = var.location
}
Tipos: primitivos y complejos
Los tipos de Terraform son primitivos (string, number, bool) y complejos (list(...), set(...), map(...), object({...}), tuple([...])). Un object tipado es ideal para agrupar ajustes relacionados y que quien llama no se olvide un campo.
variable "tags" {
type = map(string)
default = { team = "platform", cost_center = "1000" }
}
variable "app" {
type = object({
name = string
replicas = number
public = bool
})
default = {
name = "orders"
replicas = 2
public = false
}
}
Los bloques validation fallan temprano
Un bloque validation evalúa una condition y, si es false, aborta con tu error_message — antes de tocar cualquier recurso. Usalo para forzar listas permitidas y formatos. contains([...], var.x) es el chequeo clásico de lista permitida.
variable "environment" {
type = string
description = "Deployment environment."
validation {
condition = contains(["dev", "uat", "prod"], var.environment)
error_message = "environment must be one of: dev, uat, prod."
}
}
variable "instance_count" {
type = number
default = 1
validation {
condition = var.instance_count >= 1 && var.instance_count <= 10
error_message = "instance_count must be between 1 and 10."
}
}
Modelá una variable validada
Reflejá el HCL de arriba en TypeScript. Creá un objeto environment con type: "string", un arreglo allowed ["dev", "uat", "prod"] y un método isValid(value) que devuelva un booleano (el chequeo contains(...)). Logueá environment.isValid("prod") (debe ser true) y environment.isValid("staging") (debe ser false).