Quan defineixes variables i valors a Terraform, cadascun té un tipus de dada: indica quina classe d’informació conté (un text, un número, una llista…). Conèixer els tipus t’ajuda a escriure codi correcte i a entendre els exemples que trobis. És un tema senzill i molt semblant als tipus de qualsevol llenguatge de programació.

Per què importen els tipus

Declarar el tipus d’una variable té dos avantatges:

  1. Claredat: qui llegeix el codi sap què espera cada variable.
  2. Validació: Terraform avisa si passes un valor del tipus equivocat (per exemple, un text on s’esperava un número), evitant errors.

Els tipus es divideixen en simples (un sol valor) i complexos (col·leccions de valors).

Tipus simples (primitus)

string — text

Qualsevol text, entre cometes dobles.

variable "region" {
  type    = string
  default = "eu-west-1"
}

Exemples de valors: "hola", "t3.micro", "eu-west-1".

number — números

Números, enters o decimals, sense cometes.

variable "quantitat_servidors" {
  type    = number
  default = 3
}

Exemples: 3, 0, 2.5, 100.

bool — vertader o fals

Un valor lògic: true (vertader) o false (fals). Útil per activar/desactivar coses.

variable "habilitar_monitoritzacio" {
  type    = bool
  default = true
}

Exemple d’ús: una variable bool pot decidir si es crea un recurs o no, o si s’activa una opció. Per exemple, «activar Multi-AZ a la base de dades? true/false».

Tipus complexos (col·leccions)

Aquests agrupen diversos valors. Són molt útils per a configuracions reals.

list — una llista ordenada de valors

Una seqüència de valors del mateix tipus, en ordre, entre claudàtors [ ].

variable "zones_disponibilitat" {
  type    = list(string)
  default = ["eu-west-1a", "eu-west-1b", "eu-west-1c"]
}

Això és una llista de textos. list(string) significa «una llista de strings». Accedeixes als seus elements per posició (començant a 0): el primer és var.zones_disponibilitat[0].

Exemple real: una llista de les zones de disponibilitat on vols desplegar (recorda el Capítol 3), o una llista de ports a obrir.

map — parells clau-valor

Una col·lecció de parelles «clau = valor», entre claus { }. Com un diccionari on busques un valor per la seva clau.

variable "tipus_per_entorn" {
  type = map(string)
  default = {
    dev  = "t3.micro"
    prod = "m5.large"
  }
}

Accedeixes a un valor per la seva clau: var.tipus_per_entorn["prod"] retorna "m5.large".

Exemple real: assignar una mida d’instància diferent a cada entorn, o un conjunt d’etiquetes (tags) per als teus recursos.

object — una estructura amb camps definits

Un objecte agrupa diversos valors de diferents tipus sota noms de camp concrets. És com una fitxa amb camps.

variable "config_servidor" {
  type = object({
    tipus      = string
    quantitat  = number
    monitoritzacio = bool
  })
  default = {
    tipus      = "t3.micro"
    quantitat  = 2
    monitoritzacio = true
  }
}

Accedeixes a un camp amb un punt: var.config_servidor.tipus retorna "t3.micro".

Diferència map vs object:

  • Un map té claus lliures i tots els valors del mateix tipus.
  • Un object té camps predefinits amb noms i tipus concrets (poden ser diferents entre si).

Taula resum

Tipus Què guarda Exemple
string Text "eu-west-1"
number Número 3, 2.5
bool Vertader/fals true
list Llista ordenada, mateix tipus ["a", "b", "c"]
map Parells clau-valor, mateix tipus { dev = "t3.micro" }
object Estructura amb camps definits { tipus = "x", num = 2 }

El tipus any i la inferència

  • Si no estàs segur del tipus, existeix any (accepta qualsevol tipus), però és millor ser específic quan puguis.
  • Si no declares el tipus, Terraform sovint el dedueix del valor per defecte. Tot i així, declarar el tipus és bona pràctica perquè documenta i valida.

Un exemple realista combinant tipus

variable "config_xarxa" {
  type = object({
    cidr        = string
    azs         = list(string)
    nat_actiu   = bool
    tags        = map(string)
  })
  default = {
    cidr       = "10.0.0.0/16"
    azs        = ["eu-west-1a", "eu-west-1b"]
    nat_actiu  = true
    tags = {
      Projecte = "botiga"
      Entorn   = "dev"
    }
  }
}

Aquí un sol objecte descriu tota la configuració d’una xarxa: el seu rang (string), les seves zones (list), si té NAT (bool) i les seves etiquetes (map). Això és molt semblant a com es configuren coses en projectes reals.

El que has de recordar

  • Cada valor a Terraform té un tipus. Declarar-lo aporta claredat i validació.
  • Tipus simples: string (text), number (números), bool (true/false).
  • Tipus complexos: list (llista ordenada del mateix tipus), map (parells clau-valor del mateix tipus), object (estructura amb camps definits de diferents tipus).
  • map vs object: el map té claus lliures i valors del mateix tipus; l’object té camps predefinits amb tipus concrets.
  • Declarar tipus és bona pràctica, encara que Terraform a vegades els dedueixi.

Al següent subcapítol veurem com treballar amb aquests valors mitjançant expressions, referències i funcions integrades de Terraform.

Cloud, AWS & Terraform — De zero a expert

Capítol 1 · Què és el cloud computing

Capítol 2 · El mercat cloud i els grans proveïdors

Capítol 3 · Regions, zones de disponibilitat i edge

Capítol 4 · Càlcul: EC2

Capítol 5 · Emmagatzematge: S3

Capítol 6 · Xarxes: VPC

Capítol 7 · Identitat i accés: IAM

Capítol 8 · Bases de dades gestionades

Capítol 9 · Per què Infraestructura com a Codi

Capítol 10 · HCL: el llenguatge de Terraform

Capítol 11 · Providers i estat

Capítol 12 · La teva primera infraestructura real amb Terraform

Capítol 13 · Balanceig de càrrega i autoescalat

Capítol 14 · Serverless amb Lambda

Capítol 15 · Missatgeria i esdeveniments

Capítol 16 · Lliurament de contingut i DNS

Capítol 17 · Contenidors a AWS

Capítol 18 · Mòduls: reutilització i composició

Capítol 19 · Workspaces i gestió d'entorns

Capítol 20 · Backends remots i locking

Capítol 21 · Testing d'infraestructura

Capítol 22 · Terraform en CI/CD

Capítol 23 · Seguretat en profunditat

Capítol 24 · Observabilitat: logs, mètriques i traces

Capítol 25 · Optimització de costos

Capítol 26 · Alta disponibilitat i disaster recovery

Capítol 27 · Well-Architected Framework d'AWS

Capítol 28 · Arquitectures serverless a escala

Capítol 29 · Plataformes de dades a AWS

Capítol 30 · Multi-compte i landing zones

Capítol 31 · Platform Engineering i Internal Developer Platform

Capítol 32 · Certificacions AWS rellevants

Capítol 33 · Projectes per consolidar el que s'ha après

Capítol 34 · Recursos i comunitat

© Copyright 2024. Tots els drets reservats