Salta el contingut

Introducció a Terraform i Infrastructure as Code

1. Introducció a Terraform i Infrastructure as Code

El Problema que Resolem: L'Era del Cloud

Imagina que treballes en una empresa que necessita desplegar una aplicació web al cloud. Necessites crear diversos recursos: servidors virtuals, una base de dades, un balancejador de càrrega, regles de firewall, una xarxa privada virtual, emmagatzematge per backups, i certificats SSL. Si haguessis de fer tot això manualment a través de la consola web del teu proveïdor cloud (AWS, Azure, Google Cloud...), seria un procés extremadament tediós i propens a errors.

Primer, hauries d'entrar a la consola, navegar per múltiples panells, omplir formularis, esperar que cada recurs es creï abans de poder crear el següent (perquè alguns recursos depenen d'altres), i finalment verificar manualment que tot està configurat correctament. Aquest procés podria prendre hores. I si necessites crear exactament la mateixa infraestructura en un altre entorn (per exemple, un entorn de proves o una segona regió geogràfica), hauries de repetir tot el procés des de zero, intentant recordar cada clica que vas fer.

Però el problema va més enllà de la simple tediositat. Què passa quan un membre de l'equip fa un canvi manual en un recurs i ningú més ho sap? Com documentes l'estat exacte de la teva infraestructura? Com reverteixs un canvi si alguna cosa va malament? Com assegures que tots els entorns (desenvolupament, staging, producció) són consistents? Com fas auditoria de qui va fer què i quan?

Aquests són els problemes que Terraform resol. Terraform és una eina d'Infrastructure as Code (IaC) que et permet definir tota la teva infraestructura utilitzant fitxers de configuració, i després crear, modificar i destruir aquesta infraestructura de manera automatitzada i consistent.

Què és Terraform?

Terraform és una eina open source creada per HashiCorp el 2014. A diferència d'Ansible o Puppet, que es centren en configurar sistemes operatius i aplicacions (configuration management), Terraform es centra en crear i gestionar la infraestructura mateixa: xarxes, servidors, bases de dades, DNS, storage, i qualsevol altre recurs que el teu proveïdor cloud ofereix.

Terraform utilitza un llenguatge declaratiu anomenat HCL (HashiCorp Configuration Language) on simplement descrius l'estat final que vols que tingui la teva infraestructura. Per exemple, pots dir "vull 3 servidors amb aquestes característiques, una base de dades d'aquestes dimensions, i un load balancer connectant-ho tot". Terraform s'encarrega de determinar l'ordre correcte en què crear aquests recursos, gestionar les dependencies entre ells, i assegurar-se que l'estat real de la infraestructura coincideix amb el que has descrit.

El que fa Terraform realment poderós és que és agnòstic del proveïdor. El mateix Terraform pot gestionar recursos a AWS, Azure, Google Cloud, DigitalOcean, VMware, OpenStack, i centenars d'altres proveïdors. Fins i tot pot gestionar recursos que no són "cloud" en el sentit tradicional: GitHub repositories, Cloudflare DNS records, Kubernetes clusters, bases de dades SaaS com MongoDB Atlas o Snowflake, i molts més. Això significa que pots utilitzar la mateixa eina i el mateix flux de treball per gestionar tota la teva infraestructura, independentment d'on estigui allotjada.

Nota de versió: A l'hora d'escriure aquest document (gener 2025), la versió més recent de Terraform és la 1.9.x. HashiCorp recomana utilitzar sempre una versió recent dins de la sèrie 1.x. Pots verificar la darrera versió a la pàgina oficial: https://www.terraform.io/downloads

Infrastructure as Code: Més que una Eina, una Metodologia

Terraform no és només una eina, és una implementació d'una filosofia: Infrastructure as Code (IaC). Aquesta filosofia proposa tractar la infraestructura igual que el codi de les aplicacions. Això significa:

Versionat: Igual que el codi de la teva aplicació està en Git, la configuració de la teva infraestructura també hauria d'estar-hi. Cada canvi en la infraestructura és un commit, amb un missatge descriptiu, un autor, i una data. Pots veure la història completa de com ha evolucionat la teva infraestructura al llarg del temps. Si alguna cosa va malament, pots fer un revert a una versió anterior exactament igual que faries amb el codi de l'aplicació.

Revisió: Els canvis en la infraestructura poden (i haurien de) passar pel mateix procés de revisió que el codi. Abans de crear un nou servidor o modificar una regla de firewall, pots crear una pull request, els teus companys poden revisar els canvis, discutir-los, i aprovar-los. Això prevé errors i assegura que múltiples ulls han verificat cada canvi.

Testing: Pots aplicar proves automatitzades a la teva infraestructura. Abans de desplegar canvis a producció, pots crear la infraestructura en un entorn de test, verificar que funciona correctament, i després destruir-la. Pots fins i tot integrar tests automatitzats que verifiquen que la infraestructura compleix amb polítiques de seguretat o cost.

Documentació Auto-generada: Quan la teva infraestructura és codi, el codi mateix és la documentació. Vols saber quants servidors tens i de quina mida? Mira el codi de Terraform. Vols saber quines regles de firewall estan configurades? Està tot en el codi. I millor encara, aquesta documentació mai està desactualitzada perquè és la font de veritat de com es crea la infraestructura.

Reutilització: Igual que pots reutilitzar funcions i llibreries en el teu codi d'aplicació, pots reutilitzar components d'infraestructura. Pots crear un mòdul de Terraform que defineix "un servidor web estàndard amb totes les millors pràctiques de seguretat" i després reutilitzar aquest mòdul arreu. Quan millores el mòdul (per exemple, afegint una configuració de seguretat nova), tots els llocs que l'utilitzen es beneficien automàticament.

La Proposta de Valor de Terraform

Per què hauries d'invertir temps en aprendre Terraform quan pots crear recursos manualment o utilitzar scripts personalitzats? La proposta de valor de Terraform es pot resumir en diversos punts clau:

Velocitat i Eficiència: El que podria prendre hores manualment, Terraform ho fa en minuts. Crear una infraestructura completa amb desenes de recursos interconnectats es converteix en executar una sola comanda: terraform apply.

Consistència i Predictibilitat: Cada vegada que executes el mateix codi de Terraform, obtens exactament la mateixa infraestructura. No hi ha variacions degudes a errors humans, oblits, o interpretacions diferents de la documentació. Això és especialment valuós quan tens múltiples entorns que han de ser idèntics.

Gestió del Canvi Segura: Abans d'aplicar qualsevol canvi, Terraform et mostra exactament què farà: quins recursos crearà, modificarà o destruirà. Aquest "plan" et permet revisar els canvis abans d'aplicar-los, prevenint sorpreses desagradables.

Visibilitat i Transparència: Tot està en codi, versionat en Git. Saps exactament qui va fer cada canvi, quan, i per què (a través dels missatges de commit). No més canvis misteriosos que ningú pot explicar.

Multi-Cloud i Híbrid: Si alguna vegada necessites migrar d'un cloud a un altre, o treballar amb múltiples clouds simultàniament, Terraform fa aquest procés molt més manejable. El mateix flux de treball funciona per a qualsevol proveïdor.

Ecosistema i Comunitat: Terraform té una comunitat enorme. Gairebé qualsevol servei cloud o SaaS té un provider de Terraform. Hi ha milers de mòduls pre-construïts que pots reutilitzar. Hi ha eines, best practices, i recursos d'aprenentatge abundants.

Terraform vs Altres Eines: Entendre les Diferències

És important entendre què és Terraform i què no és, especialment en comparació amb altres eines que potser ja coneixes.

Terraform vs Configuration Management (Ansible, Puppet, Chef):

Configuration management tools com Ansible, Puppet o Chef se centren en configurar servidors que ja existeixen. Instal·len software, configuren fitxers, gestionen serveis, etc. Terraform, per contra, crea els servidors mateixos (i tot el que hi ha al seu voltant: xarxes, storage, DNS, etc.).

La distinció clau és aquesta: Terraform et dona els servidors, Ansible els configura. En la pràctica, sovint utilitzes ambdós junts: primer Terraform crea la infraestructura, i després Ansible (o Puppet) configura els sistemes operatius i les aplicacions.

Hi ha un cert solapament: Terraform pot fer algunes tasques bàsiques de configuració (per exemple, executant scripts d'inicialització quan crea un servidor), i Ansible pot crear alguns recursos cloud (té mòduls per AWS, Azure, etc.). Però cada eina brilla en el seu àmbit principal.

Terraform vs CloudFormation (AWS) / ARM Templates (Azure) / Cloud Deployment Manager (GCP):

Cada gran proveïdor cloud té la seva pròpia eina d'Infrastructure as Code: AWS té CloudFormation, Azure té ARM Templates (i ara Bicep), i Google Cloud té Cloud Deployment Manager. Aquestes eines fan essencialment el mateix que Terraform, però només per al seu cloud específic.

La gran diferència és que Terraform és multi-cloud. Si utilitzes CloudFormation, estàs completament bloquejat a AWS. Si alguna vegada necessites utilitzar Azure o Google Cloud, has d'aprendre una eina completament diferent amb una sintaxi completament diferent. Amb Terraform, aprens un sol llenguatge (HCL) i un sol flux de treball, i pots utilitzar-lo per qualsevol proveïdor.

A més, Terraform pot gestionar recursos que van més enllà del cloud: GitHub, Cloudflare, DataDog, PagerDuty, i centenars més. CloudFormation només pot gestionar recursos d'AWS.

Terraform vs Scripts Personalitzats:

Podries pensar: "podria simplement escriure un script de Bash o Python que utilitzi l'API del meu cloud provider per crear recursos". I tècnicament sí, podries. Però estaríeu reinventant la roda de manera molt incompleta.

Terraform gestiona la complexitat per tu: dependencies entre recursos, idempotència (executar-lo múltiples vegades no trenca res), gestió d'estat (recordar què has creat), detecció de drift (detectar canvis manuals), paral·lelització (crear múltiples recursos simultàniament quan és segur fer-ho), rollback en cas d'error, i molt més. Implementar tot això en un script personalitzat seria un projecte enorme i propens a errors.