Ja saps que un mòdul és una caixa amb entrades i sortides (subcapítol 18.1). Ara veurem com s’utilitza realment: com li passes valors, com reculls els seus resultats i com connectes diversos mòduls entre si per compondre una infraestructura completa. Aquesta és la part pràctica que converteix els mòduls en una eina potentíssima.

Cridar un mòdul

Per utilitzar un mòdul, s’utilitza un bloc module. Li indiques on és (source) i li passes els valors de les seves variables d’entrada:

module "la_meva_xarxa" {
  source = "./modul-vpc"      # on és el mòdul

  # valors per a les variables d’entrada del mòdul:
  cidr_vpc = "10.0.0.0/16"
  nom      = "projecte-botiga"
}

Això és com «cridar la recepta» del subcapítol anterior, indicant els ingredients concrets. Terraform agafarà el mòdul i crearà els seus recursos amb aquests valors.

Fixa’t en el poderós que és: amb aquestes poques línies, crees tota la VPC amb subxarxes, gateway i rutes que el mòdul encapsula. La complexitat està amagada; tu només passes dos valors.

Reutilitzar el mateix mòdul diverses vegades

Com una funció, pots cridar el mateix mòdul diverses vegades amb valors diferents. Per exemple, crear la xarxa de tres entorns:

module "xarxa_dev" {
  source   = "./modul-vpc"
  cidr_vpc = "10.0.0.0/16"
  nom      = "desenvolupament"
}

module "xarxa_pro" {
  source   = "./modul-vpc"
  cidr_vpc = "10.1.0.0/16"
  nom      = "produccio"
}

Un únic mòdul, dues xarxes independents, sense duplicar codi. Si millores el mòdul, totes dues xarxes se’n beneficien.

Recollir les sortides (outputs) d’un mòdul

El mòdul retorna informació a través dels seus outputs (subcapítol 18.1). Per utilitzar aquesta informació des de fora, s’hi accedeix amb module.<nom>.<output>:

module.la_meva_xarxa.id_vpc
│      │       │
│      │       └── l’output que va definir el mòdul
│      └────────── el nom que li vas donar en cridar-lo
└───────────────── la paraula clau "module"

Per exemple, si vols mostrar l’ID de la VPC que va crear el mòdul:

output "id_de_la_meva_vpc" {
  value = module.la_meva_xarxa.id_vpc
}

Connectar mòduls: les dependències

Aquí hi ha la veritable màgia de la composició. Pots connectar la sortida d’un mòdul amb l’entrada d’un altre, igual que connectaves recursos al subcapítol 12.4. Això et permet construir arquitectures complexes component mòduls petits.

Imagina dos mòduls: un crea la xarxa (modul-vpc) i un altre crea servidors (modul-servidors). El mòdul de servidors necessita saber en quina VPC i subxarxa col·locar-se. Li passes aquesta informació utilitzant els outputs del mòdul de xarxa:

module "la_meva_xarxa" {
  source   = "./modul-vpc"
  cidr_vpc = "10.0.0.0/16"
  nom      = "botiga"
}

module "els_meus_servidors" {
  source = "./modul-servidors"

  # connectem: la sortida del mòdul de xarxa entra al de servidors
  id_vpc    = module.la_meva_xarxa.id_vpc        # ← output d’un mòdul
  id_subxarxa = module.la_meva_xarxa.id_subxarxa #    com a entrada d’un altre
}
   ┌─ mòdul "la_meva_xarxa" ─┐         ┌─ mòdul "els_meus_servidors" ─┐
   │  crea la VPC            │ ──────► │  crea servidors DINS         │
   │  output: id_vpc         │ id_vpc  │  d’aquesta VPC               │
   └─────────────────────────┘         └──────────────────────────────┘

Les dependències es dedueixen soles (un altre cop)

Igual que amb els recursos (subcapítol 12.4), aquesta connexió crea automàticament la dependència: com que el mòdul de servidors utilitza una sortida del mòdul de xarxa, Terraform sap que ha de crear primer la xarxa i després els servidors. No especifiques l’ordre; es dedueix de les connexions. La filosofia declarativa funciona també entre mòduls.

Exemple del món real: una arquitectura completa es compon de diversos mòduls encadenats: un mòdul de xarxa que produeix la VPC, un mòdul de base de dades que es col·loca a la xarxa, un mòdul d’aplicació que utilitza la xarxa i la base de dades, i un mòdul de balancejador davant de l’aplicació. Cada mòdul és una peça reutilitzable i ben definida; les sortides d’uns alimenten les entrades d’altres, i Terraform ho orquestra tot en l’ordre correcte. És com construir amb peces de Lego: cada peça és simple, però combinades formen quelcom gran.

La filosofia: compondre peces petites

Aquesta manera de treballar —mòduls petits i ben definits que es componen connectant entrades i sortides— és el cor d’un bon disseny amb Terraform. En comptes d’un fitxer gegant i inmanejable, tens peces:

  • Reutilitzables: cada mòdul serveix en molts projectes.
  • Comprensibles: cada peça fa una cosa i és fàcil d’entendre.
  • Mantenibles: arregles o millores un mòdul i tots els que l’utilitzen se’n beneficien.
  • Combinables: les connectes per formar arquitectures tan complexes com necessitis.

El que has de recordar

  • Per utilitzar un mòdul, s’utilitza un bloc module amb source (on és) i els valors de les seves variables d’entrada. És «cridar la recepta» amb ingredients concrets.
  • Pots reutilitzar el mateix mòdul diverses vegades amb valors diferents (ex. xarxes de dev i producció), sense duplicar codi.
  • Les sortides d’un mòdul es llegeixen amb module.<nom>.<output> i permeten utilitzar la seva informació des de fora.
  • Connectes mòduls passant els outputs d’un com a entrades d’un altre; això crea automàticament la dependència i l’ordre de creació (igual que entre recursos).
  • La filosofia: compondre peces petites, reutilitzables i ben definides (com Lego) per construir arquitectures grans, mantenibles i comprensibles.

Al següent subcapítol veurem d’on treure mòduls: els que tu crees (locals) versus els públics del Terraform Registry, llestos per utilitzar.

Cloud, AWS & Terraform — De zero a expert

Capítol 1 · Què és el cloud computing

Capítol 2 · El mercat cloud i els grans proveïdors

Capítol 3 · Regions, zones de disponibilitat i edge

Capítol 4 · Càlcul: EC2

Capítol 5 · Emmagatzematge: S3

Capítol 6 · Xarxes: VPC

Capítol 7 · Identitat i accés: IAM

Capítol 8 · Bases de dades gestionades

Capítol 9 · Per què Infraestructura com a Codi

Capítol 10 · HCL: el llenguatge de Terraform

Capítol 11 · Providers i estat

Capítol 12 · La teva primera infraestructura real amb Terraform

Capítol 13 · Balanceig de càrrega i autoescalat

Capítol 14 · Serverless amb Lambda

Capítol 15 · Missatgeria i esdeveniments

Capítol 16 · Lliurament de contingut i DNS

Capítol 17 · Contenidors a AWS

Capítol 18 · Mòduls: reutilització i composició

Capítol 19 · Workspaces i gestió d'entorns

Capítol 20 · Backends remots i locking

Capítol 21 · Testing d'infraestructura

Capítol 22 · Terraform en CI/CD

Capítol 23 · Seguretat en profunditat

Capítol 24 · Observabilitat: logs, mètriques i traces

Capítol 25 · Optimització de costos

Capítol 26 · Alta disponibilitat i disaster recovery

Capítol 27 · Well-Architected Framework d'AWS

Capítol 28 · Arquitectures serverless a escala

Capítol 29 · Plataformes de dades a AWS

Capítol 30 · Multi-compte i landing zones

Capítol 31 · Platform Engineering i Internal Developer Platform

Capítol 32 · Certificacions AWS rellevants

Capítol 33 · Projectes per consolidar el que s'ha après

Capítol 34 · Recursos i comunitat

© Copyright 2024. Tots els drets reservats