Ja saps que l'estat és l'inventari de Terraform. La següent pregunta és: on es guarda aquest inventari? Per defecte, al teu propi ordinador. Però això causa problemes quan treballes en equip. En aquest subcapítol veurem la diferència entre estat local i remot, i com configurar el clàssic backend de S3 + DynamoDB, una de les pràctiques més importants de Terraform professional.

Estat local: el punt de partida

Per defecte, Terraform guarda l'estat en un fitxer terraform.tfstate a la carpeta del teu projecte, al teu ordinador. Això s'anomena estat local.

Per aprendre i experimentar tu sol, està bé. Però té problemes greus quan la cosa es posa seriosa:

Problema 1: No es pot col·laborar

Si l'estat està al teu portàtil, els teus companys no el tenen. Cadascú tindria la seva pròpia versió de l'estat, que es contradiuen entre si. Impossible treballar en equip.

Problema 2: Risc de pèrdua

Si el teu portàtil es trenca, es perd o esborres la carpeta per error, perds l'estat. I ja saps (subcapítol 11.2) com de greu és perdre l'estat: Terraform «s'oblida» de tot el que gestiona.

Problema 3: Sense bloqueig (locking)

Si dues persones executessin apply alhora sobre la mateixa infraestructura, podrien corrompre l'estat o trepitjar-se els canvis. L'estat local no té manera d'evitar-ho.

Problema 4: Seguretat

Un fitxer amb dades sensibles (subcapítol 11.2) al teu portàtil, sense xifrar, és un risc.

Estat remot: la solució professional

L'estat remot guarda el tfstate en un lloc central i compartit (al núvol), en lloc del teu ordinador. Això resol tots els problemes anteriors:

  • Col·laboració: tot l'equip llegeix i escriu el mateix estat central.
  • Seguretat: es guarda xifrat i protegit.
  • Durabilitat: no es perd si falla el teu portàtil.
  • Bloqueig: evita que dues persones modifiquin alhora (ho veurem tot seguit).

A la configuració d'on es guarda l'estat se l'anomena backend. Hi ha diversos tipus de backend remot; el més clàssic a AWS és S3 + DynamoDB.

El backend clàssic: S3 + DynamoDB

Aquesta combinació utilitza dos serveis que ja coneixes de la Part II:

Servei Paper al backend
S3 (Capítol 5) Guarda el fitxer d'estat (xifrat, versionat, durador)
DynamoDB (Capítol 8) Gestiona el bloqueig (locking) perquè no hi hagi dos apply alhora

Analogia:

  • S3 és la caixa forta compartida on es guarda l'inventari (l'estat), accessible per tot l'equip, segura i amb còpia de seguretat.
  • DynamoDB és el sistema de "ocupat/lliure" d'un lavabo: quan algú està utilitzant l'estat (executant apply), posa el cartell de «ocupat» (un bloqueig) perquè ningú més entri fins que acabi.

Per què S3 és ideal per a l'estat

  • Durador (recorda els «onze nous» del Capítol 5): gairebé impossible perdre'l.
  • Xifrat en repòs: protegeix les dades sensibles.
  • Versionat (subcapítol 5.3): guarda l'historial de l'estat, així pots recuperar una versió anterior si alguna cosa va malament.
  • Compartit: tot l'equip accedeix al mateix fitxer.

Per què DynamoDB per al bloqueig

DynamoDB gestiona un «cadenat»: abans de modificar l'estat, Terraform posa un bloqueig en una taula de DynamoDB. Mentre aquest bloqueig existeix, ningú més pot executar apply. Quan acaba, l'allibera. Així s'evita la corrupció per accessos simultanis. Veurem el locking a fons al Capítol 20.

Nota: Versions recents de Terraform/S3 permeten gestionar el bloqueig directament a S3 sense DynamoDB. Però el patró S3 + DynamoDB segueix sent el més conegut i el que veuràs a la majoria de projectes i documentació.

Com es configura (visió general)

La configuració del backend es declara al bloc terraform:

terraform {
  backend "s3" {
    bucket         = "mi-empresa-terraform-state"
    key            = "produccion/red/terraform.tfstate"
    region         = "eu-west-1"
    dynamodb_table = "terraform-locks"
    encrypt        = true
  }
}
  • bucket: el bucket de S3 on es guarda l'estat.
  • key: la «ruta» dins del bucket (organitza estats de diferents projectes/entorns).
  • dynamodb_table: la taula per al bloqueig.
  • encrypt = true: xifra l'estat.

Després d'escriure això, executes terraform init i Terraform configura el backend. Veurem els detalls pas a pas al Capítol 20.

El problema de l'ou i la gallina: per guardar l'estat a S3, necessites un bucket de S3… però aquest bucket també és infraestructura. La solució habitual: crear el bucket i la taula una vegada (a mà o amb un petit Terraform d'estat local) i després utilitzar-los com a backend per a tot la resta. Ho veurem al Capítol 20.

Local vs remot: taula comparativa

Estat local Estat remot (S3 + DynamoDB)
On viu El teu ordinador Al núvol, compartit
Col·laboració en equip No
Risc de pèrdua Alt Baix (durador, versionat)
Bloqueig (evita conflictes) No Sí (DynamoDB)
Xifrat / seguretat Manual
Quan utilitzar-lo Aprendre, proves en solitari Qualsevol projecte seriós o en equip

El que has de recordar

  • Per defecte, l'estat és local (al teu ordinador): serveix per aprendre sol, però no per a equips ni producció.
  • L'estat remot el guarda en un lloc central i compartit (un backend), resolent col·laboració, seguretat, durabilitat i bloqueig.
  • El backend clàssic a AWS és S3 + DynamoDB: S3 guarda l'estat (xifrat, versionat, durador) i DynamoDB gestiona el bloqueig (evita dos apply simultanis).
  • Es configura al bloc terraform { backend "s3" { ... } } i s'activa amb terraform init.
  • Per a qualsevol projecte seriós o en equip, utilitza estat remot. Ho veurem en detall al Capítol 20.

A l'últim subcapítol d'aquest capítol repassarem els comandaments essencials de Terraform que utilitzaràs diàriament: init, plan, apply, destroy, fmt i validate.

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