És l’hora de la veritat! En aquest capítol construiràs la teva primera infraestructura real amb Terraform, ajuntant tot el que has après: els serveis d’AWS de la Part II i el llenguatge Terraform de la Part III. Comencem pels fonaments de tota arquitectura: una VPC amb subxarxes. Recorda els conceptes del Capítol 6, que ara escriuràs en codi.

Què construirem

Al llarg del capítol aixecarem una arquitectura senzilla però completa:

┌──────────── VPC (10.0.0.0/16) ────────────┐
│                                            │
│   ┌─ Subxarxa pública (10.0.1.0/24) ─┐     │
│   │   (aquí hi anirà el nostre servidor)   │
│   └─────────────────────────────────┘      │
│                                            │
│   + Internet Gateway (porta a internet)    │
│   + Route Table (rutes)                    │
└────────────────────────────────────────────┘

En aquest subcapítol creem la VPC, una subxarxa i la connectivitat bàsica a internet. En els següents hi afegirem el servidor, el tallafoc, la IP i els outputs.

Pas 1: Configurar el provider

Tot projecte comença configurant el provider d’AWS (recorda el subcapítol 11.1). Creem un fitxer, per exemple main.tf:

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

provider "aws" {
  region = "eu-west-1"   # Irlanda (tria la teva regió, Capítol 3)
}

Pas 2: Crear la VPC

La VPC és la nostra xarxa privada (recorda el subcapítol 6.1). Amb un rang 10.0.0.0/16:

resource "aws_vpc" "principal" {
  cidr_block           = "10.0.0.0/16"
  enable_dns_support   = true
  enable_dns_hostnames = true

  tags = {
    Name = "la-meva-primera-vpc"
  }
}
  • cidr_block defineix el rang d’adreces (subcapítol 6.1).
  • Les opcions enable_dns_* permeten que els recursos tinguin noms DNS (útil perquè el servidor tingui nom).
  • tags dona un nom llegible al recurs (molt recomanable etiquetar-ho tot).

Pas 3: Crear una subxarxa pública

Dins la VPC, creem una subxarxa (subcapítol 6.2). La fem en una zona de disponibilitat concreta:

resource "aws_subnet" "publica" {
  vpc_id                  = aws_vpc.principal.id    # ← referència a la VPC
  cidr_block              = "10.0.1.0/24"
  availability_zone       = "eu-west-1a"
  map_public_ip_on_launch = true                    # IP pública automàtica

  tags = {
    Name = "subxarxa-publica"
  }
}

Fixa’t en vpc_id = aws_vpc.principal.id: és una referència (subcapítol 10.3). Li diem a la subxarxa «pertanys a la VPC que he creat abans». Això crea la dependència: Terraform sap que ha de crear la VPC primer.

map_public_ip_on_launch = true fa que els recursos en aquesta subxarxa rebin una IP pública automàticament, part del que la converteix en «pública».

Pas 4: Crear l’Internet Gateway

Perquè la subxarxa sigui realment pública, necessita una porta a internet (subcapítol 6.3):

resource "aws_internet_gateway" "igw" {
  vpc_id = aws_vpc.principal.id

  tags = {
    Name = "el-meu-igw"
  }
}

Això crea l’Internet Gateway i el connecta a la nostra VPC.

Pas 5: Crear la Route Table i associar-la

L’Internet Gateway per si sol no n’hi ha prou: cal dir-li a la subxarxa que utilitzi aquest gateway per sortir a internet. Això es fa amb una taula de rutes (subcapítol 6.4):

resource "aws_route_table" "publica" {
  vpc_id = aws_vpc.principal.id

  route {
    cidr_block = "0.0.0.0/0"                       # tot internet
    gateway_id = aws_internet_gateway.igw.id       # surt per l’IGW
  }

  tags = {
    Name = "rt-publica"
  }
}

resource "aws_route_table_association" "publica" {
  subnet_id      = aws_subnet.publica.id
  route_table_id = aws_route_table.publica.id
}

Això és exactament el que vam veure al subcapítol 6.4: la ruta 0.0.0.0/0 → Internet Gateway és el que converteix la subxarxa en pública. El route_table_association connecta la taula amb la nostra subxarxa.

El resultat

Amb aquests cinc passos tens una xarxa funcional:

✓ VPC (10.0.0.0/16)
✓ Subxarxa pública (10.0.1.0/24) a eu-west-1a
✓ Internet Gateway connectat
✓ Route Table que envia el trànsit d’internet per l’IGW
✓ Associació de la taula a la subxarxa

Si ara executessis terraform init i terraform plan (subcapítol 11.4), veuries una cosa com:

Plan: 5 to add, 0 to change, 0 to destroy.
  + aws_vpc.principal
  + aws_subnet.publica
  + aws_internet_gateway.igw
  + aws_route_table.publica
  + aws_route_table_association.publica

I amb terraform apply (escrivint yes), Terraform crearia tota la xarxa en l’ordre correcte automàticament, gràcies a les referències entre recursos.

El poder d’això: acabes de definir una xarxa completa en unes poques línies de text. Aquesta mateixa configuració la pots reutilitzar, versionar a Git i recrear tantes vegades com vulguis (recorda els problemes del provisionament manual del Capítol 9). I si l’esborres amb destroy, desapareix netament.

El que has de recordar

  • Tota arquitectura comença per la xarxa: VPC + subxarxes + connectivitat.
  • Els passos: configurar el provider, crear la VPC, la subxarxa, l’Internet Gateway, la Route Table i la seva associació.
  • Les referències (aws_vpc.principal.id) connecten els recursos i creen les dependències, perquè Terraform els creï en l’ordre correcte.
  • La ruta 0.0.0.0/0 cap a l’Internet Gateway és el que fa pública la subxarxa (igual que vam veure al Capítol 6, ara en codi).
  • Etiqueta (tags) tots els teus recursos amb noms llegibles: és una bona pràctica.

En el següent subcapítol posarem un servidor EC2 dins d’aquesta subxarxa pública.

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