Seguim a la Part VII amb el Capítol 28: Arquitectures serverless a escala, on veiem com combinar els serveis serverless que ja coneixes (Lambda, EventBridge, SQS...) en arquitectures reals i potents. Comencem pel patró més fonamental del món serverless modern: les arquitectures dirigides per esdeveniments (event-driven), construïdes amb Lambda i EventBridge. És una manera de dissenyar sistemes que escalen de forma natural i es mantenen flexibles.
Repàs: les peces que ja coneixem
Abans de combinar-les, recordem les peces (les vam veure a la Part IV):
- Lambda (Capítol 14): funcions que s’executen quan alguna cosa les dispara, sense gestionar servidors, i escalen soles.
- EventBridge (subcapítol 15.3): el «bus d’esdeveniments» que rep esdeveniments i els enruta a qui correspongui segons regles.
- SQS, SNS (Capítol 15): cues i notificacions per desacoblar components.
En aquest subcapítol les ajuntem per construir un estil d’arquitectura complet.
Què és una arquitectura event-driven
Una arquitectura dirigida per esdeveniments (event-driven) és aquella on els components es comuniquen mitjançant esdeveniments: «alguna cosa ha passat». En comptes que un component cridi directament a un altre i esperi la seva resposta, emet un esdeveniment anunciant el que ha passat, i altres components reaccionen a aquest esdeveniment si els interessa.
En comptes de: A crida a B → B crida a C (tots acoblats, esperant)
Event-driven:
A emet esdeveniment "comanda creada"
│
▼
EventBridge (ho reparteix)
┌───────┼───────┐
▼ ▼ ▼
reacciona reacciona reacciona
servei B servei C servei D
(cadascun fa el seu, en paral·lel, sense que A ho sàpiga)Analogia: una arquitectura event-driven funciona com anuncis per megafonia en un aeroport. Quan «s’anuncia» que un vol està llest per embarcar (un esdeveniment), no es crida cada persona una per una: es fa un anunci, i tots els interessats (els passatgers d’aquell vol) reaccionen dirigint-se a la porta. Qui no va en aquell vol, ho ignora. Qui anuncia no necessita saber qui està escoltant ni quants són. Així, el sistema és flexible: pots afegir més «oients» sense canviar qui emet.
Com encaixen Lambda i EventBridge
Al món serverless d’AWS, aquest patró es construeix típicament així:
- EventBridge és el bus per on circulen els esdeveniments: rep els esdeveniments que emeten uns components i els enruta (amb regles, subcapítol 15.3) als que han de reaccionar.
- Lambda són les funcions que reaccionen a aquests esdeveniments: quan arriba un esdeveniment que els correspon, EventBridge les dispara i fan la seva feina.
Component emet esdeveniment → EventBridge (enruta per regles) → dispara Lambdas
"usuari registrat" ├─► Lambda "enviar email de benvinguda"
├─► Lambda "crear perfil"
└─► Lambda "registrar en analítica"Cada Lambda fa una cosa concreta i s’executa només quan arriba el seu esdeveniment, escalant automàticament segons quants esdeveniments arribin.
Els grans avantatges d’aquest patró
- Desacoblament (components independents)
Recorda el desacoblament que vam veure amb la missatgeria (subcapítol 15.4). Qui emet l’esdeveniment no necessita saber qui el processarà ni quants ho faran. Això significa que pots afegir noves reaccions sense tocar el component que emet. Vols que, a més, s’enviï una notificació quan es crea una comanda? Afegixes una Lambda nova que escolti aquest esdeveniment, sense modificar res de l’existent.
- Escalabilitat natural
Com que cada reacció és una Lambda independent que escala sola (Capítol 14), el sistema escala de forma natural amb la càrrega. Si arriben 10 esdeveniments o 10.000, cada Lambda es multiplica segons calgui, en paral·lel. No cal planificar capacitat.
- Flexibilitat i evolució
És molt fàcil fer evolucionar el sistema: afegir, treure o canviar reaccions a esdeveniments sense reescriure-ho tot. L’arquitectura creix peça a peça, cosa que la fa ideal per a sistemes que evolucionen ràpid.
- Resiliència
Si una Lambda que reacciona falla, no tomba la resta: les altres continuen processant els seus esdeveniments. I combinant amb cues (SQS, subcapítol 15.1), els esdeveniments no es perden encara que alguna cosa falli temporalment.
Una tensió a tenir en compte
⚠️ No tot són avantatges: les arquitectures event-driven són més flexibles i escalables, però també més difícils de seguir i depurar (un esdeveniment desencadena reaccions en cadena per tot el sistema). Aquí és on el traçat distribuït (X-Ray, subcapítol 24.3) es torna imprescindible, per seguir el rastre d’un esdeveniment a través de totes les Lambdas que dispara. Recorda també l’equilibri entre pilars (subcapítol 27.1): guanyes en escalabilitat i flexibilitat, a canvi d’una mica de complexitat operativa.
Exemple del món real: una botiga online processa una comanda amb arquitectura event-driven. Quan un client compra, s’emet l’esdeveniment «comanda creada» a EventBridge. Aquest únic esdeveniment dispara, en paral·lel, diverses Lambdas independents: una cobra el pagament, una altra reserva l’estoc, una altra envia el correu de confirmació, una altra notifica al magatzem i una altra registra la venda en analítica. Cadascuna fa la seva part sense saber de les altres. Mesos després, l’equip vol afegir un programa de punts de fidelitat: simplement creen una nova Lambda que escolta l’esdeveniment «comanda creada» i suma punts, sense tocar res del flux existent. El sistema escala sol a les rebaixes (milers de comandes) i és fàcil d’ampliar. Aquesta flexibilitat és l’essència de l’event-driven.
El que has de recordar
- En una arquitectura event-driven (dirigida per esdeveniments), els components es comuniquen mitjançant esdeveniments («alguna cosa ha passat»): un emet un esdeveniment i altres reaccionen, en comptes de cridar-se directament. Com els anuncis per megafonia d’un aeroport.
- Es construeix amb EventBridge com a bus que enruta els esdeveniments (per regles) i Lambdas com a funcions que reaccionen, cadascuna fent una cosa concreta i escalant sola.
- Avantatges: desacoblament (afegeixes reaccions sense tocar l’existent), escalabilitat natural (cada Lambda escala sola), flexibilitat per evolucionar peça a peça, i resiliència (una fallada no tomba la resta).
- ⚠️ A canvi, són més difícils de seguir i depurar (reaccions en cadena), per això el traçat distribuït (X-Ray) es torna essencial. És l’equilibri entre flexibilitat i complexitat.
Al següent subcapítol veurem com coordinar processos de diversos passos que poden fallar, mantenint la consistència, amb el patró Saga.
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
