Tanquem la Part V ajuntant tot el que hem après en un flux automàtic complet: un pipeline de CI/CD per a Terraform. Hem vist les peces soltes (revisió de plans al subcapítol 12.5, testing al Capítol 21); ara les unim en una «cadena de muntatge» automàtica que va des que escrius codi fins que es desplega. Ho farem amb GitHub Actions, una de les eines de CI/CD més populars.
Què és un pipeline de CI/CD
Un pipeline (tub) de CI/CD és una seqüència automàtica de passos que s’executa quan canvies el codi. Recorda els dos conceptes:
- CI (Integració Contínua): comprovar automàticament que el codi és correcte (ho vam veure al subcapítol 21.1: fmt, validate, seguretat...).
- CD (Continuous Delivery/Deployment, Entrega/Desplegament Continu): portar automàticament el codi aprovat al seu destí (en el nostre cas, aplicar la infraestructura).
Analogia: un pipeline és com una cadena de muntatge d’una fàbrica. El producte (el teu codi) avança per estacions: en una s’inspecciona, en una altra es prova, en una altra s’assembla, i al final surt acabat. Cada estació fa la seva part automàticament, i si alguna cosa falla en una, la cadena s’atura abans que el defecte avanci.
Què és GitHub Actions
GitHub Actions és el sistema de CI/CD integrat a GitHub. Et permet definir pipelines en un fitxer dins del teu repositori, i s’executen automàticament davant d’esdeveniments com obrir un Pull Request o fusionar a la branca principal. Hi ha alternatives equivalents (GitLab CI, Jenkins, CircleCI...), però GitHub Actions és molt popular i fàcil de començar; els conceptes són els mateixos a totes.
El pipeline es defineix en un fitxer YAML dins de .github/workflows/:
Les tres etapes del pipeline bàsic
Un pipeline bàsic de Terraform té tres etapes, que recullen tot el que hem vist:
┌─ LINT ──────┐ ┌─ PLAN ──────────┐ ┌─ APPLY ─────────┐ │ fmt -check │ → │ terraform plan │ → │ terraform apply │ │ validate │ │ (al PR, es │ │ (després d’aprovar│ │ seguretat │ │ revisa) │ │ i fusionar) │ └──────────────┘ └──────────────────┘ └──────────────────┘
Etapa 1: Lint (comprovacions)
«Lint» vol dir revisar el codi a la recerca de problemes. Aquí s’executen les comprovacions barates del Capítol 21: terraform fmt -check, terraform validate i l’anàlisi de seguretat (Checkov/tfsec). Si alguna cosa falla, el pipeline s’atura: no té sentit seguir amb codi mal formatat, invàlid o insegur.
Etapa 2: Plan (previsualització)
S’executa terraform plan (subcapítol 11.4) i el seu resultat es publica al Pull Request perquè un company el revisi (exactament el flux del subcapítol 12.5). Aquesta és l’etapa clau de seguretat: ningú aplica res sense que abans es vegi i s’aprovi què canviarà.
Etapa 3: Apply (desplegament)
Un cop el PR es aprova i es fusiona a la branca principal, el pipeline executa terraform apply automàticament, aplicant els canvis revisats. Com ja s’ha revisat el plan, aquest apply és segur i controlat.
Com es veu, a grans trets
Un pipeline simplificat a GitHub Actions tindria aquesta forma (no cal memoritzar la sintaxi, només entendre l’estructura):
name: Terraform
on:
pull_request: # en obrir un PR → lint i plan
push:
branches: [main] # en fusionar a main → apply
jobs:
terraform:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4 # descarrega el codi
- run: terraform fmt -check # 1. lint
- run: terraform init
- run: terraform validate
- run: terraform plan # 2. plan (al PR)
- run: terraform apply -auto-approve # 3. apply (només a main)
if: github.ref == 'refs/heads/main'Fixa’t en els desencadenants (on):
- En un Pull Request (
pull_request): s’executen el lint i el plan (es revisa, no s’aplica). - En fusionar a
main(pushamain): s’executa l’apply (ja revisat).
Això implementa exactament el flux d’equip del subcapítol 12.5, però automatitzat.
El gran avantatge: ningú aplica des del seu portàtil
Recorda el principi del subcapítol 12.5: en equip, ningú aplica Terraform a mà. El pipeline ho fa complir de manera automàtica:
- Els canvis passen sempre per les comprovacions (no es poden saltar).
- El plan sempre es revisa abans d’aplicar.
- L’apply l’executa el sistema, de manera consistent i registrada, no una persona des de la seva màquina (amb la seva configuració particular i possibilitat d’error).
Sense pipeline: cadascú aplica des del seu portàtil → caos, errors, sense registre Amb pipeline: tot passa per la cadena automàtica → consistent, segur, traçable
Una nota sobre les credencials
Perquè el pipeline pugui aplicar canvis a AWS, necessita credencials. ⚠️ Mai s’escriuen al fitxer del pipeline (seria com deixar les claus posades). S’utilitzen els secrets de GitHub Actions (un magatzem segur) o, encara millor, una connexió segura sense claus permanents (OIDC), aplicant el mínim privilegi (Capítol 7): el pipeline només ha de tenir permisos per al que necessita gestionar. Aprofundirem en seguretat de credencials al Capítol 23.
El que has de recordar
- Un pipeline de CI/CD és una seqüència automàtica de passos que s’executa en canviar el codi: CI comprova que és correcte, CD el desplega. Com una cadena de muntatge.
- GitHub Actions defineix pipelines en un fitxer YAML a
.github/workflows/; hi ha alternatives equivalents (GitLab CI, Jenkins...), amb els mateixos conceptes. - El pipeline bàsic de Terraform té tres etapes: Lint (fmt, validate, seguretat), Plan (es publica al PR i es revisa) i Apply (després d’aprovar i fusionar).
- Els desencadenants: en un PR es fa lint + plan (revisió); en fusionar a main es fa l’apply (ja revisat). És el flux del subcapítol 12.5, automatitzat.
- El gran avantatge: ningú aplica des del seu portàtil; tot passa per la cadena automàtica, de manera consistent, segura i traçable.
- ⚠️ Les credencials del pipeline van en secrets (mai al fitxer) i amb mínim privilegi.
Al següent subcapítol veurem una eina especialitzada en aquest flux per a Terraform: Atlantis, que porta el GitOps de la infraestructura a un altre nivell.
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
