En el subcapítol anterior vam afegir una taula de DynamoDB al nostre backend «per al locking». Ara entendrem bé què és el state locking i per què és imprescindible quan diverses persones treballen sobre la mateixa infraestructura. És la peça que evita un dels pitjors desastres possibles amb Terraform: la corrupció de l’estat.

El problema: dues persones alhora

Recorda que l’estat (Capítol 11) és l’arxiu que registra quins recursos existeixen i com es relacionen. És la «font de la veritat» de Terraform. Ara imagina aquesta situació en un equip:

   L’Ana executa "terraform apply"    ┐
                                       ├─► al MATEIX temps sobre el MATEIX estat
   En Carles executa "terraform apply" ┘

Si ambdós modifiquen l’estat al mateix temps, els seus canvis es barregen i es corrompen. L’arxiu d’estat pot quedar inconsistent: registres a mitges, recursos duplicats, o un estat que ja no reflecteix la realitat. Un estat corrupte és un malson: Terraform perd la noció de què existeix, i arreglar-ho a mà és lent i perillós.

Analogia: és com dues persones editant el mateix document alhora sense coordinació, cadascuna guardant per sobre de l’altra. El resultat és un document destrossat on es perden canvis i res té sentit. Necessites que, mentre un edita, l’altre esperi el seu torn.

La solució: el state locking (bloqueig de l’estat)

El state locking (bloqueig de l’estat) resol això amb una regla senzilla: mentre algú està modificant l’estat, ningú més pot fer-ho alhora. Terraform posa un «cadenat» (lock) abans de començar a treballar i el treu en acabar.

   L’Ana executa apply  →  Terraform posa el CADENAT 🔒
                            (L’Ana treballa tranquil·la)
   En Carles executa apply →  "L’estat està bloquejat, espera..."
                            (En Carles espera)
   L’Ana acaba  →  Terraform treu el cadenat 🔓
   En Carles  →  ara sí, posa el seu cadenat i treballa

Així, les operacions es serialitzen: passen una darrere l’altra, mai alhora. L’estat mai es corromp per accessos simultanis.

Com funciona amb DynamoDB

Aquí entra la taula de DynamoDB que vam configurar al subcapítol 20.1. Funciona com el «porter del cadenat»:

  1. Quan algú executa apply (o plan), Terraform escriu un registre de bloqueig a la taula DynamoDB (a la clau LockID).
  2. Si una altra persona intenta executar Terraform, aquest comprova la taula, veu que ja hi ha un bloqueig actiu i espera (o avisa que està bloquejat).
  3. Quan el primer acaba, Terraform esborra el registre de bloqueig, alliberant el cadenat.
DynamoDB (taula de locks)
  LockID: "mi-estado"  →  ocupat per l’Ana des de les 10:32  🔒
                           (En Carles veu això i espera)

DynamoDB és ideal per això perquè garanteix operacions atòmiques i consistents: dues persones no poden «agafar el cadenat» alhora; només un guanya.

Què veus quan l’estat està bloquejat

Si intentes executar Terraform mentre una altra persona té el cadenat, veuràs un missatge semblant a aquest:

Error: Error acquiring the state lock

Lock Info:
  ID:        a1b2c3d4-...
  Who:       [email protected]
  Created:   2024-...

Això t’indica qui té el bloqueig i des de quan. No és un error «dolent»: és Terraform protegint-te. Simplement esperes que l’altra persona acabi i ho tornes a intentar.

El locking ocorre automàticament

La bona notícia: un cop configurat el backend amb DynamoDB (subcapítol 20.1), el locking funciona sol, sense que hagis de fer res. Terraform posa i treu el cadenat automàticament a cada operació. Tu simplement treballes amb normalitat, i el sistema et protegeix per darrere.

Quan un lock es queda «encallat»

Ocasionalment, un bloqueig pot quedar-se «enganxat»: per exemple, si la connexió d’algú es talla a mig apply, el cadenat podria no alliberar-se. En aquests casos rars, existeix el comandament terraform force-unlock per treure el cadenat manualment:

terraform force-unlock <ID-del-lock>

⚠️ Fes-lo servir amb moltíssima cura. Abans de forçar el desbloqueig, assegura’t que de veritat ningú està treballant sobre l’estat. Si forces el desbloqueig mentre una altra persona realment està aplicant canvis, tornes a arriscar-te a la corrupció que el locking pretenia evitar. Confirma sempre amb el teu equip primer.

Per què això és tan important

El state locking, juntament amb l’estat remot (subcapítol 20.1), és el que fa que Terraform sigui segur en equip. Sense ell, la col·laboració seria una bomba de rellotgeria: tard o d’hora dues persones coincidirien i corromprien l’estat. Amb ell, desenes de persones poden treballar sobre la mateixa infraestructura sense por. És la base, juntament amb el flux de PR (subcapítol 12.5), del treball professional amb Terraform.

El que has de recordar

  • Si dues persones modifiquen l’estat alhora, aquest es corromp (queda inconsistent), cosa que és un desastre difícil d’arreglar. Com dues persones editant el mateix document sense coordinació.
  • El state locking (bloqueig) evita això: mentre algú treballa, posa un cadenat que impedeix que altres modifiquin l’estat alhora. Les operacions es serialitzen (una darrere l’altra).
  • Amb el backend S3 + DynamoDB, el locking funciona automàticament: Terraform escriu un registre de bloqueig a DynamoDB en començar i l’esborra en acabar.
  • Si l’estat està bloquejat, veuràs un missatge indicant qui el té; no és un error dolent, és protecció. Simplement esperes.
  • En casos rars de bloqueig «encallat», existeix terraform force-unlock, però fes-lo servir amb extremada cura i només després de confirmar que ningú està treballant.

Al següent subcapítol veurem com moure l’estat entre backends de manera segura, una cosa necessària quan reorganitzes o migres la teva infraestructura.

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