En el subcapítol anterior vam veure que l’estratègia de directoris per entorn és excel·lent, però té un petit inconvenient: certa repetició entre els entorns. Quan tens molts entorns o molts components, aquesta repetició creix. Terragrunt és una eina de la comunitat que resol just això, ajudant-te a mantenir el teu codi DRY. Vegem què és i quan val la pena.
El principi DRY
DRY significa «Don't Repeat Yourself» («No et repeteixis»). És un principi fonamental de la programació: cada peça d’informació o lògica ha d’existir en un sol lloc. Repetir codi és dolent perquè, si cal canviar alguna cosa, l’has de canviar a molts llocs (i és fàcil oblidar-se’n d’algun).
Repetit (malament): el mateix codi de configuració a dev, stg, prod DRY (bé): la configuració comuna en UN lloc, cada entorn només les seves diferències
Al subcapítol 19.2 vam veure que l’estratègia de directoris deixa una mica de repetició als main.tf de cada entorn (la configuració del backend, les crides a mòduls similars...). Terragrunt ataca aquesta repetició.
Què és Terragrunt
Terragrunt és una eina que embolcalla Terraform (un «wrapper»), creada per l’empresa Gruntwork. No reemplaça Terraform: el complementa, afegint funcionalitats per gestionar millor múltiples entorns i reduir la repetició.
Terragrunt ──(fa servir per sota)──► Terraform
(redueix repetició, (fa la feina real)
gestiona entorns)Analogia: si Terraform és el motor, Terragrunt és un sistema d’assistència a la conducció que es munta a sobre: el motor segueix fent la feina, però conduir es torna més còmode i comets menys errors, sobretot en trajectes llargs i repetitius (molts entorns).
Quins problemes resol Terragrunt
- Configuració del backend sense repetir
Recorda que cada entorn necessita configurar el seu backend d’estat (Capítol 11, subcapítol 20.1), i això es repeteix a cada carpeta. Amb Terragrunt, defineixes la configuració del backend una sola vegada i cada entorn l’hereta, generant automàticament la part que canvia (per exemple, la ruta de l’estat de cada entorn).
- Valors comuns en un sol lloc
Els valors que comparteixen tots els entorns (la regió, etiquetes comunes, comptes...) es defineixen una vegada i s’hereten, en lloc de copiar-los a cada entorn.
- Menys codi repetit per entorn
Cada entorn es redueix a un fitxer petit que diu «fes servir aquest mòdul amb aquests valors concrets», mentre tota la maquinària comuna (backend, providers, configuració) està centralitzada. Els fitxers de cada entorn queden mínims: només les seves diferències.
Estructura típica amb Terragrunt: terragrunt.hcl ← configuració comuna (backend, regió...) UNA vegada entorns/ ├── dev/terragrunt.hcl ← només: "fes servir el mòdul X amb aquests valors de dev" ├── stg/terragrunt.hcl ← només les diferències de stg └── prod/terragrunt.hcl ← només les diferències de prod
- Gestionar dependències entre components
Terragrunt també ajuda a orquestrar diversos components d’infraestructura (xarxa, base de dades, aplicació) i les seves dependències, aplicant-los en ordre, cosa que en projectes grans és molt útil.
Quan fer servir Terragrunt? (i quan no)
Com tota eina, Terragrunt afegeix la seva pròpia complexitat (una altra eina que aprendre i mantenir). La decisió d’adoptar-lo depèn de la mida del teu projecte:
| Situació | Terragrunt? |
|---|---|
| Projecte petit, 1-2 entorns | ❌ No cal; l’estratègia de directoris és suficient |
| Estàs començant amb Terraform | ❌ Aprèn Terraform primer |
| Molts entorns i/o molts components | ✅ Redueix molta repetició |
| Repetició de configuració que fa mal | ✅ El seu punt fort |
| Equip gran amb infraestructura complexa | ✅ Aporta ordre i consistència |
Consell important: no adoptis Terragrunt des del primer dia. Comença amb Terraform i l’estratègia de directoris del subcapítol 19.2. Només quan sentis que la repetició entre entorns esdevé un problema real, planteja’t Terragrunt. Adoptar-lo massa aviat afegeix complexitat innecessària (recorda la lliçó del Capítol 17 sobre no triar eines complexes per moda).
Una nota sobre alternatives
Convé saber que Terragrunt no és l’única opció. El mateix Terraform ha anat incorporant millores, i plataformes com Terraform Cloud / HCP Terraform (que veurem al Capítol 22) també ajuden a gestionar entorns. Terragrunt segueix sent molt popular, però l’ecosistema evoluciona; tria segons el que el teu equip necessiti i conegui.
El que has de recordar
- DRY («Don't Repeat Yourself») és el principi de no repetir codi: cada cosa ha d’estar en un sol lloc, per no haver-la de canviar a molts llocs.
- Terragrunt és una eina que embolcalla Terraform (no el reemplaça) per reduir la repetició en gestionar múltiples entorns. Com un «assistent a la conducció» sobre el motor de Terraform.
- Resol: configuració del backend sense repetir, valors comuns en un lloc, menys codi per entorn (només les diferències) i orquestració de dependències entre components.
- No l’adoptis des del principi: comença amb Terraform + directoris per entorn (subcap. 19.2), i passa’t a Terragrunt només si la repetició esdevé un problema real. No afegeixis complexitat per moda.
A l’últim subcapítol del capítol veurem com es gestionen els valors de cada entorn en detall: les variables d’entorn i els fitxers .tfvars.
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
