Tanquem el capítol de backends i estat amb una comanda molt útil en el món real: terraform import. Serveix per resoldre una situació molt comuna: tens recursos a AWS que es van crear a mà (o amb una altra eina) i vols que Terraform comenci a gestionar-los. En lloc d’esborrar-los i recrear-los, els «adoptes» al teu estat. Vegem com.

El problema: infraestructura que ja existeix

Poques empreses comencen de zero amb Terraform. El més habitual és que ja tinguin infraestructura creada abans d’adoptar la Infraestructura com a Codi:

  • Recursos creats a mà des de la consola d’AWS (clicant).
  • Recursos creats amb scripts antics o altres eines.
  • Infraestructura «heretada» que ningú recorda gaire bé com es va muntar.

Ara vols gestionar tot això amb Terraform (recorda els avantatges del Capítol 9). Però hi ha un problema: Terraform no coneix aquests recursos, perquè no són al seu estat. Si simplement escrius el codi i fas apply, Terraform intentaria crear-ne de nous, duplicant el que ja existeix! I no pots esborrar els originals sense més, perquè estan en producció.

Recurs real a AWS (creat a mà)         ✓ existeix
Estat de Terraform                     ✗ no el coneix
   → si fas apply, Terraform crea un DUPLICAT ⚠️

La solució: terraform import

terraform import resol això: li diu a Terraform «aquest recurs que ja existeix a AWS, registra’l al teu estat i associa’l a aquest bloc del meu codi». Així, Terraform comença a gestionar el recurs existent, sense crear-lo de nou.

Recurs real a AWS  ──(terraform import)──►  ara està a l’ESTAT
                                              i Terraform el gestiona

Analogia: import és com adoptar quelcom que ja existeix. Imagina que et mudes a una casa que ja té mobles. No els llences per comprar-ne d’iguals: els registres com a teus i comences a gestionar-los. terraform import fa això amb la infraestructura: adopta el que ja hi ha en comptes de recrear-ho.

Com funciona, pas a pas

Importar un recurs té dues parts que has de fer juntes:

Pas 1: Escriure el bloc de codi

Primer, escrius al teu codi Terraform el bloc resource que representarà aquest recurs existent. Per exemple, si tens una instància EC2 creada a mà:

resource "aws_instance" "servidor_heretat" {
  # de moment, pot anar força buit;
  # el completaràs perquè coincideixi amb el recurs real
}

Pas 2: Executar l’import

Després, executes la comanda import indicant dues coses: a quin bloc del teu codi correspon, i l’ID real del recurs a AWS:

terraform import aws_instance.servidor_heretat  i-0a1b2c3d4e5f67890
                 │                                │
                 │                                └── ID real a AWS
                 └── el bloc del teu codi

Terraform busca aquesta instància (i-0a1b2c3d4e5f...) a AWS i la registra a l’estat, associada al teu bloc servidor_heretat. A partir d’ara, Terraform sap que aquest recurs li pertany.

Pas 3: Completar el codi perquè coincideixi

Aquí hi ha la part que requereix cura. Després d’importar, el teu codi ha de descriure el recurs tal com és en realitat. Si el teu codi no coincideix amb el recurs real, el següent plan mostraria canvis (Terraform voldria «ajustar» el recurs al teu codi incomplet).

Després d’importar:  terraform plan
   → si el codi coincideix amb la realitat → "No changes" ✓
   → si NO coincideix → mostra diferències; ajusta el teu codi fins que quadri

L’objectiu és arribar a un plan que digui «sense canvis»: això confirma que el teu codi reflecteix exactament el recurs real, i que l’adopció ha estat neta.

El repte: importar molta infraestructura

Importar un recurs és senzill. El problema arriba quan has d’importar centenars de recursos heretats, escrivint el codi de cadascun i ajustant-lo a mà. És una feina feixuga. Per això existeixen ajudes:

  • Blocs import al codi (versions modernes de Terraform): permeten declarar les importacions al propi codi de manera més ordenada, i fins i tot generar un esborrany del codi del recurs automàticament.
  • Eines de tercers com Terraformer, que escanegen el teu compte d’AWS i generen el codi i l’estat de molts recursos alhora. Útils per a migracions grans, tot i que el resultat sempre convé revisar-lo.

Exemple del món real: una empresa porta anys creant infraestructura a mà a AWS i decideix «posar ordre» adoptant Terraform. En comptes de recrear-ho tot (impossible, està en producció), van important els seus recursos clau a l’estat de Terraform, escrivint el codi que els descriu, fins que plan diu «sense canvis». A partir d’aquí, gestionen aquesta infraestructura amb codi, amb tots els avantatges del Capítol 9, sense haver causat cap interrupció.

Quan utilitzar import (i un advertiment)

  • Fes-lo servir quan tinguis recursos existents valuosos (en producció) que vols gestionar amb Terraform sense recrear-los.
  • Fes-ho amb cura: importar toca l’estat (subcapítols 20.2 i 20.3), així que aplica les mateixes precaucions: còpia de seguretat, ningú més treballant, i verifica amb plan al final.
  • No t’obsessionis amb importar-ho absolutament tot de cop. És vàlid anar adoptant recursos a poc a poc, començant pels més importants.

El que has de recordar

  • terraform import serveix perquè Terraform adopti recursos que ja existeixen a AWS (creats a mà o amb una altra eina), registrant-los al seu estat sense recrear-los.
  • Sense import, si escrius el codi d’un recurs que ja existeix i fas apply, Terraform crearia un duplicat. Import evita això.
  • Procés: escriu el bloc resource, executa terraform import <bloc> <ID-real>, i completa el codi fins que plan digui «sense canvis» (senyal d’adopció neta).
  • Com adoptar mobles d’una casa nova en comptes de llençar-los i comprar-ne d’iguals.
  • Per a molts recursos, hi ha ajudes: blocs import (que generen esborranys de codi) i eines com Terraformer.
  • Aplica les precaucions de gestió d’estat (còpia de seguretat, plan de verificació) i adopta els recursos a poc a poc, començant pels més importants.

Has acabat el Capítol 20! Ja domines l’estat de Terraform a fons: backends, locking, migració i importació. Al Capítol 21 veurem com assegurar la qualitat i seguretat de la teva infraestructura amb testing: validació, anàlisi de seguretat i tests d’integració.

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