En el subcapítol anterior vam insistir en «fixar sempre la versió» d’un mòdul. Ara veurem per què és tan important i com es fa quan el mòdul és teu i viu en un repositori Git. El versionat de mòduls és el que permet utilitzar-los de manera segura i previsible en equip, sense que un canvi inesperat trenqui la teva infraestructura.

El problema: un mòdul que canvia sota els teus peus

Imagina que la teva empresa té un mòdul xarxa-corporativa en un repositori Git, utilitzat per deu projectes. Un dia, algú millora el mòdul i canvia com crea les subxarxes. Si els deu projectes utilitzessin «l’última versió» del mòdul automàticament, tots es veurien afectats per aquest canvi de cop, sense avís. El proper terraform plan de cada projecte mostraria canvis inesperats... i potser perillosos.

Sense versionat:
  El mòdul canvia ──► els 10 projectes hereten el canvi AL INSTANT
                     (sense control, sense avís) ⚠️ perillós

Necessites una manera de dir «jo faig servir aquesta versió concreta del mòdul, i no canviarà fins que jo decideixi actualitzar». Això són les versions.

La solució: versionar amb Git tags

Un Git tag (etiqueta de Git) és una marca amb un nom que poses a un punt concret de la història d’un repositori. S’utilitza per marcar versions. La convenció més estesa és el versionat semàntic (semantic versioning): números com v1.4.2.

Història del repositori del mòdul:
  ... commits ...  ─► [tag v1.0.0]
  ... més commits ─► [tag v1.1.0]
  ... més commits ─► [tag v2.0.0]

Cada tag és una «foto» estable del mòdul en un moment donat. Un cop creat, no canvia: v1.0.0 sempre serà exactament aquell codi.

Versionat semàntic: què signifiquen els números

El format vMAJOR.MENOR.PARCEL·LA (ex. v2.3.1) comunica el tipus de canvi:

Part Quan puja Significa
MAJOR (2.x.x) Canvis incompatibles Pot trencar a qui el fa servir; compte en actualitzar
MENOR (x.3.x) Funcionalitat nova compatible Afegeix coses sense trencar l’existent
PARCEL·LA (x.x.1) Correccions d’errors Soluciona errors, segur d’actualitzar

Així, d’una ullada, saps el risc d’actualitzar: passar de v1.2.0 a v1.3.0 (canvi menor) és segur; passar a v2.0.0 (canvi major) pot requerir ajustos.

Com s’utilitza una versió concreta

Quan referencies un mòdul des d’un repositori Git, indiques quina versió (tag) vols utilitzar amb ref:

module "xarxa" {
  source = "git::https://github.com/la-meva-empresa/moduls.git//xarxa?ref=v1.2.0"
  # ...                                                          ▲
  #                                            la versió (tag) que faig servir
}

I per als mòduls del Registry (subcapítol 18.3), amb l’argument version:

module "vpc" {
  source  = "terraform-aws-modules/vpc/aws"
  version = "5.0.0"      # versió fixa
  # ...
}

En ambdós casos, li dius a Terraform: «utilitza exactament aquesta versió». Encara que el mòdul evolucioni, el teu projecte continuarà utilitzant la versió que has fixat, estable i previsible, fins que tu decideixis canviar el número.

Per què això ho canvia tot

Amb versionat, cada projecte controla quan actualitza:

Amb versionat:
  El mòdul treu v2.0.0  ──► els projectes segueixen a v1.x (sense canvis)
  El projecte A decideix actualitzar a v2.0.0 quan estigui llest, ho prova, i puja.
  El projecte B segueix tranquil a v1.x fins que li convingui.

Avantatges:

  • Estabilitat: la teva infraestructura no canvia sense que tu ho decideixis.
  • Actualitzacions controlades: puges de versió quan estàs preparat, revisant el plan (subcapítol 12.5) i provant abans.
  • Reproductibilitat: qualsevol que executi el teu codi obté el mateix resultat, perquè la versió del mòdul està fixada.
  • Treball en equip segur: diferents projectes utilitzen diferents versions sense trepitjar-se.

Exemple del món real: l’equip de plataforma publica xarxa-corporativa v2.0.0 amb una millora important però que requereix ajustos (canvi major). En comptes d’imposar-ho a tothom de cop, els equips de cada projecte migren a v2.0.0 quan poden: llegeixen les notes de la versió, proven al seu entorn de desenvolupament, revisen el plan i després actualitzen producció. Ningú s’emporta una sorpresa. El versionat converteix una actualització potencialment caòtica en un procés ordenat.

La connexió amb el flux d’equip

Això encaixa perfectament amb el que vam veure al subcapítol 12.5 (PR review de plans). Actualitzar la versió d’un mòdul és un canvi en el codi que passa per un Pull Request: canvies ref=v1.2.0 a ref=v2.0.0, el CI mostra el plan amb el que això implica, un company ho revisa, i només llavors s’aplica. Versionat + revisió de plans = canvis d’infraestructura segurs i traçables.

El que has de recordar

  • Sense versionat, un canvi en un mòdul compartit afectaria a l’instant a tots els projectes que el fan servir, sense control: perillós.
  • Un Git tag marca una versió estable i immutable del mòdul. La convenció és el versionat semàntic: vMAJOR.MENOR.PARCEL·LA.
  • Els números comuniquen el risc: MAJOR = canvis incompatibles (compte), MENOR = funcionalitat nova compatible, PARCEL·LA = correccions segures.
  • Fixes la versió amb ref=vX.Y.Z (mòduls Git) o version = "X.Y.Z" (Registry): el teu projecte utilitza exactament aquesta versió fins que decideixis canviar-la.
  • Beneficis: estabilitat, actualitzacions controlades, reproductibilitat i treball en equip segur. Encaixa amb el flux de PR review de plans (subcap. 12.5).

A l’últim subcapítol del capítol veurem un dilema de disseny important: quan crear mòduls genèrics (molt reutilitzables) versus mòduls específics del teu domini.

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