Hi ha diverses eines per fer Infraestructura com a Codi. Les més conegudes són Terraform, CloudFormation, Pulumi i CDK. En aquest subcapítol les comparem perquè entenguis les seves diferències i, sobretot, per què aquest llibre tria Terraform. No es tracta que una sigui «la millor» en abstracte, sinó de quina encaixa millor per aprendre i per a la majoria de casos.
Les quatre eines
Terraform (de HashiCorp)
- Què és: l’eina de IaC més popular i la protagonista d’aquest llibre.
- Llenguatge: HCL (HashiCorp Configuration Language), un llenguatge declaratiu creat específicament per descriure infraestructura. És fàcil de llegir (ho veurem al Capítol 10).
- Multi-núvol: funciona amb AWS, Azure, GCP i centenars de proveïdors més, tots amb el mateix llenguatge. Aquesta és la seva gran avantatge.
- Declaratiu: sí (com vam veure al subcapítol 9.2).
CloudFormation (d’AWS)
- Què és: l’eina de IaC nativa d’AWS.
- Llenguatge: fitxers YAML o JSON.
- Només AWS: és exclusiva d’AWS. No serveix per Azure ni GCP.
- Avantatge: està totalment integrada a AWS i suporta els serveis nous d’AWS molt ràpid. No cal instal·lar res extra.
- Inconvenient: els fitxers poden esdevenir llargs i verbosos, i et lliga a AWS (vendor lock-in, recorda el Capítol 2).
Pulumi
- Què és: IaC usant llenguatges de programació de veritat (Python, TypeScript, Go, C#…).
- Idea: en lloc d’aprendre un llenguatge específic, fas servir el llenguatge que ja coneixes, amb bucles, condicions i funcions normals.
- Multi-núvol: sí.
- Per a qui: atractiu per a desenvolupadors que prefereixen codi «normal». A canvi, pot ser més complex i requereix saber programar.
CDK (Cloud Development Kit, d’AWS)
- Què és: com Pulumi però d’AWS: defineixes infraestructura amb llenguatges de programació (TypeScript, Python, Java…) i, per sota, genera CloudFormation.
- Només AWS (principalment).
- Per a qui: desenvolupadors de l’ecosistema AWS que volen fer servir codi en lloc de YAML. Existeix també CDK for Terraform (CDKTF), que combina CDK amb Terraform.
Taula comparativa
| Terraform | CloudFormation | Pulumi | CDK | |
|---|---|---|---|---|
| Creador | HashiCorp | AWS | Pulumi | AWS |
| Llenguatge | HCL (propi, declaratiu) | YAML/JSON | Python, TS, Go… | TS, Python, Java… |
| Multi-núvol | Sí | No (només AWS) | Sí | Principalment AWS |
| Corba d’aprenentatge | Suau | Mitjana | Mitjana-alta (saber programar) | Mitjana-alta |
| Popularitat / comunitat | La més gran | Alta (a AWS) | Creixent | Creixent |
| Et lliga a AWS | No | Sí | No | Sí |
Per què aquest llibre tria Terraform
Triem Terraform per raons molt concretes, semblants a per què vam triar AWS al Capítol 2:
- És l’estàndard de facto del mercat
Terraform és, amb diferència, l’eina de IaC més usada i demandada en ofertes de feina. Aprendre-la maximitza les teves oportunitats professionals.
- És multi-núvol (no et lliga)
Amb Terraform, el que aprens serveix per AWS, Azure, GCP i centenars de serveis més, tot amb el mateix llenguatge. Si demà canvies de núvol, reaprofites el teu coneixement. CloudFormation i CDK et lliguen a AWS.
- HCL és fàcil de llegir i aprendre
El llenguatge HCL va ser dissenyat per ser llegible i clar, fins i tot per a qui no programa. És més amable per començar que escriure YAML llarg o fer servir un llenguatge de programació complet.
- Comunitat i ecosistema enormes
Hi ha milers d’exemples, mòduls reutilitzables (Capítol 18) i respostes a qualsevol dubte. La comunitat de Terraform és gegantina.
- Encaixa perfectament amb AWS
Com vam veure al Capítol 2, el provider d’AWS per a Terraform és el més madur i complet. AWS + Terraform és una de les combinacions més demandades.
I les altres? No les descartis
Que triem Terraform no vol dir que les altres siguin dolentes:
- CloudFormation és excel·lent si treballes només amb AWS i vols integració nativa total.
- CDK / Pulumi són genials per a desenvolupadors que prefereixen fer servir el seu llenguatge de programació preferit.
El bo és que, un cop entens els conceptes de IaC (declaratiu, estat, idempotència…), passar d’una eina a una altra és relativament senzill. Els conceptes són universals, com vam veure amb els núvols al Capítol 2.
Una nota sobre les llicències (OpenTofu)
El 2023, HashiCorp va canviar la llicència de Terraform a una de més restrictiva. En resposta, la comunitat va crear OpenTofu, una versió de codi obert compatible amb Terraform (és un fork). Per aprendre i per a la majoria d’usos, ambdós són pràcticament idèntics i el que aprenguis aquí et serveix per als dos. És bo que sàpigues que OpenTofu existeix com a alternativa lliure.
El que has de recordar
- Les quatre eines principals de IaC són Terraform, CloudFormation, Pulumi i CDK.
- CloudFormation i CDK són només d’AWS; Terraform i Pulumi són multi-núvol.
- Pulumi i CDK fan servir llenguatges de programació; Terraform fa servir HCL (declaratiu i fàcil de llegir); CloudFormation fa servir YAML/JSON.
- Triem Terraform per ser l’estàndard del mercat, multi-núvol (no et lliga), amb HCL llegible i una comunitat enorme.
- OpenTofu és una alternativa lliure i compatible amb Terraform, fruit del canvi de llicència de 2023.
A l’últim subcapítol d’aquest capítol veurem el flux de treball fonamental de Terraform: el cicle plan → apply → destroy.
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
