Arribem a un dels conceptes més característics —i al principi confusos— de Terraform: l’estat (state). És el que fa que Terraform sigui idempotent i intel·ligent, però també una de les coses que més problemes causa si no s’entén bé. Anem a desmitificar-lo completament.

El problema que resol l’estat

Recorda l’enfoc declaratiu (subcapítol 9.2): tu declares el que vols i Terraform fa que la realitat coincideixi. Però per això, Terraform necessita respondre una pregunta crucial:

«Què he creat ja, i què falta o sobra?»

Sense una resposta, Terraform no sabria si ha de crear un recurs nou, modificar-ne un d’existent o no fer res. Necessita recordar quins recursos gestiona i quin és el seu estat actual. Aquesta memòria és el fitxer d’estat.

Què és el fitxer d’estat

L’estat és un arxiu (per defecte anomenat terraform.tfstate) on Terraform registra tots els recursos que gestiona i la seva informació: què ha creat, amb quins IDs, amb quina configuració.

Analogia: L’estat és l’inventari de Terraform. És com la llibreta on un magatzemer apunta tot el que té: «tinc 3 servidors amb aquests IDs, 1 bucket anomenat així, 2 subxarxes amb aquests rangs…». Sense aquesta llibreta, no sabria què hi ha ni què ha canviat.

L’arxiu està en format JSON i mapatgeja el que has escrit al teu codi amb els recursos reals a AWS:

El teu codi:         Estat (tfstate):           Realitat a AWS:
aws_instance.web  ←→  id = "i-0abc123..."    ←→  [Instància real i-0abc123]

Com utilitza Terraform l’estat

Cada vegada que executes plan o apply, Terraform:

  1. Llegeix l’estat per saber què creu que existeix.
  2. Consulta la realitat a AWS (què hi ha de veritat).
  3. Compara les tres coses: el teu codi (el desitjat), l’estat (el que creu que hi ha) i la realitat (el que hi ha).
  4. Calcula les diferències i decideix què crear, modificar o destruir.
   El teu codi .tf ──┐
   (el desitjat)     │
                     ▼
   Estat tfstate ────► COMPARA ──► Pla de canvis
   (el registrat)    ▲
                     │
   Realitat AWS ─────┘
   (el que existeix)

Per això l’estat és essencial: és la referència que permet a Terraform detectar canvis i ser idempotent.

Per què l’estat és tan important (i delicat)

L’estat no és un arxiu qualsevol. Té diverses propietats crítiques:

  1. És la font de veritat de Terraform

Terraform confia en l’estat per saber què gestiona. Si l’estat es perd o es corromp, Terraform «s’oblida» dels recursos que ha creat i pot comportar-se de manera perillosa (intentar recrear coses, o deixar recursos orfes que segueixen costant diners).

  1. Conté dades sensibles ⚠️

L’estat pot incloure informació sensible en text pla: contrasenyes de bases de dades, claus, dades privades de recursos. Per això:

⚠️ Regles de seguretat de l’estat:

  • MAI pugis el terraform.tfstate a un repositori Git públic (ni privat sense xifrar). Podries filtrar secrets.
  • Afegeix terraform.tfstate i *.tfstate.* al teu .gitignore sempre.
  • Per a equips, desa l’estat en un backend remot xifrat (subcapítol 11.3).

  1. No s’edita a mà

El fitxer d’estat no s’ha de modificar manualment. Està pensat perquè Terraform el gestioni. Editar-lo a mà pot corrompre’l. Si necessites manipular-lo, hi ha ordres específiques (com terraform state mv, terraform state rm) fetes per a això.

L’estat i el «drift»

L’estat també ajuda a detectar el drift (recorda el Capítol 9): si algú canvia alguna cosa manualment a la consola d’AWS, la realitat ja no coincideix amb l’estat. La propera vegada que executis plan, Terraform ho detectarà i t’avisarà:

«Ei, aquest recurs ha canviat fora de Terraform. El teu codi diu una cosa, però la realitat n’és una altra.»

Això et permet reconciliar la situació: o ajustes el teu codi, o deixes que Terraform torni el recurs a l’estat declarat. És un dels grans avantatges de tenir un estat.

Ordres útils relacionades amb l’estat

Perquè sàpigues que existeixen (els faràs servir més endavant):

Ordre Per a què
terraform state list Veure tots els recursos que Terraform gestiona
terraform state show <recurs> Veure els detalls d’un recurs a l’estat
terraform refresh Actualitzar l’estat amb la realitat d’AWS
terraform state rm Treure un recurs de l’estat (sense destruir-lo)
terraform import Portar un recurs existent a l’estat (Capítol 20)

El que has de recordar

  • L’estat (terraform.tfstate) és l’inventari on Terraform registra els recursos que gestiona i la seva informació.
  • És essencial perquè Terraform compari el desitjat (codi), el registrat (estat) i el real (AWS), i així calcular els canvis. És la base de la idempotència.
  • És delicat: si es perd o es corromp, Terraform «s’oblida» dels teus recursos. Tracta’l amb cura.
  • Conté dades sensibles: mai el pugis a Git; afegeix-lo al .gitignore i, en equip, utilitza un backend remot xifrat.
  • No l’editis a mà: utilitza les ordres terraform state ... si necessites manipular-lo.
  • L’estat permet detectar el drift (canvis fets manualment fora de Terraform).

Al següent subcapítol veurem un tema clau per treballar en equip: l’estat local vs remot, i com desar-lo de manera segura i compartida amb S3 i DynamoDB.

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