Hem vist comprovacions que analitzen el codi sense executar-lo (fmt, validate, Checkov, tfsec). Són ràpides i útils, però tenen un límit: no comproven que la teva infraestructura funcioni de veritat un cop creada. Per això existeixen els tests d’integració, i l’eina més coneguda al món Terraform és Terratest. En aquest subcapítol entendràs què aporten i com funcionen a grans trets.

El límit de l’anàlisi estàtica

Les eines dels subcapítols anteriors llegeixen el teu codi, però no creen res. Poden dir-te «aquest codi sembla correcte i segur», però no poden respondre preguntes com:

  • L’instància EC2 s’engega de veritat i respon?
  • El servidor web retorna la pàgina esperada?
  • El balancejador reparteix el tràfic correctament?
  • Els recursos es connecten entre ells com haurien?

Per respondre això, no n’hi ha prou amb llegir el codi: cal crear la infraestructura de veritat i provar-la. Això és un test d’integració.

Què és un test d’integració d’infraestructura

Un test d’integració segueix aquest cicle: crea la infraestructura real (en un entorn de proves), verifica que funciona com esperes, i després la destrueix per no deixar res ni seguir pagant.

1. CREAR    → terraform apply (munta la infra real en un compte de proves)
2. VERIFICAR→ comprovar que funciona (respon? està ben configurada?)
3. DESTRUIR → terraform destroy (neteja tot, deixa de pagar)

Analogia: l’anàlisi estàtica és com revisar els plànols d’un cotxe; el test d’integració és com construir un prototip i conduir-lo en un circuit de proves per veure si de veritat s’engega, frena i gira. Després del test, es desmunta el prototip. És més costós que mirar els plànols, però et dona una certesa que el paper no pot donar.

Què és Terratest

Terratest és una llibreria de Go (creada per Gruntwork) per escriure tests d’integració d’infraestructura. Amb ella, escrius un petit programa en el llenguatge Go que automatitza tot el cicle: aplica el teu Terraform, fa comprovacions i destrueix la infraestructura al final.

Terratest (en Go) automatitza:
  terraform apply  →  comprovacions  →  terraform destroy

Un test amb Terratest, a grans trets, fa una cosa així (no cal dominar Go per entendre la idea):

// Pseudo-exemple simplificat d’un test amb Terratest
func TestServidorWeb(t *testing.T) {
    // 1. Aplicar el Terraform
    terraform.InitAndApply(t, opcions)

    // 3. Assegurar que es destrueix al final (encara que el test falli)
    defer terraform.Destroy(t, opcions)

    // 2. Verificar: obtenir la IP del output i comprovar que la web respon
    ip := terraform.Output(t, opcions, "ip_publica")
    http.Get("http://" + ip)   // Respon 200 OK amb el contingut esperat?
}

Fixa’t en el patró:

  • Apply: crea la infraestructura (fa servir el teu codi Terraform real).
  • Verificar: llegeix els outputs (recorda el subcapítol 12.4) i comprova coses reals, com que el servidor web respon.
  • Destroy (amb defer): s’assegura de netejar sempre, fins i tot si el test falla. Això és crucial per no deixar recursos costosos oblidats.

Què pots verificar amb Terratest

Terratest et permet comprovar que la infraestructura funciona de veritat:

  • Que una web respon amb el codi i contingut esperats.
  • Que un servidor és accessible per SSH o per un port.
  • Que una base de dades accepta connexions.
  • Que els outputs de Terraform tenen els valors correctes.
  • Que un mòdul (Capítol 18) crea exactament els recursos que promet.

És especialment útil per provar mòduls reutilitzables: abans de publicar una nova versió del teu mòdul (subcapítol 18.4), un test d’integració confirma que segueix funcionant.

El compromís: potent però costós

Els tests d’integració són els més complets, però també els més costosos, i convé ser-ne conscient:

Anàlisi estàtica (fmt, validate, Checkov) Tests d’integració (Terratest)
Crea infraestructura real No
Velocitat Segons Minuts (crea i destrueix)
Cost Gratuït (no crea res) Costa diners (recursos reals)
Què prova Que el codi és correcte/segur Que la infra funciona de veritat
Requereix saber Comandes bàsiques Programar en Go

Per això no s’executen en cada canvi trivial: com que creen recursos reals (porta minuts i costa diners), els tests d’integració se solen reservar per a canvis importants, per validar mòduls abans de publicar-los, o s’executen periòdicament (per exemple, cada nit), en comptes de cada petit commit.

Necessito això per començar?

No d’entrada. La piràmide de testing té sentit per ordre de cost/benefici:

        ▲  Pocs: tests d’integració (Terratest) — costosos, per allò important
       ╱ ╲
      ╱   ╲ Alguns: anàlisi de seguretat (Checkov/tfsec)
     ╱─────╲
    ╱       ╲ Molts: fmt + validate — barats, en cada canvi
   ╱─────────╲

Comença per la base (fmt, validate), afegeix seguretat (Checkov/tfsec), i reserva els tests d’integració per quan la teva infraestructura sigui crítica o publiquis mòduls reutilitzables que molts faran servir. No necessites Terratest des del primer dia, però convé saber que existeix i quin problema resol.

El que has de recordar

  • L’anàlisi estàtica (fmt, validate, Checkov) llegeix el codi però no comprova que la infraestructura funcioni de veritat; per això hi ha els tests d’integració.
  • Un test d’integració segueix el cicle crear → verificar → destruir: munta la infra real en un compte de proves, comprova que funciona i l’elimina. Com construir i conduir un prototip, no només mirar els plànols.
  • Terratest és una llibreria de Go que automatitza aquest cicle (apply → comprovacions → destroy), assegurant-se de netejar sempre (amb defer destroy), fins i tot si el test falla.
  • Permet verificar coses reals: que una web respon, que un servidor és accessible, que els outputs són correctes, que un mòdul crea el que promet (ideal per validar mòduls).
  • Són els tests més complets però també els més costosos (creen recursos reals, porten minuts, costen diners, requereixen Go); es reserven per allò important, no per cada canvi trivial. Comença per la base de la piràmide.

A l’últim subcapítol del capítol veurem una tècnica per assegurar que els mòduls encaixen bé entre si: el contract testing entre mòduls.

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