Terraform per si sol no sap res d’AWS, ni d’Azure, ni de cap núvol. Necessita un «traductor» que sàpiga parlar amb cada plataforma. Aquest traductor és el provider. En aquest subcapítol entendràs què és un provider, com Terraform es comunica amb AWS i com es configura. És la peça que connecta el teu codi amb el núvol real.

Què és un provider

Un provider és un complement (plugin) que ensenya a Terraform a comunicar-se amb una plataforma concreta. El provider d’AWS sap com crear, llegir, modificar i esborrar recursos d’AWS a través de la seva API.

Analogia: Terraform és com una persona que vol donar instruccions a molts països diferents. El provider és l’intèrpret/traductor que coneix l’idioma de cada país. El provider d’AWS «parla AWS»; el d’Azure «parla Azure». Tu dones les instruccions en HCL i el provider les tradueix a l’idioma del núvol corresponent.

Això és el que fa que Terraform sigui multi-núvol (recorda el Capítol 9): el mateix Terraform fa servir diferents providers per parlar amb diferents plataformes. Hi ha centenars de providers: AWS, Azure, GCP, Kubernetes, GitHub, Cloudflare, i molts més.

Com es comunica Terraform amb AWS

El flux, simplificat, és aquest:

El teu codi HCL  →  Terraform  →  Provider d’AWS  →  API d’AWS  →  La teva infraestructura
  (.tf)            (el motor)     (el traductor)      (internet)      (recursos reals)
  1. Tu escrius el que vols en HCL (resource "aws_instance"...).
  2. Terraform processa el teu codi.
  3. El provider d’AWS tradueix això en trucades a l’API d’AWS (les mateixes que fa servir la consola web per darrere).
  4. AWS crea/modifica/esborra els recursos reals.

Cada recurs que comença per aws_ (com aws_instance, aws_s3_bucket) el gestiona el provider d’AWS.

Com es declara el provider

Al teu codi declares quin provider vols fer servir i el configures. Això sol anar en un bloc terraform (per fixar la versió) i un bloc provider:

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
  }
}

provider "aws" {
  region = "eu-west-1"
}

Desglossem:

  • El bloc terraform { required_providers { ... } } declara que necessites el provider d’AWS, d’on descarregar-lo (hashicorp/aws) i quina versió (~> 5.0 vol dir «versió 5.x»).
  • El bloc provider "aws" { ... } el configura: aquí indiques, per exemple, la regió on treballar (recorda el Capítol 3).

Per què fixar la versió importa: els providers s’actualitzen i a vegades canvien el seu comportament. Fixar la versió (~> 5.0) garanteix que el teu codi segueixi funcionant igual encara que surtin versions noves. És una bona pràctica per evitar sorpreses.

L’autenticació: com demostra Terraform qui és?

Perquè AWS li permeti crear recursos, Terraform necessita credencials (recorda IAM, Capítol 7). Però, molt important, les credencials no s’escriuen al codi. Hi ha formes segures de proporcionar-les:

Mètode Com funciona Quan fer-lo servir
AWS CLI configurat Terraform fa servir les credencials de l’AWS CLI de la teva màquina Desenvolupament local
Variables d’entorn AWS_ACCESS_KEY_ID, etc. a l’entorn Local i automatització
Rol d’IAM La màquina (EC2) o el sistema de CI/CD assumeix un rol Producció i CI/CD (el millor)

⚠️ Regla de seguretat crítica: MAI escriguis claus d’accés dins del teu codi .tf. Si ho puges a Git, estaries filtrant les teves credencials (recorda els desastres del Capítol 7). En el seu lloc, fes servir l’AWS CLI, variables d’entorn o, el millor, rols d’IAM (subcapítol 7.4). Terraform les recull automàticament de l’entorn, sense que apareguin al codi.

terraform init: descarregar el provider

Abans de poder fer servir un provider, cal descarregar-lo. Això ho fa la comanda terraform init, que és la primera comanda que executes en qualsevol projecte de Terraform.

terraform init
  → descarrega el provider d’AWS (i altres que facis servir)
  → prepara el directori de treball
  → "Terraform has been successfully initialized!"

init llegeix la teva configuració, descarrega els providers necessaris i deixa tot a punt per a plan i apply (recorda el cicle del subcapítol 9.4). L’executes:

  • La primera vegada que comences un projecte.
  • Cada cop que afegeixes un provider nou o canvies la seva versió.
  • (També configura el backend de l’estat, que veurem al subcapítol 11.3.)

Així, el cicle complet de Terraform és en realitat: initplanapply → ... → destroy.

Múltiples providers i alias

Per a casos avançats, pots fer servir diversos providers alhora o el mateix provider amb configuracions diferents. Per exemple, desplegar a dues regions d’AWS fent servir dues configuracions del provider AWS amb alias:

provider "aws" {
  region = "eu-west-1"      # provider per defecte
}

provider "aws" {
  alias  = "us"
  region = "us-east-1"      # un segon provider per a una altra regió
}

Això és útil per a arquitectures multi-regió (Capítol 26) o multi-compte (Capítol 30). No et preocupis per això ara; n’hi ha prou amb saber que és possible.

El que has de recordar

  • Un provider és el «traductor» que permet a Terraform parlar amb una plataforma. El provider d’AWS tradueix el teu HCL en trucades a l’API d’AWS.
  • Gràcies als providers, Terraform és multi-núvol (n’hi ha centenars: AWS, Azure, GCP, Kubernetes…).
  • Es declara amb required_providers (fixant la versió, bona pràctica) i es configura amb el bloc provider (regió, etc.).
  • Les credencials MAI van al codi: fes servir AWS CLI, variables d’entorn o, millor, rols d’IAM.
  • terraform init descarrega els providers i és la primera comanda que executes en un projecte.

Al següent subcapítol veurem el concepte més característic (i a vegades confús) de Terraform: el fitxer d’estat (terraform.tfstate) i per què és tan important.

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