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
- Repàs pràctic de DNS: zones, delegació, resolució i TTL
- Registrar i transferir dominis a Route 53
- Zones allotjades públiques i privades
- Tipus de registre
- Registres d'àlies: la peça que només té AWS
- Validar el certificat d'ACM per DNS
- Comprovacions d'estat de Route 53
- Polítiques d'encaminament, una a una
- Configurar el DNS de MercadoFresco per consola i per CLI
- Route 53 Resolver i les regles de reenviament cap a l'oficina
- Costos de Route 53 i neteja
- 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 ← subdominisUna 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.8de 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 tableDos 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 | Sí | 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 | Sí | No: és propi de Route 53 |
| Es pot fer servir al vèrtex | No | Sí |
| 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 | Sí, amb EvaluateTargetHealth |
Tres avantatges concrets i mesurables:
- Funciona al vèrtex.
mercadofresco.examplepot apuntar a CloudFront. Amb CNAME seria impossible. - É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.
- É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.example → d111111abcdef8.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 tableRetorna 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=operacionesDetalls importants:
- Fa servir la mateixa ruta
/saludque 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: 30iFailureThreshold: 3, una fallada es detecta en uns 90 segons. Hi ha una opció de 10 segons (fast interval) que costa més. MeasureLatency: trueafegeix 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: Z32O12XQLNTSW2no és la zona de MercadoFresco: és l'identificador de zona del servei ELB aeu-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 ésZ2FDTNDATAQYW2.EvaluateTargetHealth: truefa 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 | Sí | Sí | Canari del 10 % (reapareix a 08-03) |
| Latència | Regió més ràpida | Sí | Sí | Futur multiregió |
| Geolocalització | País del visitant | Sí | Sí | Obertura a Portugal |
| Geoproximitat | Distància amb biaix | Sí | Sí | Requereix Traffic Flow |
| Commutació per error | Salut de la primària | Sí | Obligatòries | Pàgina de manteniment a S3 |
| Multivalor | Atzar entre les sanes | Sí | Sí | 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
- Route 53 → Zones allotjades →
mercadofresco.example. - Crear registre. Nom en blanc per al vèrtex.
- Activar Àlies, triar «Àlies a distribució de CloudFront» i seleccionar la distribució.
- Política d'encaminament: Simple. Desar.
- Repetir amb
www, aquest cop «Àlies a un altre registre d'aquesta zona» → el vèrtex. - 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 tableNotes sobre aquest lot:
UPSERTcrea el registre si no existeix i l'actualitza si existeix. És idempotent, cosa que el fa segur de reexecutar.CREATEfallaria a la segona execució iDELETEexigeix 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 aeu-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 -datesRoute 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-datosexisteix, però no s'ha estudiat com es governa, es rota ni es comparteix → 04-02, KMS. - Secrets: la contrasenya de
mfadmincontinua 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.ipt.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-canarioa 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.netSi 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.ukSegona 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
- Què és AWS?
- Configuració del teu compte d'AWS
- Infraestructura global d'AWS
- Consola d'administració d'AWS
- AWS CLI i SDK
Mòdul 2: Serveis principals d'AWS
Mòdul 3: Xarxes i lliurament de contingut
- Amazon VPC
- Grups de seguretat i llistes de control d'accés
- Elastic Load Balancing
- Amazon CloudFront
- Route 53
Mòdul 4: Seguretat i identitat
- AWS Identity and Access Management (IAM)
- AWS Key Management Service (KMS)
- Secrets Manager i Parameter Store
- AWS Shield
- AWS WAF
Mòdul 5: Monitoratge i gestió
- Amazon CloudWatch
- AWS X-Ray i traçabilitat distribuïda
- AWS CloudTrail
- AWS Config
- AWS Trusted Advisor
Mòdul 6: Bases de dades
- Com triar la base de dades adequada
- Amazon DynamoDB
- Amazon Aurora
- Amazon Redshift
- Amazon ElastiCache
Mòdul 7: Integració d'aplicacions
- Amazon SQS
- Amazon SNS
- Amazon EventBridge
- AWS Step Functions
- Patrons d'integració: idempotència, reintents i cues de missatges fallits
