Després del blog serverless (subcapítol 33.1), pugem un esglaó de complexitat amb el segon projecte: una API REST amb contenidors. Mentre el blog era 100 % serverless, aquest projecte et porta al món dels contenidors (Capítol 17) i les bases de dades relacionals (Capítol 8), combinant ECS Fargate, RDS i un balancejador de càrrega (ALB). És un patró molt comú en el món real per a aplicacions de backend, i consolida una part diferent (i molt demandada) dels teus coneixements.
Què és una API REST (un repàs ràpid)
Una API REST és una «porta d’entrada» a la qual altres aplicacions (una web, una app mòbil...) fan peticions per obtenir o modificar dades. Per exemple, una API d’una botiga amb la qual l’app mòbil consulta productes, crea comandes, etc. És el «cervell» de backend que serveix dades i lògica als clients.
App mòbil / web ──petició──► API REST ──► processa i respon amb dades "dóna’m els productes" (el backend) [llista de productes]
Aquest projecte construeix aquesta API, però usant contenidors per executar-la i una base de dades relacional per a les dades.
Les peces i com encaixen
El projecte combina tres serveis principals, cadascun amb el seu paper:
ECS Fargate: executar l’API en contenidors (sense servidors)
Recorda els contenidors (Capítol 17): empaqueten la teva aplicació amb tot el que necessita per funcionar igual a qualsevol lloc. ECS amb Fargate (subcapítol 17.3) executa aquests contenidors sense que hagis de gestionar els servidors que hi ha a sota (Fargate és l’opció serverless per a contenidors). Aquí, la teva API va dins d’un contenidor que ECS Fargate executa i escala.
ECS Fargate → executa la teva API (en un contenidor), sense gestionar servidors → escala sol segons la demanda
💡 Aquest projecte et fa practicar el flux de contenidors que vam veure: empaquetar l’app en una imatge Docker (subcapítol 17.1), guardar-la a ECR (subcapítol 17.2) i executar-la a ECS Fargate (subcapítol 17.3).
RDS: la base de dades relacional
RDS (Capítol 8) proporciona la base de dades relacional (gestionada per AWS) on l’API guarda i consulta les dades (productes, comandes, usuaris...). A diferència del blog (que usava DynamoDB, NoSQL), aquí fem servir una base de dades relacional (SQL), adequada quan les dades tenen relacions estructurades. RDS la gestiona per tu (còpies, pegats...).
ALB: el balancejador de càrrega (repartir el trànsit)
L’Application Load Balancer (ALB) (subcapítol 13.1) reparteix les peticions entre els contenidors de la teva API. Si tens diversos contenidors executant l’API (per aguantar més càrrega), l’ALB distribueix el trànsit entre ells de manera equilibrada, i comprova la seva salut (recorda els health checks, subcapítol 13.2). És la «porta d’entrada» que rep els clients i els dirigeix.
L’arquitectura completa
Així encaixen les peces:
Clients (app, web)
│
▼
ALB (balancejador: reparteix i comprova salut)
│
▼
ECS Fargate (diversos contenidors amb la teva API, escalen sols)
│
▼
RDS (base de dades relacional: les dades)Els clients arriben a l’ALB, que reparteix les seves peticions entre els contenidors de l’API (a ECS Fargate), i aquests llegeixen/escriuen a la base de dades RDS. Si arriba més trànsit, ECS Fargate afegeix més contenidors i l’ALB els inclou en el repartiment: escala automàticament.
Conceptes clau que consolides
Aquest projecte aferma una part important (i molt emprable) del llibre, diferent de la del blog serverless:
Conceptes del llibre que consolides: - Contenidors: Docker, ECR, ECS Fargate (Cap. 17) - Bases de dades relacionals amb RDS (Cap. 8) - Balanceig de càrrega amb ALB (Cap. 13) - Xarxes: posar la BD en subxarxes privades, l’API protegida... (Cap. 6) - Seguretat: Security Groups, secrets de la BD (Caps. 6, 23) - Tot amb Terraform! (Parts II-V)
⚠️ Bones pràctiques a aplicar (que has après al llibre):
- Posa la base de dades en subxarxes privades (Capítol 6), no accessible des d’internet directament: només l’API ha de poder parlar amb ella.
- Desa la contrasenya de la base de dades a Secrets Manager (subcapítol 23.6), mai al codi ni a
.tfvars(recorda el subcapítol 19.4). - Fes servir Security Groups (Capítol 6) perquè només l’ALB parli amb els contenidors, i només els contenidors amb la base de dades.
Exemple del món real: algú vol consolidar els seus coneixements de contenidors i bases de dades relacionals (diferents dels del blog serverless). Construeix una API REST per a una botiga: empaqueta l’aplicació en una imatge Docker, la desa a ECR, l’executa a ECS Fargate (diversos contenidors), posa un ALB davant per repartir el trànsit, i fa servir RDS per a les dades (productes, comandes), amb la base de dades en subxarxes privades i la contrasenya a Secrets Manager. Tot ho desplega amb Terraform. En construir-ho, s’enfronta a reptes reals —com connectar els contenidors amb la base de dades de manera segura, com configurar l’ALB i els health checks— i en resoldre’ls interioritza com funciona una arquitectura de contenidors de veritat. Acaba amb una API real, escalable i segura, i un domini sòlid d’un patró molt demandat al mercat.
El que has de recordar
- El projecte d’API REST amb contenidors puja un esglaó sobre el blog serverless, portant-te al món dels contenidors (Cap. 17) i les bases de dades relacionals (Cap. 8). Una API REST és la «porta d’entrada» de backend a la qual altres apps fan peticions.
- Combina tres peces: ECS Fargate (executa l’API en contenidors sense gestionar servidors, escala sola, Cap. 17), RDS (la base de dades relacional, Cap. 8) i ALB (reparteix el trànsit entre els contenidors, Cap. 13).
- Arquitectura: clients → ALB (reparteix) → contenidors a ECS Fargate → RDS (dades). Escala automàticament afegint contenidors.
- Consolida: contenidors (Docker/ECR/ECS, Cap. 17), RDS (Cap. 8), balanceig (Cap. 13), xarxes i seguretat (Caps. 6, 23), tot amb Terraform.
- ⚠️ Aplica bones pràctiques: base de dades en subxarxes privades, contrasenya a Secrets Manager (mai al codi), i Security Groups restrictius.
Al següent subcapítol abordarem un projecte del món de les dades: una plataforma de dades amb Glue, Athena i Redshift.
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
