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.
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 | Sí |
| 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
- 1.1 El model client-servidor tradicional
- 1.2 Problemes que venia a resoldre el núvol
- 1.3 On-premise vs cloud vs híbrid
- 1.4 Els tres models de servei: IaaS, PaaS, SaaS
- 1.5 Els cinc pilars del cloud (segons NIST)
- 1.6 Avantatges reals: elasticitat, pagament per ús, disponibilitat global
Capítol 2 · El mercat cloud i els grans proveïdors
- 2.1 AWS, Azure i GCP: diferències i quotes de mercat
- 2.2 Per què aprendre AWS primer
- 2.3 Conceptes que són universals entre proveïdors
Capítol 3 · Regions, zones de disponibilitat i edge
- 3.1 Què és una regió AWS i com triar-la
- 3.2 Availability Zones: alta disponibilitat des del disseny
- 3.3 Edge locations i CloudFront
- 3.4 Latència, resiliència i sobirania de dades
Capítol 4 · Càlcul: EC2
- 4.1 Instàncies: tipus, famílies i quan triar cadascuna
- 4.2 AMIs, key pairs i Security Groups
- 4.3 Cicle de vida d'una instància
- 4.4 Elastic IPs i Placement Groups
- 4.5 Savings Plans vs Reserved vs On-Demand vs Spot
Capítol 5 · Emmagatzematge: S3
- 5.1 Buckets, objectes i claus
- 5.2 Classes d'emmagatzematge (Standard, IA, Glacier…)
- 5.3 Versionat i cicle de vida d'objectes
- 5.4 Polítiques de bucket i ACLs
- 5.5 Hosting de llocs web estàtics
Capítol 6 · Xarxes: VPC
- 6.1 Què és una VPC i per què la necessites
- 6.2 Subxarxes públiques i privades
- 6.3 Internet Gateway i NAT Gateway
- 6.4 Route Tables i Network ACLs
- 6.5 VPC Peering i endpoints
Capítol 7 · Identitat i accés: IAM
- 7.1 Usuaris, grups, rols i polítiques
- 7.2 El principi de mínim privilegi
- 7.3 Polítiques basades en identitat vs en recurs
- 7.4 MFA i credencials temporals (STS)
- 7.5 Bones pràctiques de seguretat IAM
Capítol 8 · Bases de dades gestionades
- 8.1 RDS: motors, Multi-AZ i rèpliques de lectura
- 8.2 Aurora i els seus avantatges sobre RDS vanilla
- 8.3 DynamoDB: model clau-valor / documents
- 8.4 ElastiCache per a memòria cau en memòria
- 8.5 Quan utilitzar cada tipus de base de dades
Capítol 9 · Per què Infraestructura com a Codi
- 9.1 Problemes del provisionament manual
- 9.2 IaC declaratiu vs imperatiu
- 9.3 Terraform vs CloudFormation vs Pulumi vs CDK
- 9.4 El cicle plan → apply → destroy
Capítol 10 · HCL: el llenguatge de Terraform
- 10.1 Blocs resource, variable, output, locals
- 10.2 Tipus de dades: string, number, bool, list, map, object
- 10.3 Expressions, referències i funcions built-in
- 10.4 Condicionals i bucles (count, for_each, for)
Capítol 11 · Providers i estat
- 11.1 Com funciona el provider d'AWS
- 11.2 El fitxer terraform.tfstate i la seva importància
- 11.3 State local vs state remot (S3 + DynamoDB)
- 11.4 Comandes essencials: init, plan, apply, destroy, fmt, validate
Capítol 12 · La teva primera infraestructura real amb Terraform
- 12.1 Crear una VPC amb subxarxes des de zero
- 12.2 Posar en marxa una instància EC2 pública
- 12.3 Associar un Security Group i una Elastic IP
- 12.4 Outputs i referències entre recursos
- 12.5 Flux de treball en equip: PR review de plans
Capítol 13 · Balanceig de càrrega i autoescalat
- 13.1 Application Load Balancer vs Network Load Balancer
- 13.2 Target Groups, listeners i regles
- 13.3 Auto Scaling Groups: polítiques i mètriques
- 13.4 Warm pools i lifecycle hooks
Capítol 14 · Serverless amb Lambda
- 14.1 El model d'execució de Lambda
- 14.2 Triggers: API Gateway, S3, DynamoDB Streams, SQS
- 14.3 Gestió de dependències i capes (Layers)
- 14.4 Cold starts i estratègies per reduir-los
- 14.5 Límits i antipatrones
Capítol 15 · Missatgeria i esdeveniments
- 15.1 SQS: cues estàndard vs FIFO, DLQ
- 15.2 SNS: topics, subscripcions, fan-out
- 15.3 EventBridge: event buses i regles
- 15.4 Patrons: pub/sub, desacoblament, saga
Capítol 16 · Lliurament de contingut i DNS
- 16.1 Route 53: tipus de registres i routing policies
- 16.2 CloudFront: distribucions, memòries cau i origins
- 16.3 ACM: certificats SSL/TLS gratuïts
- 16.4 WAF integrat amb CloudFront
Capítol 17 · Contenidors a AWS
- 17.1 Docker: repàs exprés de conceptes clau
- 17.2 ECR: registre privat d'imatges
- 17.3 ECS: task definitions, services, Fargate vs EC2
- 17.4 EKS: quan Kubernetes i quan no
Capítol 18 · Mòduls: reutilització i composició
- 18.1 Anatomia d'un mòdul Terraform
- 18.2 Variables d'entrada, outputs i dependències
- 18.3 Mòduls locals vs mòduls del Terraform Registry
- 18.4 Versionat de mòduls amb Git tags
- 18.5 Disseny de mòduls genèrics vs específics de domini
Capítol 19 · Workspaces i gestió d'entorns
- 19.1 Workspaces de Terraform: casos d'ús i limitacions
- 19.2 Estratègia de directoris per entorn (dev/stg/prod)
- 19.3 Terragrunt: DRY per a configuracions d'entorn
- 19.4 Variables d'entorn i fitxers .tfvars
Capítol 20 · Backends remots i locking
- 20.1 Configurar S3 + DynamoDB com a backend
- 20.2 State locking: evitar corrupció en equip
- 20.3 Migració d'estat entre backends
- 20.4 terraform import: portar recursos existents a l'estat
Capítol 21 · Testing d'infraestructura
- 21.1 Terraform validate i fmt en CI
- 21.2 Checkov i tfsec: anàlisi de seguretat estàtica
- 21.3 Terratest: tests d'integració en Go
- 21.4 Contract testing entre mòduls
Capítol 22 · Terraform en CI/CD
- 22.1 Pipeline bàsic: lint → plan → apply a GitHub Actions
- 22.2 Atlantis: GitOps per a Terraform
- 22.3 Terraform Cloud / HCP Terraform
- 22.4 Drift detection i reconciliació automàtica
Capítol 23 · Seguretat en profunditat
- 23.1 AWS Organizations i Service Control Policies
- 23.2 AWS Config: compliment continu
- 23.3 GuardDuty: detecció d'amenaces
- 23.4 Security Hub: visió centralitzada
- 23.5 KMS: gestió de claus i rotació
- 23.6 Secrets Manager vs Parameter Store
Capítol 24 · Observabilitat: logs, mètriques i traces
- 24.1 CloudWatch Logs, mètriques i alarmes
- 24.2 CloudWatch Dashboards i Contributor Insights
- 24.3 X-Ray: traçat distribuït
- 24.4 OpenTelemetry a AWS
- 24.5 Managed Grafana i Managed Prometheus
Capítol 25 · Optimització de costos
- 25.1 AWS Cost Explorer i pressupostos amb alertes
- 25.2 Trusted Advisor i Compute Optimizer
- 25.3 Rightsizing: com detectar sobredimensionament
- 25.4 Savings Plans vs Reserved Instances: decisió estratègica
- 25.5 FinOps: cultura i processos per controlar la despesa
Capítol 26 · Alta disponibilitat i disaster recovery
- 26.1 RTO i RPO: definir els objectius
- 26.2 Estratègies: backup/restore, pilot light, warm standby, multi-site
- 26.3 Route 53 health checks i failover automàtic
- 26.4 AWS Backup: política centralitzada de còpies
Capítol 27 · Well-Architected Framework d'AWS
- 27.1 Els sis pilars: excel·lència operacional, seguretat, fiabilitat, eficiència de rendiment, optimització de costos, sostenibilitat
- 27.2 Well-Architected Tool: revisions formals
- 27.3 Com aplicar el framework en decisions de disseny
Capítol 28 · Arquitectures serverless a escala
- 28.1 Event-driven architecture amb Lambda + EventBridge
- 28.2 Saga pattern per a transaccions distribuïdes
- 28.3 Step Functions: orquestració de workflows complexos
- 28.4 Lambda@Edge i CloudFront Functions
Capítol 29 · Plataformes de dades a AWS
- 29.1 Data Lake amb S3, Glue i Athena
- 29.2 Kinesis Data Streams i Firehose per a streaming
- 29.3 Redshift: data warehousing a escala
- 29.4 Lake Formation: govern del dada
Capítol 30 · Multi-compte i landing zones
- 30.1 Per què separar workloads en comptes diferents
- 30.2 AWS Control Tower i Account Factory
- 30.3 Gestió centralitzada de logs i seguretat
- 30.4 Terraform a escala multi-compte amb mòduls compartits
Capítol 31 · Platform Engineering i Internal Developer Platform
- 31.1 Golden paths i abstraccions sobre Terraform
- 31.2 Service Catalog d'AWS
- 31.3 Backstage com a portal de desenvolupadors
- 31.4 Mòduls Terraform com a producte intern
Capítol 32 · Certificacions AWS rellevants
- 32.1 Cloud Practitioner: val la pena?
- 32.2 Solutions Architect Associate → Professional
- 32.3 DevOps Engineer Professional
- 32.4 Specialty: Security, Database, Networking
- 32.5 HashiCorp Terraform Associate
Capítol 33 · Projectes per consolidar el que s'ha après
- 33.1 Projecte 1: blog serverless (S3 + CloudFront + Lambda + DynamoDB)
- 33.2 Projecte 2: API REST amb ECS Fargate + RDS + ALB
- 33.3 Projecte 3: plataforma de dades amb Glue + Athena + Redshift
- 33.4 Projecte 4: landing zone multi-compte amb Terraform i Control Tower
