Ha arribat el moment d’escriure Terraform de veritat. El llenguatge s’anomena HCL (HashiCorp Configuration Language) i s’organitza en blocs. En aquest subcapítol coneixeràs els quatre blocs més importants que utilitzaràs constantment: resource, variable, output i locals. Amb ells ja pots descriure infraestructura real.

Com es veu HCL

El codi de Terraform s’escriu en fitxers amb extensió .tf. Tot en HCL s’estructura en blocs, que tenen aquesta forma general:

tipus_de_bloc "etiqueta1" "etiqueta2" {
  argument = valor
  altre_argument = altre_valor
}

No et preocupis per la sintaxi exacta ara; la veuràs amb exemples. L’important: HCL és llegible, semblant a omplir una fitxa amb dades. Anem amb els quatre blocs clau.

  1. resource: el que vols crear

El bloc resource és el més important de tots. Descriu un recurs d’infraestructura que vols que existeixi: un servidor, una xarxa, un bucket…

resource "aws_instance" "el_meu_servidor" {
  ami           = "ami-0c1234567890abcde"
  instance_type = "t3.micro"
}

Desglossem:

  • resource → el tipus de bloc.
  • "aws_instance" → el tipus de recurs (una instància EC2 d’AWS). El prefix aws_ indica que és d’AWS.
  • "el_meu_servidor" → el nom que TU li poses per referir-t’hi dins el teu codi (no és el nom a AWS, és una etiqueta interna).
  • Dins de { } → els arguments que configuren el recurs (quina AMI utilitzar, quin tipus d’instància… recordes el Capítol 4?).

Analogia: Un bloc resource és com omplir el formulari de comanda d’un recurs: «vull una instància, de tipus t3.micro, amb aquesta imatge». Terraform llegeix el formulari i el crea per tu.

Cada recurs d’AWS que vas veure a la Part II (EC2, S3, VPC…) té el seu tipus de resource a Terraform: aws_instance, aws_s3_bucket, aws_vpc, etc.

  1. variable: valors que entren des de fora

El bloc variable defineix valors configurables que pots canviar sense tocar la resta del codi. Són com els «paràmetres» de la teva configuració.

variable "tipus_instancia" {
  description = "El tipus d’instància EC2 a utilitzar"
  type        = string
  default     = "t3.micro"
}

Després utilitzes aquesta variable als teus recursos amb la sintaxi var.nom:

resource "aws_instance" "el_meu_servidor" {
  ami           = "ami-0c1234567890abcde"
  instance_type = var.tipus_instancia   # ← utilitza la variable
}

Per què són útils: Les variables fan el teu codi reutilitzable i flexible. Per exemple, pots utilitzar t3.micro en proves i m5.large en producció canviant només el valor de la variable, sense tocar la definició del servidor. Ho veurem més al Capítol 19 (entorns).

Analogia: Les variables són com els ajustos configurables d’un electrodomèstic. La rentadora és la mateixa, però ajustes la temperatura i el programa segons la bugada. El teu codi és el mateix, però ajustes les variables segons l’entorn.

  1. output: informació que vols veure

El bloc output mostra informació útil després d’aplicar la teva configuració. Serveix per «treure» dades que necessites saber, com la IP d’un servidor o la URL d’una web.

output "ip_publica" {
  description = "La IP pública del servidor"
  value       = aws_instance.el_meu_servidor.public_ip
}

Quan executes terraform apply, al final veuràs:

Outputs:
ip_publica = "54.123.45.67"

Per què són útils: Després de crear infraestructura, necessites saber dades com «quina és la IP del meu servidor?» o «quina és l’adreça de la meva base de dades?». Els outputs te’ls mostren automàticament, sense haver-los de buscar a la consola d’AWS. També serveixen per passar informació entre mòduls (Capítol 18).

Analogia: Els outputs són com el rebut o resum que et donen al final: «aquí tens les dades importants del que acabes de crear».

  1. locals: valors calculats i reutilitzables

El bloc locals defineix valors interns reutilitzables dins del teu codi. A diferència de les variables (que entren des de fora), els locals són valors que defineixes i calcules dins de la teva configuració.

locals {
  nom_projecte = "botiga-online"
  entorn       = "produccio"
  nom_complet  = "${local.nom_projecte}-${local.entorn}"
}

I els utilitzes amb local.nom:

resource "aws_instance" "el_meu_servidor" {
  ami           = "ami-0c1234567890abcde"
  instance_type = "t3.micro"
  tags = {
    Name = local.nom_complet   # → "botiga-online-produccio"
  }
}

Quan utilitzar-los: per evitar repetir valors o càlculs. Si utilitzes el mateix nom o la mateixa combinació de valors a molts llocs, ho defineixes un cop a locals i ho reutilitzes. Si canvia, ho canvies en un sol lloc.

Variable vs Local — la diferència clau:

  • variable: entra des de fora (la configura qui utilitza el codi). «Paràmetre d’entrada».
  • local: es defineix i calcula dins del codi. «Valor intern reutilitzable».

Resum dels quatre blocs

Bloc Per a què Com es referencia
resource Crear infraestructura (el més important) aws_instance.el_meu_servidor
variable Valors configurables des de fora var.nom
output Mostrar informació després d’aplicar (es veu al final de l’apply)
locals Valors interns reutilitzables local.nom

Un exemple que ho ajunta tot

variable "entorn" {
  type    = string
  default = "dev"
}

locals {
  nom = "mevaapp-${var.entorn}"
}

resource "aws_instance" "web" {
  ami           = "ami-0c1234567890abcde"
  instance_type = "t3.micro"
  tags = {
    Name = local.nom
  }
}

output "ip_publica" {
  value = aws_instance.web.public_ip
}

Aquest codi: pren un entorn com a variable, calcula un nom amb un local, crea un servidor etiquetat amb aquest nom, i mostra la seva IP com a output. Ja estàs llegint Terraform!

El que has de recordar

  • HCL s’organitza en blocs, escrits en fitxers .tf.
  • resource: el bloc més important; descriu la infraestructura que vols crear (servidors, xarxes, buckets…).
  • variable: valors configurables que entren des de fora; s’utilitzen amb var.nom. Fan el codi reutilitzable.
  • output: mostra informació útil després de apply (IPs, URLs…); s’utilitza amb la referència al recurs.
  • locals: valors interns reutilitzables que defineixes dins del codi; s’utilitzen amb local.nom.
  • Diferència clau: variable = entra de fora; local = es calcula dins.

Al següent subcapítol veurem els tipus de dades d’HCL (string, number, list, map, object…) per donar forma a les teves variables i valors.

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