MercadoFresco ja té una xarxa pròpia, un tallafocs per capes, un balancejador que reparteix el trànsit entre dues zones de disponibilitat i una CDN que serveix el catàleg des de Madrid per 0,97 USD al mes. I tanmateix, un client no pot comprar res, perquè la botiga respon a alb-mercadofresco-tienda-1234567890.eu-west-1.elb.amazonaws.com i el catàleg a d111111abcdef8.cloudfront.net. A més, els dos certificats d'ACM que vam demanar a les lliçons 03-03 i 03-04 continuen en PENDING_VALIDATION, esperant uns registres DNS que encara no existeixen.

Amazon Route 53 és el servei de DNS d'AWS: tradueix noms a adreces, sí, però a més comprova la salut de les destinacions i decideix a quina envia cada visitant segons el pes, la latència, el país o l'estat del sistema. El seu nom ve del port 53, el port del DNS.

En aquesta lliçó la Marta fa que mercadofresco.example apunti al núvol, valida els certificats, tanca l'HTTPS pendent i deixa preparades les polítiques d'encaminament que MercadoFresco necessitarà: el canari del 10 % per a desplegaments segurs, la geolocalització per obrir a Portugal i la commutació per error a una pàgina de manteniment. I amb això tanquem el mòdul 3.

Contingut

  1. Repàs pràctic de DNS: zones, delegació, resolució i TTL
  2. Registrar i transferir dominis a Route 53
  3. Zones allotjades públiques i privades
  4. Tipus de registre
  5. Registres d'àlies: la peça que només té AWS
  6. Validar el certificat d'ACM per DNS
  7. Comprovacions d'estat de Route 53
  8. Polítiques d'encaminament, una a una
  9. Configurar el DNS de MercadoFresco per consola i per CLI
  10. Route 53 Resolver i les regles de reenviament cap a l'oficina
  11. Costos de Route 53 i neteja
  12. Tancament del mòdul: l'arquitectura de xarxa completa

Repàs pràctic de DNS: zones, delegació, resolució i TTL

El DNS (Domain Name System) és una base de dades distribuïda i jeràrquica que tradueix noms a adreces. La seva estructura es llegeix de dreta a esquerra:

                                    . (arrel)
                                    |
                      +-------------+-------------+
                      |             |             |
                    .com          .example      .org        ← dominis de nivell superior (TLD)
                                    |
                            mercadofresco.example            ← domini de segon nivell (el nostre)
                                    |
                +-------------------+-------------------+
                |                   |                   |
        www.mercadofresco   api.mercadofresco   admin.mercadofresco   ← subdominis

Una zona és la porció de l'arbre de la qual algú és responsable. Quan MercadoFresco registra mercadofresco.example, es converteix en responsable d'aquella zona i de tot el que en pengi.

La delegació és el mecanisme que connecta els nivells: els servidors de .example no coneixen la IP de la botiga; només saben dir «per a tot el de mercadofresco.example, pregunta a aquests quatre servidors de noms». Això s'expressa amb registres NS.

La resolució recursiva, pas a pas:

sequenceDiagram
    participant N as Navegador<br/>(Sevilla)
    participant R as Resolutor recursiu<br/>(de l'operador)
    participant Arrel as Servidor arrel
    participant TLD as Servidors de .example
    participant R53 as Route 53<br/>(autoritatiu)

    N->>R: IP de www.mercadofresco.example?
    Note over R: El tinc a la memoria cau? No
    R->>Arrel: Qui sap de .example?
    Arrel-->>R: Pregunta als servidors de .example (NS)
    R->>TLD: Qui sap de mercadofresco.example?
    TLD-->>R: ns-123.awsdns-45.com i tres mes (NS)
    R->>R53: IP de www.mercadofresco.example?
    R53-->>R: 13.32.x.x (amb TTL 300)
    R-->>N: 13.32.x.x
    Note over R: Desat a la memoria cau 300 s:<br/>les consultes seguents no surten d'aqui

Quatre conceptes que surten d'aquest diagrama:

  • Route 53 és el servidor autoritatiu: la font de la veritat de la zona.
  • El resolutor recursiu (el de l'operador, o el 8.8.8.8 de Google) fa la feina d'anar preguntant i desa el resultat a la memòria cau.
  • El TTL és quants segons es pot desar aquella resposta a la memòria cau. Route 53 només cobra les consultes que li arriben, així que un TTL alt estalvia diners, però alenteix els canvis.
  • Route 53 fa servir anycast: els mateixos servidors de noms s'anuncien des de molts punts del món, i cada consulta arriba al més proper.

Com triar el TTL:

Situació TTL Raó
Registre estable (MX, TXT de verificació) 86.400 (1 dia) No canvia mai; estalvia consultes
Producció normal 300 (5 min) El valor per defecte sensat de MercadoFresco
Dies abans d'una migració 60 Perquè el canvi es propagui ràpid quan arribi
Durant una migració 60 Poder tornar enrere en un minut
Registres d'àlies (no aplica) Route 53 ho gestiona sol

La tècnica de baixar el TTL a 60 uns quants dies abans d'una migració és la que separa una migració tranquil·la d'un diumenge llarg: el TTL antic ha de caducar a totes les memòries cau del món abans que el nou tingui efecte.

Registrar i transferir dominis a Route 53

Route 53 fa tres coses diferents que convé no confondre:

Funció Què és Es paga
Registre de dominis Comprar mercadofresco.example Quota anual del TLD
DNS autoritatiu Respondre consultes sobre la zona Per zona allotjada i per consulta
Comprovacions d'estat Vigilar destinacions i encaminar segons la seva salut Per comprovació

Es poden fer servir per separat: és perfectament vàlid tenir el domini registrat a un altre proveïdor i el DNS a Route 53. Només cal canviar els servidors de noms al tauler del registrador perquè apuntin als quatre que Route 53 assigna a la zona.

# Comprovar disponibilitat (les ordres de dominis son SEMPRE a us-east-1)
aws route53domains check-domain-availability --profile mercadofresco-dev \
  --region us-east-1 --domain-name mercadofresco.example

# Llistar els dominis ja registrats al compte
aws route53domains list-domains --profile mercadofresco-dev --region us-east-1 \
  --query 'Domains[].{Domini:DomainName,Expira:Expiry,AutoRenovar:AutoRenew}' --output table

Dos ajustos que cal verificar sempre després de registrar un domini:

  • Renovació automàtica activada. Un domini caducat és una botiga apagada, i recuperar-lo pot ser impossible.
  • Bloqueig de transferència activat. Impedeix que algú mogui el domini a un altre registrador sense autorització.

Route 53 inclou a més la privacitat del registre sense cost addicional: les dades de contacte de MercadoFresco no apareixen a les consultes WHOIS públiques.

Zones allotjades públiques i privades

Una zona allotjada (hosted zone) és el contenidor de tots els registres d'un domini. N'hi ha dos tipus i la seva diferència és fonamental:

Zona pública Zona privada
Qui la consulta Tot internet Només les VPC associades
Servidors de noms Quatre de públics d'AWS El resolutor intern (10.0.0.2)
Requereix domini registrat No: es pot inventar
Cost 0,50 USD/mes 0,50 USD/mes
Ús a MercadoFresco mercadofresco.example interno.mercadofresco.example

La zona privada resol un problema molt concret. Avui l'aplicació es connecta a la base de dades amb un nom horrible com mercadofresco-pedidos.abc123xyz.eu-west-1.rds.amazonaws.com. Amb una zona privada associada a vpc-mercadofresco, aquell nom es pot substituir per bd.interno.mercadofresco.example, que a més es pot reapuntar a una altra instància sense tocar la configuració de l'aplicació.

# Zona PUBLICA del domini principal
ZONA_PUB=$(aws route53 create-hosted-zone --profile mercadofresco-dev \
  --name mercadofresco.example \
  --caller-reference "mercadofresco-publica-$(date +%s)" \
  --hosted-zone-config Comment="Zona publica de MercadoFresco",PrivateZone=false \
  --query 'HostedZone.Id' --output text | sed 's|/hostedzone/||')

# Els quatre servidors de noms que cal configurar al registrador
aws route53 get-hosted-zone --profile mercadofresco-dev --id "$ZONA_PUB" \
  --query 'DelegationSet.NameServers' --output table

# Zona PRIVADA, associada a la VPC de la llico 03-01
ZONA_PRIV=$(aws route53 create-hosted-zone --profile mercadofresco-dev \
  --name interno.mercadofresco.example \
  --caller-reference "mercadofresco-privada-$(date +%s)" \
  --vpc VPCRegion=eu-west-1,VPCId="$VPC_ID" \
  --hosted-zone-config Comment="Noms interns de la VPC",PrivateZone=true \
  --query 'HostedZone.Id' --output text | sed 's|/hostedzone/||')

Requisit important: perquè una zona privada funcioni, la VPC ha de tenir enableDnsSupport i enableDnsHostnames a true. És exactament l'ajust que vam activar a 03-01 i l'oblit del qual és la causa número u que una zona privada «no resolgui».

Tipus de registre

Els registres són les entrades de la zona. Aquests són els que MercadoFresco necessita:

Tipus Què associa Exemple a mercadofresco.example Notes
A Nom → IPv4 oficina.mercadofresco.example → 81.45.20.7 El més comú
AAAA Nom → IPv6 www → 2600:9000:... Necessari si l'ALB o CloudFront tenen IPv6
CNAME Nom → un altre nom blog → mercadofresco.wordpress.com No es pot fer servir al vèrtex del domini
MX Correu 10 mail1.proveedor.example El número és la prioritat: guanya el menor
TXT Text lliure "v=spf1 include:_spf.proveedor.example ~all" SPF, DKIM, verificacions de propietat
NS Servidors de noms de la zona ns-123.awsdns-45.com Es crea sol; no l'esborris
SOA Metadades de la zona ns-123... awsdns-hostmaster... Es crea sol; un per zona
CAA Quines autoritats poden emetre certificats 0 issue "amazon.com" Recomanat: impedeix que una altra CA emeti per al teu domini
SRV Servei, protocol, port _sip._tcp 10 60 5060 sip.example Telefonia i serveis especials
PTR IP → nom (DNS invers) El gestiona el propietari del rang IP

Dos que mereixen un comentari:

CAA. Amb aquest registre, MercadoFresco declara que només Amazon pot emetre certificats per al seu domini. Si un atacant aconseguís enganyar una altra autoritat certificadora, aquella autoritat consultaria el CAA i es negaria a emetre'l. Costa zero i evita una classe sencera d'atacs:

mercadofresco.example.  CAA  0 issue "amazon.com"
mercadofresco.example.  CAA  0 issuewild "amazon.com"
mercadofresco.example.  CAA  0 iodef "mailto:[email protected]"

CNAME i la seva limitació. Un CNAME diu «aquest nom és en realitat aquell altre». L'RFC 1034 prohibeix que un nom amb un CNAME tingui cap altre registre. I el vèrtex del domini (mercadofresco.example, sense www) té obligatòriament registres SOA i NS. Per tant:

El vèrtex d'un domini NO pot tenir un registre CNAME. Mai.

Això és un problema seriós, perquè un ALB i una distribució de CloudFront no tenen IP fixa: només tenen noms. No es pot posar un registre A, perquè no hi ha IP per posar-hi, i no es pot posar un CNAME, perquè és el vèrtex. La solució és el que ve ara.

Registres d'àlies: la peça que només té AWS

Un registre d'àlies és una extensió pròpia de Route 53. Per fora es comporta com un registre A (o AAAA): retorna una IP. Per dins, Route 53 resol al moment quina és la IP actual del recurs d'AWS al qual apunta.

CNAME Registre d'àlies
És estàndard DNS No: és propi de Route 53
Es pot fer servir al vèrtex No
Què retorna al client Un altre nom (obliga a una segona consulta) La IP directament
Cost de les consultes Es cobren Gratuïtes
Pot apuntar a Qualsevol nom DNS Recursos d'AWS i altres registres de la mateixa zona
TTL El defineixes tu El gestiona AWS
S'adapta si el recurs canvia d'IP Sí (el nom no canvia) Sí, automàticament
Comprova l'estat de la destinació No , amb EvaluateTargetHealth

Tres avantatges concrets i mesurables:

  1. Funciona al vèrtex. mercadofresco.example pot apuntar a CloudFront. Amb CNAME seria impossible.
  2. És de franc. Route 53 no cobra les consultes resoltes per àlies cap a recursos d'AWS. Amb 1,2 milions de consultes al mes, són uns 0,48 USD que no es paguen; a escala, molt més.
  3. És més ràpid. Un CNAME obliga el resolutor a fer dues consultes: primer el nom original, després la destinació. Un àlies retorna la IP en una.

A què pot apuntar un àlies:

Destinació Exemple a MercadoFresco
Distribució de CloudFront mercadofresco.exampled111111abcdef8.cloudfront.net
Balancejador (ALB o NLB) directo.mercadofresco.example → l'ALB
Bucket d'S3 com a lloc web mantenimiento.mercadofresco.example
API Gateway, VPC endpoint, Global Accelerator
Un altre registre de la mateixa zona www → el vèrtex

La regla pràctica: si la destinació és un recurs d'AWS, fes servir àlies sempre. CNAME només per a serveis de tercers.

Validar el certificat d'ACM per DNS

Ara es tanca el que va quedar pendent a 03-03 i 03-04. ACM necessita comprovar que el domini és teu, i la manera de demostrar-ho és crear un registre CNAME concret que només pot crear qui controli la zona.

# Veure quin registre CNAME demana ACM (un per cada nom del certificat)
aws acm describe-certificate --profile mercadofresco-dev --region eu-west-1 \
  --certificate-arn "$CERT_ARN_ALB" \
  --query 'Certificate.DomainValidationOptions[].{
      Domini:DomainName, Estat:ValidationStatus,
      Nom:ResourceRecord.Name, Tipus:ResourceRecord.Type, Valor:ResourceRecord.Value}' \
  --output table

Retorna una cosa com:

Nom:    _a79865eb4cd1a6ab990a45779b53961d.mercadofresco.example
Tipus:  CNAME
Valor:  _424c7224e9b0146f9a8808af955727d0.acm-validations.aws.

Hi ha una drecera que crea el registre automàticament si el domini és a Route 53 al mateix compte:

# El cami llarg (educatiu): construir el fitxer de canvis
cat > validacio-acm.json <<'JSON'
{
  "Comment": "Validacio DNS del certificat de la botiga",
  "Changes": [{
    "Action": "UPSERT",
    "ResourceRecordSet": {
      "Name": "_a79865eb4cd1a6ab990a45779b53961d.mercadofresco.example",
      "Type": "CNAME",
      "TTL": 300,
      "ResourceRecords": [
        { "Value": "_424c7224e9b0146f9a8808af955727d0.acm-validations.aws." }
      ]
    }
  }]
}
JSON

aws route53 change-resource-record-sets --profile mercadofresco-dev \
  --hosted-zone-id "$ZONA_PUB" --change-batch file://validacio-acm.json

# Esperar que ACM ho detecti i emeti el certificat (sol trigar 5-30 minuts)
aws acm wait certificate-validated --profile mercadofresco-dev --region eu-west-1 \
  --certificate-arn "$CERT_ARN_ALB"

Cal repetir-ho amb el certificat de us-east-1 que vam demanar per a CloudFront. Detall útil: com que tots dos certificats cobreixen els mateixos dominis, el registre CNAME de validació és idèntic, així que a la pràctica n'hi ha prou de crear-lo un cop i tots dos es validen.

Dues propietats de la validació per DNS que la fan molt superior a la validació per correu:

  • La renovació és automàtica. Mentre el registre CNAME continuï existint, ACM renova el certificat sol, cada any, per sempre. No esborris mai aquell registre.
  • No depèn que algú llegeixi un correu. La validació per correu s'envia a [email protected] i caduca en 72 hores; si ningú no l'obre, cal començar de nou.

Amb els certificats emesos, ja pots crear de debò l'oient HTTPS de l'ALB de 03-03 i associar el domini propi a la distribució de CloudFront de 03-04. L'HTTPS de MercadoFresco queda tancat.

Comprovacions d'estat de Route 53

Route 53 pot vigilar destinacions des d'una xarxa global de comprovadors i fer servir el resultat per decidir què respon. Són la base de la política de commutació per error.

Tipus Què comprova Quan
Endpoint Una destinació concreta per HTTP, HTTPS o TCP Vigilar l'ALB o un servidor extern
Calculada Combina altres comprovacions amb AND, OR, NOT «Sa si com a mínim 2 de 3 ho estan»
Alarma de CloudWatch L'estat d'una alarma Encaminar segons una mètrica de negoci (05-01)
HC_ID=$(aws route53 create-health-check --profile mercadofresco-dev \
  --caller-reference "hc-alb-mercadofresco-$(date +%s)" \
  --health-check-config '{
    "Type": "HTTPS",
    "FullyQualifiedDomainName": "alb-mercadofresco-tienda-1234567890.eu-west-1.elb.amazonaws.com",
    "Port": 443,
    "ResourcePath": "/salud",
    "RequestInterval": 30,
    "FailureThreshold": 3,
    "MeasureLatency": true,
    "EnableSNI": true
  }' \
  --query 'HealthCheck.Id' --output text)

aws route53 change-tags-for-resource --profile mercadofresco-dev \
  --resource-type healthcheck --resource-id "$HC_ID" \
  --add-tags Key=Name,Value=hc-mercadofresco-tienda Key=Proyecto,Value=mercadofresco \
             Key=Entorno,Value=produccion Key=Componente,Value=tienda \
             Key=Propietario,Value=marta Key=CentroCoste,Value=operaciones

Detalls importants:

  • Fa servir la mateixa ruta /salud que l'ALB de 03-03, i per les mateixes raons: ha de ser ràpida i local.
  • Els comprovadors de Route 53 vénen d'internet, des d'unes 15 ubicacions. La destinació ha de ser accessible públicament; una comprovació contra una instància en subxarxa privada mai no passarà.
  • Amb RequestInterval: 30 i FailureThreshold: 3, una fallada es detecta en uns 90 segons. Hi ha una opció de 10 segons (fast interval) que costa més.
  • MeasureLatency: true afegeix gràfiques de latència per regió, molt útils i sense cost extra.
  • Cost: 0,50 USD al mes per comprovació d'una destinació d'AWS, 0,75 USD si és externa.

Polítiques d'encaminament, una a una

Aquí Route 53 deixa de ser «una taula de noms» i es converteix en una eina d'arquitectura. Cada política respon una pregunta diferent.

flowchart TD
    Q{"Quantes destinacions<br/>per al mateix nom?"}
    Q -->|Una| S["<b>Simple</b><br/>Retorna sempre el mateix"]
    Q -->|Diverses| Q2{"Que decideix<br/>a quina va cada visitant?"}
    Q2 -->|"Un % que jo fixo"| P["<b>Ponderada</b><br/>Canari del 10 %"]
    Q2 -->|"La mes rapida"| L["<b>Latencia</b><br/>Multiregio"]
    Q2 -->|"El seu pais"| G["<b>Geolocalitzacio</b><br/>Portugal en portugues"]
    Q2 -->|"La principal, si viu"| F["<b>Commutacio per error</b><br/>Pagina de manteniment"]
    Q2 -->|"Totes les sanes"| M["<b>Multivalor</b><br/>Repartiment simple amb salut"]

Simple

Un nom, una destinació. És la política per defecte i la que MercadoFresco fa servir per a gairebé tot.

Nom Tipus Destinació
mercadofresco.example A (àlies) Distribució de CloudFront
www.mercadofresco.example A (àlies) Distribució de CloudFront

No admet comprovacions d'estat. Si la destinació cau, Route 53 continua retornant-la.

Ponderada: el canari del 10 %

S'assigna un pes a cada destinació i Route 53 reparteix proporcionalment: pes de la destinació ÷ suma de tots els pesos.

Cas de MercadoFresco: el Luis desplegarà la versió nova de la botiga i vol que només el 10 % dels clients la rebi, per poder mesurar errors abans d'exposar-la a tothom.

Identificador Pes Destinació % del trànsit
tienda-estable 90 tg-mercadofresco-tienda (versió actual) 90 %
tienda-canario 10 tg-mercadofresco-tienda-nueva 10 %
{
  "Comment": "Desplegament canari al 10 % de la nova versio de la botiga",
  "Changes": [
    {
      "Action": "UPSERT",
      "ResourceRecordSet": {
        "Name": "tienda.mercadofresco.example",
        "Type": "A",
        "SetIdentifier": "tienda-estable",
        "Weight": 90,
        "AliasTarget": {
          "HostedZoneId": "Z32O12XQLNTSW2",
          "DNSName": "alb-mercadofresco-tienda-1234567890.eu-west-1.elb.amazonaws.com",
          "EvaluateTargetHealth": true
        }
      }
    },
    {
      "Action": "UPSERT",
      "ResourceRecordSet": {
        "Name": "tienda.mercadofresco.example",
        "Type": "A",
        "SetIdentifier": "tienda-canario",
        "Weight": 10,
        "AliasTarget": {
          "HostedZoneId": "Z32O12XQLNTSW2",
          "DNSName": "alb-mercadofresco-nueva-9876543210.eu-west-1.elb.amazonaws.com",
          "EvaluateTargetHealth": true
        }
      }
    }
  ]
}

Tres detalls del JSON:

  • SetIdentifier és obligatori en tota política que no sigui simple: és el que distingeix dos registres amb el mateix nom i tipus.
  • HostedZoneId: Z32O12XQLNTSW2 no és la zona de MercadoFresco: és l'identificador de zona del servei ELB a eu-west-1, un valor fix publicat per AWS. Cada servei i regió té el seu, i confondre'l amb la zona pròpia és un error habitual. Per a CloudFront sempre és Z2FDTNDATAQYW2.
  • EvaluateTargetHealth: true fa que, si un ALB no té destinacions sanes, Route 53 deixi de retornar-lo i enviï tot el trànsit a l'altre.

Posar un pes a 0 retira una destinació sense esborrar el registre: la manera més ràpida d'avortar un canari. Aquest mecanisme reapareix a la lliçó 08-03, quan CodeDeploy automatitzi el desplegament progressiu.

Latència

Route 53 respon amb la destinació de la regió que mesura menys latència per al resolutor que pregunta. No és «el més proper geogràficament», sinó el més ràpid segons mesures reals d'AWS.

Escenari futur de MercadoFresco: si l'expansió funciona i s'obre una regió a eu-central-1 per a Alemanya, un client de Munic aniria a Frankfurt i un de Sevilla a Irlanda, amb el mateix nom. Avui, amb una sola regió, aquesta política no aporta res.

Geolocalització

Encamina segons d'on és el visitant: continent, país o, als Estats Units, estat. És una decisió de contingut, no de rendiment.

Cas de MercadoFresco: obrir a Portugal amb la botiga en portuguès i preus amb el seu IVA.

SetIdentifier Ubicació Destinació
es País ES tg-mercadofresco-tienda (castellà)
pt País PT tg-mercadofresco-tienda-pt (portuguès)
defecto * (per defecte) tg-mercadofresco-tienda (castellà)
# El registre per defecte es OBLIGATORI: sense ell, un visitant d'un pais
# no contemplat no rep CAP resposta (NXDOMAIN)
aws route53 change-resource-record-sets --profile mercadofresco-dev \
  --hosted-zone-id "$ZONA_PUB" --change-batch '{
    "Changes": [{
      "Action": "UPSERT",
      "ResourceRecordSet": {
        "Name": "mercadofresco.example",
        "Type": "A",
        "SetIdentifier": "defecto",
        "GeoLocation": { "CountryCode": "*" },
        "AliasTarget": {
          "HostedZoneId": "Z2FDTNDATAQYW2",
          "DNSName": "d111111abcdef8.cloudfront.net",
          "EvaluateTargetHealth": false
        }
      }
    }]
  }'

El registre per defecte és la part que s'oblida i provoca la incidència més difícil de reproduir: tot funciona a l'oficina i un client d'Andorra rep «servidor no trobat».

Existeix a més l'encaminament per proximitat geogràfica (geoproximity), que permet desplaçar el repartiment amb un biaix numèric —«amplia un 30 % el radi de la regió d'Irlanda»— i que només es pot configurar amb Route 53 Traffic Flow.

Commutació per error: la pàgina de manteniment

Una destinació primària i una altra de secundària. Route 53 retorna la primària mentre la seva comprovació d'estat estigui sana; si falla, retorna la secundària.

Cas de MercadoFresco: si l'ALB cau sencer, en comptes d'un error de connexió, els clients veuen una pàgina estàtica allotjada a S3 explicant la situació i amb el telèfon d'atenció.

flowchart LR
    C["Client"] --> R53["Route 53<br/>mercadofresco.example"]
    HC{{"Comprovacio d'estat<br/>hc-mercadofresco-tienda<br/>/salud cada 30 s"}}
    R53 -.consulta.-> HC
    HC -->|"Sa"| ALB["PRIMARIA<br/>alb-mercadofresco-tienda"]
    HC -->|"No sa"| S3["SECUNDARIA<br/>mercadofresco-mantenimiento<br/>(lloc estatic a S3)"]
{
  "Comment": "Commutacio per error cap a la pagina de manteniment",
  "Changes": [
    {
      "Action": "UPSERT",
      "ResourceRecordSet": {
        "Name": "directo.mercadofresco.example",
        "Type": "A",
        "SetIdentifier": "primario-alb",
        "Failover": "PRIMARY",
        "HealthCheckId": "abcdef01-2345-6789-abcd-ef0123456789",
        "AliasTarget": {
          "HostedZoneId": "Z32O12XQLNTSW2",
          "DNSName": "alb-mercadofresco-tienda-1234567890.eu-west-1.elb.amazonaws.com",
          "EvaluateTargetHealth": true
        }
      }
    },
    {
      "Action": "UPSERT",
      "ResourceRecordSet": {
        "Name": "directo.mercadofresco.example",
        "Type": "A",
        "SetIdentifier": "secundario-mantenimiento",
        "Failover": "SECONDARY",
        "AliasTarget": {
          "HostedZoneId": "Z1BKCTXD74EZPE",
          "DNSName": "s3-website-eu-west-1.amazonaws.com",
          "EvaluateTargetHealth": false
        }
      }
    }
  ]
}

La pàgina de manteniment viu en un bucket de lloc estàtic (tècnica de 02-03) que s'ha de dir exactament igual que el nom DNS: directo.mercadofresco.example. És un requisit d'S3 per allotjar llocs web amb domini propi.

I la limitació honesta: el DNS té memòria cau. Si el TTL és de 300 segons, alguns clients continuaran anant a l'ALB caigut durant cinc minuts. Per això la commutació per error de DNS és una xarxa de seguretat d'últim recurs, i l'alta disponibilitat de debò és la que ja vam muntar: dues zones de disponibilitat darrere d'un mateix ALB, que commuta en segons i sense dependre del DNS.

Multivalor

Retorna fins a vuit registres sans alhora, triats a l'atzar, i el client en prova un. És com el repartiment per torns clàssic del DNS, però amb comprovacions d'estat: les destinacions caigudes no es retornen.

No és un balancejador: no mesura càrrega, no drena connexions i depèn que el client reintenti. Serveix per a destinacions que no són darrere d'un ALB, per exemple un conjunt de servidors de correu o d'API internes. MercadoFresco no ho necessita, tenint un ALB.

Taula resum

Política Decideix segons Necessita SetIdentifier Fa servir comprovacions d'estat Cas a MercadoFresco
Simple Res No No mercadofresco.example → CloudFront
Ponderada Percentatge fixat Canari del 10 % (reapareix a 08-03)
Latència Regió més ràpida Futur multiregió
Geolocalització País del visitant Obertura a Portugal
Geoproximitat Distància amb biaix Requereix Traffic Flow
Commutació per error Salut de la primària Obligatòries Pàgina de manteniment a S3
Multivalor Atzar entre les sanes No aplica: hi ha ALB

Les polítiques es poden niar amb Traffic Flow: primer geolocalització per país i, dins de cada país, ponderada per al canari. És la manera de combinar «Portugal veu la botiga portuguesa» amb «el 10 % dels portuguesos veu la versió nova».

Configurar el DNS de MercadoFresco per consola i per CLI

Per consola, en resum

  1. Route 53 → Zones allotjades → mercadofresco.example.
  2. Crear registre. Nom en blanc per al vèrtex.
  3. Activar Àlies, triar «Àlies a distribució de CloudFront» i seleccionar la distribució.
  4. Política d'encaminament: Simple. Desar.
  5. Repetir amb www, aquest cop «Àlies a un altre registre d'aquesta zona» → el vèrtex.
  6. Per als registres MX, TXT i CAA: desactivar Àlies i introduir els valors, un per línia.

La consola té un avantatge real aquí: en triar una destinació d'àlies l'ofereix en una llista, així que no hi ha manera d'equivocar-se amb el HostedZoneId del servei.

Per CLI, amb el fitxer de canvis complet

change-resource-record-sets aplica un lot de canvis de manera atòmica: o s'apliquen tots o cap.

{
  "Comment": "Configuracio DNS completa de MercadoFresco",
  "Changes": [
    {
      "Action": "UPSERT",
      "ResourceRecordSet": {
        "Name": "mercadofresco.example",
        "Type": "A",
        "AliasTarget": {
          "HostedZoneId": "Z2FDTNDATAQYW2",
          "DNSName": "d111111abcdef8.cloudfront.net",
          "EvaluateTargetHealth": false
        }
      }
    },
    {
      "Action": "UPSERT",
      "ResourceRecordSet": {
        "Name": "mercadofresco.example",
        "Type": "AAAA",
        "AliasTarget": {
          "HostedZoneId": "Z2FDTNDATAQYW2",
          "DNSName": "d111111abcdef8.cloudfront.net",
          "EvaluateTargetHealth": false
        }
      }
    },
    {
      "Action": "UPSERT",
      "ResourceRecordSet": {
        "Name": "www.mercadofresco.example",
        "Type": "A",
        "AliasTarget": {
          "HostedZoneId": "Z2FDTNDATAQYW2",
          "DNSName": "d111111abcdef8.cloudfront.net",
          "EvaluateTargetHealth": false
        }
      }
    },
    {
      "Action": "UPSERT",
      "ResourceRecordSet": {
        "Name": "admin.mercadofresco.example",
        "Type": "A",
        "AliasTarget": {
          "HostedZoneId": "Z32O12XQLNTSW2",
          "DNSName": "alb-mercadofresco-tienda-1234567890.eu-west-1.elb.amazonaws.com",
          "EvaluateTargetHealth": true
        }
      }
    },
    {
      "Action": "UPSERT",
      "ResourceRecordSet": {
        "Name": "mercadofresco.example",
        "Type": "MX",
        "TTL": 3600,
        "ResourceRecords": [
          { "Value": "10 mx1.proveedorcorreo.example" },
          { "Value": "20 mx2.proveedorcorreo.example" }
        ]
      }
    },
    {
      "Action": "UPSERT",
      "ResourceRecordSet": {
        "Name": "mercadofresco.example",
        "Type": "TXT",
        "TTL": 3600,
        "ResourceRecords": [
          { "Value": "\"v=spf1 include:_spf.proveedorcorreo.example -all\"" }
        ]
      }
    },
    {
      "Action": "UPSERT",
      "ResourceRecordSet": {
        "Name": "mercadofresco.example",
        "Type": "CAA",
        "TTL": 3600,
        "ResourceRecords": [
          { "Value": "0 issue \"amazon.com\"" },
          { "Value": "0 issuewild \"amazon.com\"" },
          { "Value": "0 iodef \"mailto:[email protected]\"" }
        ]
      }
    }
  ]
}
CANVI=$(aws route53 change-resource-record-sets --profile mercadofresco-dev \
  --hosted-zone-id "$ZONA_PUB" \
  --change-batch file://dns-mercadofresco.json \
  --query 'ChangeInfo.Id' --output text)

# Esperar que el canvi es propagui a tots els servidors de Route 53
aws route53 wait resource-record-sets-changed --profile mercadofresco-dev --id "$CANVI"

# Verificar el resultat
aws route53 list-resource-record-sets --profile mercadofresco-dev \
  --hosted-zone-id "$ZONA_PUB" \
  --query 'ResourceRecordSets[].{Nom:Name,Tipus:Type,TTL:TTL,
           Alias:AliasTarget.DNSName,Valors:ResourceRecords[].Value}' \
  --output table

Notes sobre aquest lot:

  • UPSERT crea el registre si no existeix i l'actualitza si existeix. És idempotent, cosa que el fa segur de reexecutar. CREATE fallaria a la segona execució i DELETE exigeix que els valors coincideixin exactament.
  • Els registres d'àlies no porten TTL: ho gestiona AWS.
  • El registre TXT porta cometes dins del valor, escapades al JSON. És un error habitual ometre-les.
  • Z2FDTNDATAQYW2 és l'identificador de zona de CloudFront, idèntic a tot el món; Z32O12XQLNTSW2 és el d'ELB a eu-west-1.

Comprovació des de fora, que és l'única cosa que confirma que funciona de debò:

# Consultar directament als servidors autoritatius, saltant-se les memories cau
dig +short mercadofresco.example @ns-123.awsdns-45.com

# Veure la cadena completa de resolucio
dig +trace www.mercadofresco.example

# Confirmar que l'HTTPS ja funciona amb el certificat correcte
curl -sI https://mercadofresco.example | head -5
openssl s_client -connect mercadofresco.example:443 -servername mercadofresco.example </dev/null 2>/dev/null \
  | openssl x509 -noout -subject -dates

Route 53 Resolver i les regles de reenviament cap a l'oficina

El Route 53 Resolver és el resolutor que viu a l'adreça .2 de la VPC (10.0.0.2) i que ja vam conèixer a 03-01. A més de resoldre noms d'AWS i de les zones privades, admet dos tipus de regla per connectar-se amb la xarxa de l'oficina:

Tipus Direcció Què fa
Endpoint de sortida (outbound) + regla de reenviament VPC → oficina Les consultes sobre mercadofresco.local es reenvien al DNS de l'oficina
Endpoint d'entrada (inbound) Oficina → VPC L'oficina pot resoldre bd.interno.mercadofresco.example

El seu ús real requereix la connectivitat de xarxa que només aporta una VPN o Direct Connect, que vam esmentar a 03-01 i que queda fora de l'abast d'aquest curs. Cost orientatiu: cada endpoint són dues ENI i costa uns 0,125 USD per hora i per ENI, així que no és un recurs per deixar encès per curiositat.

Costos de Route 53 i neteja

⚠️ Avís de cost

Concepte Preu MercadoFresco
Zona allotjada 0,50 USD/mes cadascuna (les 25 primeres) 2 zones → 1,00 USD/mes
Consultes estàndard 0,40 USD per milió (primers 1.000 M) ~1,2 M → 0,48 USD
Consultes resoltes per àlies a recursos d'AWS Gratuïtes La majoria → 0,00 USD
Consultes d'encaminament especial (latència, geo) 0,60 USD per milió Marginal
Comprovació d'estat (destinació d'AWS) 0,50 USD/mes 1 → 0,50 USD/mes
Comprovació d'estat (destinació externa) 0,75 USD/mes
Registre del domini Segons el TLD, anual
Total estimat ≈ 1,60 USD/mes

Route 53 és, amb diferència, el més barat del mòdul. Però hi ha un detall desagradable: la zona allotjada es cobra des del moment en què es crea, encara que no tingui registres, i es cobren les 12 primeres hores encara que l'esborris. Crear i esborrar zones per practicar no surt de franc.

Neteja (cal buidar la zona abans d'esborrar-la; els registres NS i SOA se'n van sols):

# Esborrar tots els registres que no siguin NS ni SOA
aws route53 list-resource-record-sets --profile mercadofresco-dev \\
  --hosted-zone-id "$ZONA_PUB" \\
  --query 'ResourceRecordSets[?Type!=`NS` && Type!=`SOA`]' > registres.json
# (construir el change-batch amb "Action": "DELETE" per a cadascun i aplicar-lo)

aws route53 delete-hosted-zone --profile mercadofresco-dev --id "$ZONA_PUB"
aws route53 delete-health-check --profile mercadofresco-dev --health-check-id "$HC_ID"

El que no es pot desfer: el registre d'un domini no és reemborsable i no es pot cancel·lar. Només es registra un domini quan es farà servir de debò.

Tancament del mòdul: l'arquitectura de xarxa completa

flowchart TB
    U["Clients<br/>Espanya i Portugal"]
    R53(["<b>Route 53</b><br/>mercadofresco.example<br/>alias A/AAAA · TTL gestionat"])
    CF["<b>CloudFront</b> · PriceClass_100<br/>~700 edge locations · HTTP/3<br/>certificat ACM (us-east-1)"]

    subgraph AWS["Compte 111122223333 — eu-west-1 (Irlanda)"]
        subgraph VPC["vpc-mercadofresco — 10.0.0.0/16"]
            subgraph PUB["Subxarxes publiques · 10.0.0.0/20 i 10.0.16.0/20"]
                ALB["<b>alb-mercadofresco-tienda</b><br/>sg-mercadofresco-alb<br/>HTTPS 443 · TLS 1.2/1.3<br/>redireccio 80 → 443"]
                NAT["NAT Gateway ×2"]
            end
            subgraph APP["Subxarxes d'aplicacio · 10.0.32.0/20 i 10.0.48.0/20"]
                A1["asg-mercadofresco-tienda<br/>eu-west-1a<br/>sg-mercadofresco-tienda"]
                A2["asg-mercadofresco-tienda<br/>eu-west-1b<br/>sg-mercadofresco-tienda"]
            end
            subgraph DAT["Subxarxes de dades · 10.0.64.0/20 i 10.0.80.0/20 — sense sortida a internet"]
                DB[("<b>mercadofresco-pedidos</b><br/>PostgreSQL 16 Multi-AZ<br/>sg-mercadofresco-basedatos")]
                EFS["efs-mercadofresco-fotos"]
            end
            VPCE(["vpce-mercadofresco-s3<br/>(gratuit)"])
        end
        S3[("<b>mercadofresco-catalogo-fotos</b><br/>tancat amb OAC<br/>nomes la distribucio E2QWERTY123ABC")]
        LOG[("mercadofresco-registros-web<br/>ALB + CloudFront + Flow Logs")]
    end

    U --> R53 --> CF
    CF -->|"/productos/* · /miniaturas/*<br/>90 % des de memoria cau"| S3
    CF -->|"HTML i /api/*<br/>https-only"| ALB
    ALB --> A1
    ALB --> A2
    A1 --> DB
    A2 --> DB
    A1 --> EFS
    A1 --> VPCE --> S3
    A1 -.-> NAT
    ALB -.-> LOG
    CF -.-> LOG

Què queda resolt en acabar el mòdul 3

Problema del curs Estat Com
1. Caigudes dels divendres Resolt ASG en 2 AZ + ALB amb comprovacions d'estat: 2.400 com/h de capacitat davant de 900 de demanda, i s'aguanta perdent una AZ sencera
2. Còpies poc fiables Resolt (mòdul 2) Snapshots DLM, versionat d'S3, PITR d'RDS
3. No poder créixer a més ciutats Encaminat Xarxa multi-AZ reproduïble, CloudFront global, geolocalització a punt per a Portugal
4. Desplegaments arriscats Encaminat Encaminament ponderat per al canari del 10 %; falta l'automatització (mòdul 8)

I en diners, la xarxa completa de MercadoFresco:

Component Cost mensual aproximat
2 NAT Gateway ≈ 70 USD
ALB (hores + LCU) ≈ 37 USD
CloudFront (dins de la capa gratuïta) ≈ 0 USD
Route 53 (2 zones + 1 comprovació) ≈ 1,60 USD
Endpoint d'S3 de porta d'enllaç 0 USD
Total de xarxa ≈ 109 USD/mes
Estalvi aconseguit en transferència d'S3 −27 USD/mes

Els dos NAT Gateway són el 64 % de la despesa de xarxa i seran el primer candidat a revisar a la lliçó 11-03 amb Cost Explorer.

Què queda pendent

La xarxa està construïda i protegida a nivell de paquets, però queden quatre buits que són exactament el contingut del mòdul 4:

  • Permisos fins: qui pot fer què al compte. Avui hi ha un usuari admin i rols creats a mida, sense política de mínim privilegi sistemàtica → 04-01, IAM.
  • Xifratge gestionat: la clau alias/mercadofresco-datos existeix, però no s'ha estudiat com es governa, es rota ni es comparteix → 04-02, KMS.
  • Secrets: la contrasenya de mfadmin continua estant on no hauria d'estar → 04-03, Secrets Manager i Parameter Store.
  • Protecció davant d'atacs: la NACL amb què vam bloquejar una IP a 03-02 no escala, i una denegació de servei distribuïda tombaria la botiga malgrat tot el que hem muntat → 04-04, Shield i 04-05, WAF, tots dos aplicats a la vora de CloudFront.

Errors Habituals i Consells

Intentar posar un CNAME al vèrtex del domini. Està prohibit per l'estàndard. La resposta sempre és un registre d'àlies.

Oblidar el registre per defecte a geolocalització. Un visitant d'un país no contemplat no rep resposta. Crea sempre el registre amb CountryCode: "*".

Confondre el HostedZoneId de l'àlies amb el de la teva zona. El de l'AliasTarget és el del servei de destinació (Z2FDTNDATAQYW2 per a CloudFront, un de diferent per regió per a ELB), no el de mercadofresco.example.

Demanar el certificat de CloudFront a la regió equivocada. Ha d'estar a us-east-1. Ja va sortir a 03-04 i continua sent el parany més repetit.

Esborrar el registre CNAME de validació d'ACM. Sembla brossa i no ho és: sense ell, ACM no pot renovar el certificat i aquest caducarà en un any, silenciosament.

No baixar el TTL abans d'una migració. Si migres amb TTL de 86.400, alguns clients aniran a la destinació antiga durant un dia sencer. Baixa'l a 60 amb dies d'antelació.

Confiar l'alta disponibilitat al DNS. La commutació per error de Route 53 està limitada per la memòria cau dels resolutors. La disponibilitat real la dona l'ALB entre dues AZ, en segons i sense dependre del DNS.

Fer servir CNAME on hi cap un àlies. Costa diners en consultes, afegeix una consulta extra de latència i no avalua la salut de la destinació.

Oblidar la renovació automàtica del domini. Un domini caducat és una empresa desapareguda d'internet, i recuperar-lo pot ser impossible si algú el registra.

Consell d'or: després de cada canvi de DNS, verifica amb dig +short <nom> @<servidor autoritatiu> en comptes d'obrir el navegador. El navegador i el sistema operatiu tenen les seves pròpies memòries cau i et faran creure que el canvi no ha funcionat durant minuts.

Exercicis

Exercici 1: dissenyar el DNS de l'obertura a Portugal

MercadoFresco obre a Portugal. Requisits: els visitants de Portugal han de veure la botiga portuguesa (un grup de destinació diferent al mateix ALB), els d'Espanya la castellana, i qualsevol altre país la castellana; a més, el 10 % dels visitants portuguesos ha de rebre la versió nova de la botiga per provar-la; i si l'ALB cau, tothom ha de veure la pàgina de manteniment. Dissenya l'estructura de registres indicant polítiques, identificadors i niament.

Exercici 2: diagnosticar un domini que no resol

La Marta ha creat la zona allotjada, hi ha afegit l'àlies al vèrtex i mercadofresco.example continua sense funcionar 24 hores després, mentre que dig @ns-123.awsdns-45.com mercadofresco.example sí que respon correctament. Explica què està passant i escriu les comprovacions, en ordre, per confirmar-ho.

Exercici 3: calcular el cost anual del DNS i decidir el TTL

MercadoFresco rep 5 milions de consultes DNS al mes, de les quals el 80 % es resolen per àlies cap a CloudFront. Té 2 zones allotjades i 3 comprovacions d'estat, una d'elles contra un proveïdor extern. Calcula el cost anual, i estima quant estalviaria pujant el TTL dels registres no-àlies de 300 a 3.600 segons.

Solucions

Solució 1

Calen dos nivells niats, i com que Route 53 no permet niar polítiques directament en un mateix nom, es resol amb noms intermedis (que és exactament el que fa Traffic Flow per dins).

Nivell 1 — geolocalització a mercadofresco.example:

SetIdentifier GeoLocation Destinació
geo-es CountryCode: ES àlies → es.mercadofresco.example
geo-pt CountryCode: PT àlies → pt.mercadofresco.example
geo-defecto CountryCode: * àlies → es.mercadofresco.example

Nivell 2 — ponderació a pt.mercadofresco.example (només Portugal porta canari):

SetIdentifier Pes Destinació
pt-estable 90 àlies → ALB (grup de destinació portuguès actual)
pt-canario 10 àlies → ALB (grup de destinació portuguès nou)

Nivell 2 — es.mercadofresco.example: política simple, àlies a l'ALB amb EvaluateTargetHealth: true.

Commutació per error: s'aplica al nivell 2, a es i a pt, cadascun amb el seu parell primari/secundari apuntant al bucket de manteniment. Posar-la al nivell 1 no funcionaria, perquè geolocalització i commutació per error no es poden combinar al mateix conjunt de registres.

Detalls que fan que això funcioni de debò:

  • El registre geo-defecto és imprescindible: sense ell, un client d'Andorra o de França no rep resposta.
  • Els àlies a es. i pt. són àlies a un altre registre de la mateixa zona, que també són gratuïts.
  • Un canari del 10 % limitat a Portugal exposa uns pocs centenars de clients a la versió nova: suficient per detectar errors, poc per causar dany. Posar el pes de pt-canario a 0 avorta el desplegament en un minut.
  • A la pràctica, i per a més de dos nivells, es faria servir Route 53 Traffic Flow, que permet dibuixar l'arbre de decisió i versionar la política.

Solució 2

El símptoma és inequívoc: Route 53 respon correctament quan se li pregunta directament, però el món no arriba a preguntar-l'hi. Això vol dir que la delegació no està feta: els servidors de noms del registrador continuen apuntant a un altre lloc.

# 1. Quins servidors de noms te assignats la zona a Route 53?
aws route53 get-hosted-zone --profile mercadofresco-dev --id "$ZONA_PUB" \
  --query 'DelegationSet.NameServers' --output text
# 2. Quins servidors de noms publica realment el TLD? (la comprovacio decisiva)
dig NS mercadofresco.example @a.gtld-servers.net

Si els quatre noms dels passos 1 i 2 no coincideixen, aquí hi ha el problema.

# 3. Si el domini esta registrat a Route 53, comprovar i corregir
aws route53domains get-domain-detail --profile mercadofresco-dev --region us-east-1 \
  --domain-name mercadofresco.example --query 'Nameservers[].Name'

aws route53domains update-domain-nameservers --profile mercadofresco-dev --region us-east-1 \
  --domain-name mercadofresco.example \
  --nameservers Name=ns-123.awsdns-45.com Name=ns-456.awsdns-78.net \
                Name=ns-789.awsdns-01.org Name=ns-012.awsdns-34.co.uk

Segona causa possible, si els NS sí que coincideixen: existeixen dues zones allotjades per al mateix domini (és fàcil crear-ne una de duplicada), i els registres es van afegir a la que no està delegada. Cada zona té servidors de noms diferents.

aws route53 list-hosted-zones --profile mercadofresco-dev \
  --query 'HostedZones[?Name==`mercadofresco.example.`].{Id:Id,Registres:ResourceRecordSetCount}'

Si en retorna més d'una, cal quedar-se amb la delegada i esborrar l'altra.

Tercera causa: una zona privada amb el mateix nom que la pública, associada a la VPC. Des de dins de la VPC es resoldria la privada i des de fora la pública, donant resultats contradictoris segons des d'on es provi. És l'anomenat split-horizon DNS, útil quan és intencionat i molt confús quan no ho és.

Quarta causa, la més trivial: la memòria cau local. Es descarta comparant dig +short mercadofresco.example (amb memòria cau) amb dig +short mercadofresco.example @8.8.8.8 (resolutor extern).

Solució 3

Cost mensual:

Concepte Càlcul Cost
Zones allotjades 2 × 0,50 USD 1,00 USD
Consultes per àlies (80 % de 5 M = 4 M) Gratuïtes 0,00 USD
Consultes estàndard (20 % = 1 M) 1 × 0,40 USD/milió 0,40 USD
Comprovacions de destinació AWS 2 × 0,50 USD 1,00 USD
Comprovació de destinació externa 1 × 0,75 USD 0,75 USD
Total mensual 3,15 USD

Cost anual: 37,80 USD.

Efecte de pujar el TTL de 300 a 3.600 segons. Només afecta el milió de consultes no-àlies, que són les que es cobren. Multiplicar el TTL per 12 redueix les consultes que arriben a Route 53 aproximadament en la mateixa proporció, encara que no exactament: hi ha molts resolutors diferents, cadascun amb la seva pròpia memòria cau, i alguns clients ignoren els TTL llargs. Amb una reducció conservadora del 70 %:

  • Consultes facturables: 1.000.000 → ~300.000
  • Cost de consultes: 0,40 → 0,12 USD/mes
  • Estalvi: 0,28 USD/mes, 3,36 USD a l'any.

Conclusió honesta de l'exercici: no val la pena. Estalviar 3 dòlars a l'any a canvi que qualsevol canvi de DNS trigui una hora a propagar-se és un mal negoci. El TTL s'ha de triar per criteris operatius —quant trigues a poder revertir un canvi— i no per cost, llevat que es tracti d'escales de centenars de milions de consultes.

On sí que hi ha una decisió econòmica real és a les comprovacions d'estat: 2,10 USD al mes en tres comprovacions és més que les consultes i les zones juntes. I on de debò s'estalvien diners és en el 80 % de consultes resoltes per àlies: si aquells 4 milions fossin CNAME, costarien 1,60 USD al mes addicionals, cinc vegades més que totes les consultes facturables actuals.

Conclusió

MercadoFresco és a internet. mercadofresco.example respon, amb HTTPS vàlid, servit des de l'edge location més propera a cada client, sobre una xarxa dissenyada, filtrada i repartida en dues zones de disponibilitat. Saps com funciona el DNS de debò —zones, delegació per registres NS, resolució recursiva i el paper de la memòria cau—, saps que Route 53 només cobra les consultes que li arriben i que el TTL és una decisió operativa: 300 segons en producció i 60 amb dies d'antelació abans d'una migració. Distingeixes les tres funcions separades del servei: registre de dominis, DNS autoritatiu i comprovacions d'estat.

Has creat la zona pública de mercadofresco.example i la zona privada interno.mercadofresco.example associada a vpc-mercadofresco, que només funciona perquè a 03-01 vam activar enableDnsHostnames. Coneixes els tipus de registre i has afegit un CAA que impedeix que cap autoritat diferent d'Amazon emeti certificats per al domini. I entens la limitació que ho explica tot: el vèrtex d'un domini no pot tenir un CNAME, perquè ja té SOA i NS. D'aquí els registres d'àlies, que són propis de Route 53, funcionen al vèrtex, retornen la IP en una sola consulta, són gratuïts i avaluen la salut de la destinació amb EvaluateTargetHealth. Saps que el HostedZoneId d'un àlies és el del servei de destinacióZ2FDTNDATAQYW2 per a CloudFront— i no el de la teva zona.

Has creat el registre CNAME que valida els certificats d'ACM i has tancat l'HTTPS que quedava pendent de 03-03 i 03-04, sabent que aquell registre no s'ha d'esborrar mai perquè és el que permet la renovació automàtica. Has muntat una comprovació d'estat contra /salud i has recorregut les polítiques d'encaminament amb un cas real de MercadoFresco per a cadascuna: simple per al vèrtex, ponderada per al canari del 10 % que reapareixerà a 08-03, latència per al futur multiregió, geolocalització per a l'obertura a Portugal —amb el registre per defecte que gairebé tothom oblida—, commutació per error cap a la pàgina de manteniment a S3, i multivalor per a destinacions sense balancejador. Has aplicat el DNS complet amb change-resource-record-sets i UPSERT, has verificat amb dig contra els servidors autoritatius, i saps que Route 53 costa a MercadoFresco 1,60 USD al mes: el més barat de tot el mòdul.

Amb això el mòdul 3 queda tancat. L'arquitectura de MercadoFresco és avui: client → Route 53 → CloudFront → ALB → grup d'Auto Scaling en dues zones de disponibilitat → RDS Multi-AZ en subxarxes privades sense sortida a internet, amb el catàleg a S3 tancat per Origin Access Control i tots els registres a mercadofresco-registros-web. El problema 1, les caigudes dels divendres, està resolt amb 2.400 comandes/hora de capacitat davant de 900 de demanda, fins i tot perdent una zona sencera. El problema 3, créixer a més ciutats, ja té la infraestructura preparada, i el problema 4, els desplegaments arriscats, té el mecanisme de canari a punt a l'espera de l'automatització del mòdul 8.

Però tota aquesta arquitectura descansa sobre supòsits que encara no hem examinat. Hi ha un usuari administrador amb permisos amplis i rols creats sobre la marxa sense una política sistemàtica de mínim privilegi. La contrasenya de mfadmin continua estant on no hauria d'estar. La clau KMS alias/mercadofresco-datos existeix però ningú no ha decidit qui la pot fer servir ni cada quant rota. I la regla DENY numerada 50 amb què vam bloquejar una IP abusiva és completament inútil davant d'un atac distribuït des de deu mil adreces. Al mòdul 4, «Seguretat i identitat», començant per la lliçó 04-01 «AWS Identity and Access Management (IAM)», construirem la capa que falta: identitats, polítiques i permisos mínims; després el xifratge gestionat amb KMS, la custòdia de secrets amb Secrets Manager i Parameter Store, i la protecció de la vora amb Shield i WAF, aplicada just davant de la distribució de CloudFront que acabes de muntar.

Curs d'AWS

Mòdul 1: Introducció a AWS

Mòdul 2: Serveis principals d'AWS

Mòdul 3: Xarxes i lliurament de contingut

Mòdul 4: Seguretat i identitat

Mòdul 5: Monitoratge i gestió

Mòdul 6: Bases de dades

Mòdul 7: Integració d'aplicacions

Mòdul 8: Eines per a desenvolupadors

Mòdul 9: Infraestructura com a codi i govern de comptes

Mòdul 10: Contenidors a AWS

Mòdul 11: Millors pràctiques i gestió de costos

© Copyright 2026. Tots els drets reservats