Tanquem la Part IV amb un dels temes més importants de la informàtica moderna: els contenidors. Abans de veure com AWS els gestiona (ECR, ECS, EKS als següents subcapítols), necessites entendre què és Docker i els contenidors. Si ja els coneixes, aquest serà un repàs ràpid; si no, aquí tens l’essencial.
El problema: «a la meva màquina funciona»
Segur que has sentit (o viscut) aquesta frase clàssica: un programa funciona perfectament a l’ordinador del desenvolupador, però en portar-lo al servidor... falla. Per què? Perquè el servidor té una versió diferent del llenguatge, li falta una llibreria, el sistema operatiu és diferent, una configuració no coincideix... Les diferències d’entorn trenquen les aplicacions.
Ordinador del desenvolupador Servidor de producció Python 3.11 Python 3.8 ← diferent! Llibreria X versió 2 Llibreria X versió 1 ← diferent! Funciona ✓ Falla ✗
La solució: els contenidors
Un contenidor empaqueta la teva aplicació juntament amb tot el que necessita per funcionar: el codi, les llibreries, les dependències, la configuració... tot en un únic paquet. Aquest paquet funciona igual a qualsevol lloc: al teu portàtil, al servidor, al núvol. S’ha acabat el «a la meva màquina funciona».
┌─── Contenidor ───┐ │ La teva aplicació │ │ + les seves llibreries │ ← tot junt, autocontingut │ + dependències │ │ + configuració │ └───────────────────┘ Funciona igual a QUALSEVOL lloc
Analogia: un contenidor és com un contenidor de mercaderies (d’aquells dels vaixells i camions). Tant és el que porti dins (roba, electrònica, menjar): el contenidor té una mida i forma estàndard, així que qualsevol vaixell, grua o camió del món pot transportar-lo sense saber què hi ha dins. Igual amb el programari: el contenidor és estàndard, i qualsevol sistema que «sàpiga» de contenidors pot executar-lo.
Què és Docker
Docker és la tecnologia més popular per crear i executar contenidors. S’ha convertit en un estàndard de la indústria. Gestiona tres conceptes clau que has de distingir bé:
- Imatge (image)
Una imatge és la plantilla del contenidor: el paquet «congelat» amb la teva aplicació i tot el necessari. És com una recepta o un motlle. No s’executa per si mateixa; és la definició del que hi haurà dins.
- Contenidor (container)
Un contenidor és una imatge en execució: una instància viva de la imatge, funcionant. D’una mateixa imatge pots arrencar molts contenidors idèntics.
Imatge (plantilla) ──arrencar──► Contenidor 1 (en execució)
──arrencar──► Contenidor 2 (en execució)
──arrencar──► Contenidor 3 (en execució)Analogia: la imatge és com el motlle d’una galeta (o un plànol); el contenidor és cada galeta que surt del motlle. Un motlle, moltes galetes idèntiques.
- Dockerfile
Un Dockerfile és un fitxer de text amb les instruccions per construir la imatge. Descriu pas a pas què porta: de quin sistema base parteix, què s’instal·la, quin codi es copia, com s’arrenca. És la recepta escrita.
# Exemple simplificat de Dockerfile FROM python:3.11 # parteix d’una imatge base amb Python COPY . /app # copia el teu codi RUN pip install -r requirements.txt # instal·la dependències CMD ["python", "app.py"] # com arrencar l’aplicació
A partir d’aquest Dockerfile, Docker construeix la imatge, que després pots executar com a contenidors on vulguis.
El flux complet de Docker
Ajuntant els tres conceptes, el cicle és:
1. Escrius un Dockerfile (la recepta)
│ docker build
▼
2. Construeixes una Imatge (el paquet llest)
│ docker run
▼
3. Arrenques Contenidors (l’aplicació en marxa)Contenidors vs màquines virtuals
Et pot sorgir el dubte: en què es diferencia un contenidor d’una instància EC2 (màquina virtual)? La clau és que els contenidors són més lleugers:
| Màquina virtual (EC2) | Contenidor | |
|---|---|---|
| Inclou | Un sistema operatiu complet | Només l’app i les seves dependències |
| Mida | Gran (GB) | Lleuger (MB normalment) |
| Arrencada | Lenta (minuts) | Ràpida (segons) |
| Densitat | Poques per servidor | Molts per servidor |
Els contenidors comparteixen el sistema operatiu del servidor amfitrió, en comptes de portar-ne un de sencer cadascun. Per això són tan lleugers i ràpids: pots executar molts contenidors en una mateixa màquina.
Per què importa això a AWS: els contenidors són ideals per al núvol. Arrenquen ràpid (genial per escalar, Capítol 13), són portables i aprofiten bé els recursos. Per això AWS té serveis dedicats a executar-los, que veurem als següents subcapítols: ECR (per guardar imatges), ECS i EKS (per executar contenidors).
El que has de recordar
- Un contenidor empaqueta la teva aplicació amb tot el que necessita (codi, llibreries, dependències, configuració), i funciona igual a qualsevol lloc. Acaba amb el «a la meva màquina funciona». Com un contenidor de mercaderies estàndard.
- Docker és la tecnologia estàndard de contenidors, amb tres conceptes: imatge (la plantilla/motlle), contenidor (la imatge en execució/la galeta) i Dockerfile (la recepta escrita per construir la imatge).
- El flux: Dockerfile →
build→ Imatge →run→ Contenidors. - Davant de les màquines virtuals, els contenidors són més lleugers i ràpids perquè comparteixen el sistema operatiu de l’amfitrió; hi caben molts per servidor.
- AWS ofereix serveis dedicats a contenidors: ECR, ECS i EKS (següents subcapítols).
Al següent subcapítol veurem on guardar les teves imatges de manera privada i segura: el registre ECR.
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
