Lambda és meravellós, però no és una bala de plata. Com tota eina, té límits tècnics i hi ha situacions on fer-la servir és una mala idea (antipatrons). Tanquem el capítol aprenent a reconèixer quan Lambda no és la resposta correcta: saber-ho t’estalviarà disgustos i et farà un millor arquitecte.
Els límits tècnics de Lambda
Lambda imposa una sèrie de restriccions. No cal memoritzar números exactes (canvien amb el temps), però sí conèixer què està limitat:
| Límit | Aproximadament | Per què importa |
|---|---|---|
| Temps màxim d’execució | 15 minuts | Una funció no pot trigar més; després de 15 min, es talla |
| Memòria | Fins a diversos GB | Defineix també la CPU que rep |
| Mida del paquet | Limitat (ZIP) | Per això s’utilitzen capes o imatges de contenidor |
| Emmagatzematge temporal | Espai a /tmp limitat |
Per a fitxers temporals durant l’execució |
| Concurrència | Hi ha un màxim per compte | Milers en paral·lel, però no infinit |
El límit més important de recordar és el dels 15 minuts: una funció Lambda no pot executar-se més de 15 minuts. Si la teva tasca triga més, Lambda no és l’eina.
Antipatrons: quan NO fer servir Lambda
Un antipatró és fer servir una eina per a una cosa per a la qual no està pensada. Aquests són els casos on Lambda no encaixa:
- Tasques molt llargues
Si un procés triga més de 15 minuts (processar un vídeo enorme, un càlcul científic, una migració massiva de dades), Lambda el tallarà a la meitat.
Millor alternativa: contenidors (ECS/Fargate, Capítol 17), instàncies EC2, o serveis de processament per lots. Per a fluxos llargs formats per passos curts, es poden orquestrar diverses Lambdes amb Step Functions (Capítol 28).
- Aplicacions amb trànsit constant i altíssim 24/7
Lambda és genial per a trànsit intermitent o impredictible (pagues només per ús). Però si tens un trànsit enorme i constant les 24 hores, els milers de milions d’execucions poden sortir més cares que un grup de servidors sempre encesos.
Millor alternativa: EC2 amb Auto Scaling (Capítol 13) o contenidors, que a volum constant molt alt poden ser més econòmics. (Convé fer números: depèn molt del cas.)
- Estat en memòria entre peticions
Lambda és sense estat (stateless): cada invocació pot executar-se en un entorn diferent, i no pots confiar que la memòria es conservi entre crides. Si la teva aplicació necessita mantenir dades en memòria entre peticions (una sessió d’usuari en RAM, una memòria cau local persistent), Lambda no és adequat.
Millor alternativa: guardar l’estat fora de la funció, en serveis pensats per a això: DynamoDB (subcapítol 8.3), ElastiCache (subcapítol 8.4) o S3 (Capítol 5). Aquesta és, de fet, la forma correcta de dissenyar: l’estat va a un servei extern, no a la funció.
- Connexions a bases de dades relacionals tradicionals a gran escala
Com que Lambda pot crear milers d’execucions en paral·lel, cadascuna intentant obrir una connexió a una base de dades relacional (RDS, Capítol 8), pot esgotar les connexions disponibles i tombar la base de dades.
Millor alternativa: fer servir RDS Proxy (que gestiona i reutilitza les connexions), bases de dades serverless com Aurora Serverless (subcapítol 8.2) o DynamoDB, que escalen millor amb Lambda.
- Quan els cold starts són inacceptables i constants
Si necessites latència ultrabaixa i garantida en cada petició, i els cold starts (subcapítol 14.4) són un problema constant fins i tot amb provisioned concurrency, potser un servei sempre encès sigui millor.
Taula: Lambda sí o no?
| La teva situació | Lambda? | Alternativa si no |
|---|---|---|
| Tasca curta, trànsit intermitent | ✅ Sí | — |
| Processar esdeveniments (S3, cues, canvis a BD) | ✅ Sí | — |
| API/backend lleuger | ✅ Sí | — |
| Tasca de més de 15 minuts | ❌ No | ECS/Fargate, EC2, Step Functions |
| Trànsit constant altíssim 24/7 | ⚠️ Depèn | EC2/contenidors (fer números) |
| Estat en memòria entre peticions | ❌ No | DynamoDB, ElastiCache, S3 |
| Latència ultrabaixa garantida sempre | ⚠️ Depèn | Servei sempre encès |
La mentalitat correcta
Lambda no substitueix els servidors: és una altra eina més a la teva caixa. Un bon arquitecte combina serveis: fa servir Lambda per al processament d’esdeveniments i les tasques curtes, contenidors o EC2 per a càrregues constants i llargues, i serveis gestionats (DynamoDB, S3, cues) per a l’estat i les dades.
La pregunta clau no és «faig servir Lambda?», sinó «quina eina encaixa millor amb aquesta feina concreta?». A vegades és Lambda, a vegades no, i moltes arquitectures reals en fan servir diverses alhora.
El que has de recordar
- Lambda té límits: el més important és el de 15 minuts màxims d’execució; també hi ha límits de memòria, mida de paquet, emmagatzematge temporal i concurrència.
- Antipatrons (quan NO fer servir Lambda): tasques de més de 15 min, trànsit constant altíssim 24/7, necessitat d’estat en memòria entre peticions, i mala gestió de connexions a bases de dades relacionals a gran escala.
- L’estat ha d’anar fora de la funció (DynamoDB, ElastiCache, S3): Lambda és sense estat.
- Alternatives segons el cas: ECS/Fargate o EC2 (tasques llargues/constants), Step Functions (fluxos llargs per passos), RDS Proxy / Aurora Serverless / DynamoDB (bases de dades a escala).
- La pregunta correcta és «quina eina encaixa millor amb aquesta feina?», no «faig servir Lambda per a tot?».
Has acabat el Capítol 14 i domines els fonaments de serverless! Al Capítol 15 veurem les peces que connecten totes aquestes funcions i serveis: la missatgeria i els esdeveniments (SQS, SNS, EventBridge), clau per construir sistemes desacoblats.
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
