AWS Config va tancar la lliçó anterior amb una limitació honesta: comprova les regles que tu li has dit. És exacte i és potent, però no et pot avisar del que no se t'ha acudit preguntar.
Ningú no ha escrit una regla que digui «avisa'm si tinc volums EBS orfes costant diners», perquè per
escriure-la primer caldria sospitar que existeixen. Ningú no ha escrit una regla sobre les IP
elàstiques sense associar, que es facturen precisament per no fer-se servir. I no cal dir que ningú
no ha escrit una regla sobre el límit de vCPU del compte, que —com veurem en aquesta lliçó— és la raó
real per la qual asg-mercadofresco-tienda no pot passar de quatre instàncies.
AWS Trusted Advisor fa aquest repàs. Compara el teu compte amb un catàleg de bones pràctiques que AWS ha destil·lat de milions de clients, i et diu el que no havies pensat a preguntar. No és una eina de detecció en temps real ni un substitut de res del que hem vist: és el repàs automàtic, l'equivalent que algú amb molta experiència miri el teu compte un cop al mes i t'assenyali les coses òbvies que fa mesos que no veus perquè hi ets massa a prop.
Amb aquesta lliçó es tanca el mòdul 5, i amb ell la capa d'observabilitat de MercadoFresco.
Contingut
- Què és Trusted Advisor i en què es diferencia de Config
- I en què es diferencia de Well-Architected
- Les cinc categories
- Què comprova cada categoria
- Què veus segons el pla de suport
- Com suplir el que el pla Basic no dona
- Recorregut comentat d'un informe de MercadoFresco
- Quotes de servei: el límit invisible
- El cas de l'ASG que no passa de quatre instàncies
- Sol·licitar un augment de quota
- Alarmar abans de xocar amb una quota
- Automatització: API, exportació i notificacions
- Integració amb EventBridge
- Compute Optimizer i Cost Optimization Hub
- La rutina de revisió mensual de la Marta
- Tancament del mòdul: la capa d'observabilitat completa
- Les cinc preguntes del mòdul 4, respostes
- Cost total afegit
- El que ve: el coll d'ampolla s'ha mogut
Què és Trusted Advisor i en què es diferencia de Config
| AWS Config (05-04) | Trusted Advisor | |
|---|---|---|
| Què avalua | Les teves regles | Les bones pràctiques d'AWS |
| Qui defineix els criteris | Tu | AWS |
| Personalitzable | Sí, totalment | Molt poc (alguns llindars) |
| Abast | Els recursos que graves | Tot el compte, sempre |
| Latència | Minuts | Refresc cada 24 h (o manual) |
| Remeia | Sí | No |
| Detecta el que no vas preveure | No | Sí |
| Cost | Per CI i avaluació | Inclòs al pla de suport |
| Historial | Sí, línia temporal | No |
La diferència de fons: Config respon preguntes; Trusted Advisor les fa.
Un exemple que ho aclareix. MercadoFresco té una regla de Config que comprova que tots els volums EBS
estan xifrats. Perfecte. Però cap regla no comprova si un volum serveix per a alguna cosa, perquè
a ningú se li va acudir. Trusted Advisor ho assenyala sense que ningú ho demani: «tens 3 volums en
estat available, sense connectar a res, que fa des del març que costen 24 USD al mes».
No competeixen. Trusted Advisor et dona la troballa; Config la converteix en una regla permanent. El flux natural és: Trusted Advisor descobreix un problema que no havies previst → escrius una regla de Config perquè no torni a passar → la remediació ho corregeix sola. Aquest és el cicle complet.
I en què es diferencia de Well-Architected
| Trusted Advisor | Well-Architected (11-01) | |
|---|---|---|
| Naturalesa | Automàtic | Qüestionari guiat |
| Freqüència | Continu, refresc 24 h | Revisió puntual, trimestral o anual |
| Nivell | Recursos concrets | Decisions d'arquitectura |
| Exemple | «Aquest volum està orfe» | «Com gestiones la recuperació davant de desastres?» |
| Qui hi participa | Ningú: surt sol | L'equip, en una sessió d'hores |
| Resultat | Llista de troballes | Pla de millora amb riscos prioritzats |
| Cost | Inclòs al suport | L'eina és gratuïta |
Trusted Advisor mira cap avall, als recursos. Well-Architected mira cap amunt, a les decisions. Trusted Advisor et diu que una instància està infrautilitzada; Well-Architected et pregunta si la teva estratègia d'escalat és adequada per al teu patró de trànsit. Tots dos fan servir els mateixos cinc o sis pilars com a marc conceptual, i de fet les categories de Trusted Advisor són gairebé els pilars de Well-Architected, però operen a altures diferents.
Well-Architected s'estudia a 11-01, obrint el mòdul de bones pràctiques i costos.
Les cinc categories
flowchart TD
TA["AWS Trusted Advisor"]
TA --> C1["OPTIMITZACIO DE COSTOS<br/>Recursos infrautilitzats<br/>o sense usar"]
TA --> C2["RENDIMENT<br/>Configuracions que<br/>limiten la velocitat"]
TA --> C3["SEGURETAT<br/>Exposicio, permisos,<br/>xifratge, MFA"]
TA --> C4["TOLERANCIA A ERRORS<br/>Punts unics de fallada,<br/>copies, Multi-AZ"]
TA --> C5["LIMITS DE SERVEI<br/>Us enfront de quota,<br/>avis al 80%"]
C1 --> R["Informe amb estat per comprovacio"]
C2 --> R
C3 --> R
C4 --> R
C5 --> R
R --> V["Verd: correcte"]
R --> A["Groc: investigar"]
R --> RJ["Vermell: accio recomanada"]
Els tres estats possibles de cada comprovació:
| Estat | Significa | Què fer |
|---|---|---|
| Verd (sense problemes) | No s'ha detectat res | Res |
| Groc (investigar) | Pot haver-hi un problema | Revisar amb criteri |
| Vermell (acció recomanada) | Hi ha un problema clar | Actuar |
I un advertiment que estalvia frustracions: el groc no sempre és un problema. Trusted Advisor no coneix el teu context. Una instància al 5 % de CPU pot ser un servidor de reserva perfectament justificat. Un bucket sense versionatge pot ser un bucket de fitxers temporals. Les troballes són hipòtesis que cal avaluar, no ordres.
Què comprova cada categoria
Optimització de costos:
| Comprovació | Què busca |
|---|---|
| Instàncies EC2 de baixa utilització | CPU < 10 % i xarxa baixa durant 4+ dies dels últims 14 |
| Volums EBS sense associar | Estat available: es paguen i no serveixen per a res |
| Adreces IP elàstiques sense associar | Es facturen per no fer-se servir |
| Balancejadors de càrrega inactius | ALB/NLB sense destins registrats o sense trànsit |
| Instàncies RDS inactives | Sense connexions durant 7 dies |
| Ús d'instàncies reservades / Savings Plans | Recomanacions de compra (mòdul 11) |
| Instantànies d'RDS antigues | Manuals, molt velles |
| Redshift i altres serveis inactius | Clústers sense ús |
Rendiment:
| Comprovació | Què busca |
|---|---|
| Instàncies EC2 d'alta utilització | CPU > 90 % de manera sostinguda: falta capacitat |
| Volums EBS amb rendiment limitat | IOPS al màxim del volum |
| Encerts de memòria cau de CloudFront | Configuració que impedeix fer memòria cau |
| CloudFront sense compressió activada | Transferència innecessària |
| Grups de seguretat amb moltes regles | Latència d'avaluació |
| Límits de servei propers | També apareix aquí |
Seguretat:
| Comprovació | Què busca |
|---|---|
| Grups de seguretat amb ports oberts sense restricció | 0.0.0.0/0 en ports sensibles |
| Permisos de bucket d'S3 | Lectura o escriptura pública |
| MFA al compte arrel | La comprovació més important de totes |
| Ús del compte arrel | Activitat recent de l'arrel |
| Claus d'accés d'IAM exposades | Buscades en repositoris públics |
| Rotació de claus d'accés | Claus de més de 90 dies |
| Registre d'accés d'S3 i de CloudTrail | Activats o no |
| Certificats ACM a punt de caducar | 30 dies d'antelació |
| Instantànies d'RDS i EBS públiques | Compartides amb «tothom» |
| Política de contrasenyes d'IAM | Requisits mínims |
Tolerància a errors:
| Comprovació | Què busca |
|---|---|
| RDS sense Multi-AZ | Punt únic de fallada a la base de dades |
| ASG en una sola zona de disponibilitat | Sense tolerància a fallada d'AZ |
| Balancejadors amb destins en una sola AZ | Ídem |
| Volums EBS sense instantànies recents | Sense còpia de seguretat |
| Retenció de còpies d'RDS | Període insuficient |
| Comprovacions d'estat de Route 53 | Sense health checks configurats |
| Versionatge de buckets d'S3 | Recuperació davant d'esborrats |
| Túnels VPN redundants | Un sol túnel |
Límits de servei (quotes):
Comprova l'ús enfront de la quota de desenes de serveis i avisa quan se supera el 80 %. És la categoria més infravalorada i la que més caigudes ha causat en la història d'AWS. Té secció pròpia més avall.
Què veus segons el pla de suport
Aquí toca ser completament honest, perquè és on hi ha més decepcions:
| Pla de suport | Cost | Comprovacions de Trusted Advisor |
|---|---|---|
| Basic | 0 USD | Un subconjunt: seguretat bàsica + límits de servei |
| Developer | 29 USD/mes o 3 % | El mateix subconjunt que Basic |
| Business | Des de 100 USD/mes (o ~10 % de la despesa) | Totes (~115 comprovacions) + API + notificacions |
| Enterprise On-Ramp | Des de 5.500 USD/mes | Totes + gestor tècnic compartit |
| Enterprise | Des de 15.000 USD/mes | Totes + gestor tècnic dedicat + Well-Architected guiat |
El que MercadoFresco veu amb el pla Basic (0 USD):
| Comprovació | Disponible? |
|---|---|
| Grups de seguretat: ports específics sense restricció | Sí |
| Permisos de bucket d'S3 | Sí |
| MFA al compte arrel | Sí |
| Política de contrasenyes d'IAM | Sí |
| Instantànies d'RDS públiques | Sí |
| Instantànies d'EBS públiques | Sí |
| Ús d'IAM (existència d'usuaris/rols) | Sí |
| Límits de servei | Sí |
| Claus d'accés exposades públicament | Sí |
| Instàncies EC2 infrautilitzades | No |
| Volums EBS sense associar | No |
| IP elàstiques sense associar | No |
| Balancejadors inactius | No |
| RDS sense Multi-AZ | No |
| ASG en una sola AZ | No |
| Encerts de memòria cau de CloudFront | No |
| Certificats ACM a punt de caducar | No |
| Recomanacions d'instàncies reservades | No |
| API de Trusted Advisor | No |
| Notificacions setmanals per correu | No |
És a dir: amb el pla Basic, MercadoFresco veu seguretat bàsica i límits de servei, que no és poc —són les dues categories que més caigudes eviten— però no veu res de cost, rendiment ni tolerància a errors, ni té API per automatitzar.
Val la pena pujar a Business? El càlcul honest per a MercadoFresco:
| Concepte | Xifra |
|---|---|
| Despesa mensual a AWS | ~600 USD |
| Cost del pla Business | 100 USD/mes (mínim) |
| Estalvi potencial detectat per les comprovacions de cost | 30-60 USD/mes |
| Valor del suport tècnic (resposta en 1 h per a producció caiguda) | Difícil de quantificar |
Amb 600 USD de despesa, pagar 100 USD per Trusted Advisor no surt a compte només per les recomanacions. Però el pla Business inclou molt més que Trusted Advisor: suport tècnic 24×7 amb resposta en una hora per a producció caiguda, accés a arquitectes de solucions, i la possibilitat d'obrir casos tècnics. Aquesta és la raó real per contractar-lo, i cal decidir-ho amb aquest criteri, no per les comprovacions.
La decisió de MercadoFresco: continuar en Basic de moment i suplir el que falta amb el que ja s'ha après, amb revisió de la decisió quan la despesa superi els 2.000 USD mensuals o quan la botiga sigui crítica per al negoci fins al punt de necessitar suport amb SLA. Està anotat al registre de decisions, amb data, igual que la decisió sobre Shield Advanced a 04-04.
Com suplir el que el pla Basic no dona
Aquí és on el mòdul sencer es paga. Cada comprovació que Trusted Advisor no dona en Basic es pot reproduir amb el que ja saps:
| Comprovació que falta | Com suplir-la | Lliçó |
|---|---|---|
| Volums EBS sense associar | Consulta avançada de Config | 05-04 |
| IP elàstiques sense associar | describe-addresses + script |
01-05 |
| Instàncies infrautilitzades | Mètrica CPUUtilization + Compute Optimizer |
05-01 |
| RDS sense Multi-AZ | Regla de Config rds-multi-az-support |
05-04 |
| ASG en una sola AZ | Regla de Config personalitzada amb Guard | 05-04 |
| Balancejadors inactius | Mètrica RequestCount = 0 |
05-01 |
| Certificats ACM caducant | describe-certificate + alarma |
03-03 |
| Encerts de memòria cau baixos | Alarma mercadofresco-cdn-aciertos-bajos |
04-04 |
| Recomanacions de reserves | Cost Explorer | 11-03 |
| Volums sense instantànies | Política de DLM ja muntada | 02-02 |
Els scripts concrets. Volums orfes, amb Config:
aws configservice select-resource-config \
--expression "
SELECT resourceId, configuration.size, configuration.createTime, tags
WHERE resourceType = 'AWS::EC2::Volume'
AND configuration.state.value = 'available'
" \
--profile mercadofresco-dev --region eu-west-1IP elàstiques sense associar, que es facturen per no fer-se servir:
aws ec2 describe-addresses \
--query 'Addresses[?AssociationId==`null`].[PublicIp,AllocationId,Tags[?Key==`Componente`].Value|[0]]' \
--output table \
--profile mercadofresco-dev --region eu-west-1Balancejadors sense trànsit en els últims 7 dies:
"""Detecta balancejadors inactius: la troballa de cost que Basic no dona."""
import boto3
from datetime import datetime, timedelta, timezone
elb = boto3.client("elbv2", region_name="eu-west-1")
cw = boto3.client("cloudwatch", region_name="eu-west-1")
fi = datetime.now(timezone.utc)
inici = fi - timedelta(days=7)
for balancejador in elb.describe_load_balancers()["LoadBalancers"]:
nom = balancejador["LoadBalancerName"]
# La dimensio de l'ALB es la part de l'ARN a partir de "loadbalancer/"
dimensio = balancejador["LoadBalancerArn"].split("loadbalancer/")[1]
dades = cw.get_metric_statistics(
Namespace="AWS/ApplicationELB",
MetricName="RequestCount",
Dimensions=[{"Name": "LoadBalancer", "Value": dimensio}],
StartTime=inici, EndTime=fi,
Period=86400, Statistics=["Sum"],
)
total = sum(p["Sum"] for p in dades["Datapoints"])
if total == 0:
print(f"INACTIU: {nom} — 0 peticions en 7 dies (~16 USD/mes)")
else:
print(f"actiu: {nom} — {int(total):,} peticions")Certificats d'ACM a punt de caducar (recorda: els de CloudFront són a us-east-1):
for REGION in eu-west-1 us-east-1; do
aws acm list-certificates --region "$REGION" \
--query 'CertificateSummaryList[].CertificateArn' --output text \
--profile mercadofresco-dev \
| tr '\t' '\n' | while read -r ARN; do
aws acm describe-certificate --certificate-arn "$ARN" --region "$REGION" \
--query 'Certificate.[DomainName,NotAfter,Status,RenewalEligibility]' \
--output text --profile mercadofresco-dev
done
doneEls certificats emesos per ACM i validats per DNS es renoven sols (03-03), però els importats no, i un certificat caducat tomba la botiga sencera. Aquesta comprovació mereix estar a la rutina mensual.
La conclusió que importa: amb Config, CloudWatch i un grapat de scripts, MercadoFresco reprodueix la major part del que donaria el pla Business, gratis. El que no pot reproduir és el suport tècnic amb SLA, i aquest és el veritable producte que es compra.
Recorregut comentat d'un informe de MercadoFresco
Aquest és l'informe complet, incloent-hi les comprovacions que MercadoFresco no veu amb Basic però que hem reproduït amb les tècniques de la secció anterior. Comentat troballa a troballa.
Seguretat
| Comprovació | Estat | Detall |
|---|---|---|
| MFA al compte arrel | Verd | Activat a 01-02 |
| Ús del compte arrel | Verd | Sense activitat des del febrer |
| Política de contrasenyes d'IAM | Verd | 04-01 |
| Grups de seguretat: ports sense restricció | Vermell | 1 grup amb el 22 obert a 0.0.0.0/0 |
| Permisos de bucket d'S3 | Verd | Bloqueig públic als 7 buckets |
| Instantànies d'RDS públiques | Verd | Cap |
| Claus d'accés exposades | Verd | Cap de detectada |
| Rotació de claus d'accés | Groc | 1 clau de 412 dies |
| Registre de CloudTrail | Verd | trail-mercadofresco (05-03) |
Comentari. El vermell del port 22 és exactament la mateixa troballa que va donar la regla
mercadofresco-ssh-restringido de Config a 05-04. Dues eines independents assenyalant el mateix és
la millor confirmació possible que és real. La diferència: Config ho remeia sol; Trusted Advisor
només ho assenyala.
La clau de 412 dies és la de l'usuari integracion-proveedor de l'exercici 2 de 05-03. L'arranjament
de fons no és rotar-la: és substituir-la per un rol assumible amb sts:ExternalId (04-01).
Tolerància a errors
| Comprovació | Estat | Detall |
|---|---|---|
| RDS Multi-AZ | Verd | mercadofresco-pedidos és Multi-AZ (02-04) |
| Còpies automàtiques d'RDS | Verd | 7 dies de retenció |
| ASG en diverses AZ | Verd | eu-west-1a i eu-west-1b (03-01) |
| Destins de l'ALB en diverses AZ | Verd | |
| Volums EBS amb instantànies | Groc | 2 volums sense instantània en 30 dies |
| Versionatge de buckets d'S3 | Groc | 2 buckets sense versionatge |
| Health checks de Route 53 | Groc | Sense health checks al registre principal |
Comentari. Els tres grocs són exemples perfectes de troballes que cal avaluar, no obeir:
- Els 2 volums sense instantània són els volums arrel de les instàncies de l'ASG. No necessiten
còpia: són efímers per disseny, es recreen des de
lt-mercadofresco-tienda, i fer-los instantànies seria pagar per copiar una cosa que ja és a l'AMI. Es marca com a acceptat i es documenta. - Els 2 buckets sense versionatge són
mercadofresco-registros-web(registres de l'ALB) imercadofresco-catalogo-fotos. El primer, correcte: els registres no se sobreescriuen. El segon sí que és una troballa real: si algú puja una foto equivocada sobre una de bona, no hi ha marxa enrere. Es corregeix. - Les comprovacions d'estat de Route 53 són una troballa real i valuosa. MercadoFresco té un registre àlies cap a CloudFront (03-05) sense comprovació d'estat. No hi ha commutació per error configurada cap a res. És una decisió pendent que mereix discussió, no una correcció immediata.
Rendiment
| Comprovació | Estat | Detall |
|---|---|---|
| Instàncies EC2 d'alta utilització | Verd | L'ASG escala abans d'arribar-hi |
| Volums EBS amb rendiment limitat | Verd | gp3 amb IOPS suficients (02-02) |
| Encerts de memòria cau de CloudFront | Verd | 96,6 % (03-04) |
| Compressió a CloudFront | Groc | Sense compressió en 1 comportament de memòria cau |
| Grups de seguretat amb moltes regles | Verd |
Comentari. El groc de la compressió és diner directe: activar la compressió automàtica a CloudFront per a les respostes de l'API redueix la transferència de sortida, que és la partida més cara de CloudFront. És un canvi d'una casella. Es corregeix el mateix dia.
Optimització de costos
| Comprovació | Estat | Detall | Estalvi |
|---|---|---|---|
| Volums EBS sense associar | Vermell | 3 volums available, 100 GiB en total |
8 USD/mes |
| IP elàstiques sense associar | Vermell | 2 IP sense associar | 7,30 USD/mes |
| Instàncies EC2 infrautilitzades | Groc | mercadofresco-tienda-01 al 4 % de CPU |
~30 USD/mes |
| Balancejadors inactius | Verd | L'ALB té trànsit | — |
| Instantànies d'RDS antigues | Groc | 4 manuals de més de 6 mesos | 3,50 USD/mes |
| Instàncies reservades / Savings Plans | Groc | Recomanació de compra | ~90 USD/mes |
Comentari, troballa per troballa:
- Els 3 volums orfes van quedar d'instàncies acabades manualment durant les proves de 02-01 i
02-02. Ningú no els va esborrar perquè en acabar una instància, els volums addicionals no
s'esborren llevat que
DeleteOnTerminationestigui actiu. És la troballa de cost més comuna d'AWS. S'esborren, després de comprovar que no contenen res. - Les 2 IP elàstiques són de les proves del NAT i de la instància inicial. Una IP elàstica és gratis mentre estigui associada a una instància en execució; quan no ho està, es factura precisament per desincentivar l'acaparament. S'alliberen.
mercadofresco-tienda-01al 4 % és una troballa especialment interessant. Aquesta instància és l'original de 02-01, anterior a l'ASG. Ja no serveix per a res: el trànsit va a l'ALB i d'allà al grup. Està encesa des de llavors perquè ningú no es va recordar d'apagar-la. És exactament el tipus de cosa que només es detecta amb un repàs automàtic.- Les 4 instantànies manuals de més de 6 mesos són de les proves de 02-04. Aquí cal aplicar criteri: abans d'esborrar-les convé comprovar que no hi ha cap obligació de conservació, i aquesta comprovació és la regla personalitzada de l'exercici 2 de 05-04.
- La recomanació de Savings Plans és la de més impacte de tot l'informe, i deliberadament no es tracta aquí: l'anàlisi de compromisos d'ús és la lliçó 11-05. Trusted Advisor ho assenyala; la decisió es pren amb Cost Explorer al davant.
Límits de servei
| Servei | Quota | Ús | % | Estat |
|---|---|---|---|---|
| EC2: vCPU sota demanda (estàndard) | 16 | 8 | 50 % | Verd |
| VPC per regió | 5 | 1 | 20 % | Verd |
| Grups de seguretat per VPC | 2.500 | 6 | 0 % | Verd |
| Regles per grup de seguretat | 60 | 8 | 13 % | Verd |
| IP elàstiques per regió | 5 | 5 | 100 % | Vermell |
| Instàncies RDS | 40 | 2 | 5 % | Verd |
| Funcions Lambda: concurrència | 1.000 | ~40 | 4 % | Verd |
| Buckets d'S3 | 100 | 7 | 7 % | Verd |
| Distribucions de CloudFront | 200 | 1 | 0 % | Verd |
| Zones allotjades de Route 53 | 500 | 1 | 0 % | Verd |
| Certificats d'ACM | 2.500 | 2 | 0 % | Verd |
El vermell de les IP elàstiques al 100 % és la troballa més urgent de l'informe, i és doblement
interessant: és la mateixa causa que la troballa de cost. Les 2 IP sense associar estan consumint
2 de les 5 places de la quota. Si demà calgués una tercera passarel·la NAT o una IP per a alguna cosa,
la crida a l'API fallaria amb AddressLimitExceeded i ningú no entendria per què. Alliberar-les
resol les dues coses alhora.
I la fila de vCPU és la que porta al cas següent.
Quotes de servei: el límit invisible
Tot compte d'AWS té quotes (abans «límits de servei») en pràcticament tot: quantes vCPU pots tenir corrent, quantes VPC, quantes regles per grup de seguretat, quanta concurrència de Lambda.
Existeixen per protegir AWS d'un ús descontrolat —accidental o maliciós— i per protegir-te a tu d'una factura sorpresa. La majoria són ajustables; algunes no.
| Quota ajustable | Quota no ajustable | |
|---|---|---|
| Exemple | vCPU sota demanda, IP elàstiques, VPC | Regles per NACL (20), mida màxima d'objecte a S3 |
| Com es puja | Sol·licitud des de Service Quotas | No es pot |
| Temps | Minuts a dies | — |
El que fa perilloses les quotes és quan te n'assabentes: quan ja hi has xocat, en el pitjor moment possible. Un compte que funciona perfectament durant mesos pot fallar de cop el divendres en què necessita escalar.
Service Quotas és la consola on es veuen i es gestionen:
# Veure la quota de vCPU sota demanda
aws service-quotas get-service-quota \
--service-code ec2 \
--quota-code L-1216C47A \
--query 'Quota.[QuotaName,Value,Adjustable]' \
--output table \
--profile mercadofresco-dev --region eu-west-1
# Llistar totes les quotes d'un servei
aws service-quotas list-service-quotas \
--service-code ec2 \
--query 'Quotas[?Adjustable==`true`].[QuotaCode,QuotaName,Value]' \
--output table \
--profile mercadofresco-dev --region eu-west-1
# Els codis de servei disponibles
aws service-quotas list-services \
--query 'Services[].[ServiceCode,ServiceName]' --output table \
--profile mercadofresco-dev --region eu-west-1Les quotes que MercadoFresco vigila i per què:
| Quota | Codi | Valor | Per què importa |
|---|---|---|---|
| vCPU sota demanda (estàndard) | L-1216C47A |
16 | Sostre real de l'ASG |
| IP elàstiques per regió | L-0263D0A3 |
5 | Passarel·les NAT i sortides |
| Concurrència de Lambda | L-B99A9384 |
1.000 | Pic de miniatures |
| Instàncies RDS | L-7B6409FD |
40 | Rèpliques de lectura |
| Grups de destí per ALB | L-B22855CB |
100 | Rutes de la botiga |
| Regles per Web ACL de WAF | L-C4144F1D |
1.500 WCU | 04-05 |
El cas de l'ASG que no passa de quatre instàncies
Aquí hi ha el cas concret que anunciàvem, i és un exemple perfecte de per què aquesta categoria importa.
asg-mercadofresco-tienda està configurat amb mínim 2, desitjat 2, màxim 4. La Marta sempre havia
assumit que aquell 4 era una decisió de disseny. En mirar les quotes descobreix que no del tot:
- Les instàncies són
t3.large: 2 vCPU cadascuna. - La quota de vCPU sota demanda estàndard del compte és 16.
- Altres càrregues del compte consumeixen 8 vCPU.
- Queden 8 vCPU disponibles = 4 instàncies
t3.large.
El màxim de l'ASG no està limitat pel disseny: està limitat per la quota. I això té una conseqüència molt concreta i molt lletja.
El divendres a les 19:00, amb 900 comandes per hora i una capacitat de 600 comandes per hora per instància, MercadoFresco necessita almenys 2 instàncies només per al trànsit normal. Si arriba un pic del doble —una campanya, una menció a les xarxes, un divendres de pont— l'ASG intenta escalar. I si una altra cosa del compte hagués consumit vCPU entremig:
Launch failed: You have requested more vCPU capacity than your current vCPU limit of 16 allows for the instance bucket that the specified instance type belongs to.
L'ASG no escala. Els clients veuen errors. I la causa no és a cap alarma de CloudWatch, ni a cap regla de Config, ni a cap traça d'X-Ray. És en una quota del compte que ningú no ha mirat mai.
Pitjor encara: la fallada es produeix en el pitjor moment possible, perquè és precisament quan escales que xoques amb el límit. És la fallada latent perfecta.
L'alarma mercadofresco-asg-al-maximo de 04-04 avisa quan el grup arriba al seu màxim, que és un bon
senyal que fa falta més capacitat. Però avisa quan ja ets al sostre; no avisa que el sostre és més
baix del que et pensaves.
Sol·licitar un augment de quota
# 1. Veure el valor actual i si es ajustable
aws service-quotas get-service-quota \
--service-code ec2 --quota-code L-1216C47A \
--profile mercadofresco-dev --region eu-west-1
# 2. Sol·licitar l'augment
aws service-quotas request-service-quota-increase \
--service-code ec2 \
--quota-code L-1216C47A \
--desired-value 64 \
--profile mercadofresco-dev --region eu-west-1
# 3. Seguir l'estat de la sol·licitud
aws service-quotas list-requested-service-quota-change-history \
--service-code ec2 \
--query 'RequestedQuotas[].[QuotaName,DesiredValue,Status,Created]' \
--output table \
--profile mercadofresco-dev --region eu-west-1Els estats possibles: PENDING, CASE_OPENED, APPROVED, DENIED, CASE_CLOSED.
Consells pràctics, apresos a base de disgustos:
- Sol·licita amb antelació. Els augments petits s'aproven automàticament en minuts; els grans passen a un cas de suport i poden trigar dies. Sol·licitar el divendres a la tarda perquè hi estàs xocant ara mateix és exactament l'escenari que cal evitar.
- Demana amb marge, però raonable. Demanar 64 vCPU quan en fas servir 8 és raonable si esperes créixer. Demanar-ne 10.000 sense justificació es denega.
- Justifica. Si l'augment passa a suport, explicar el cas d'ús —«botiga de comerç electrònic amb pics els divendres, ASG que necessita escalar a 12 instàncies»— accelera molt.
- Les quotes són per regió. Pujar-la a
eu-west-1no la puja aus-east-1. Si tens pla de recuperació davant de desastres en una altra regió, puja-la també allà, o descobriràs el problema el dia del desastre. - Algunes quotes són per compte, no per regió: IAM, S3, CloudFront.
- Sol·licita amb Organizations quan tinguis diversos comptes (09-04): les plantilles de quota apliquen valors per defecte als comptes nous.
I l'aritmètica que cal fer abans de decidir el valor:
| Escenari | Instàncies | vCPU necessàries |
|---|---|---|
| Normal (2 instàncies) | 2 × t3.large |
4 |
| Pic del divendres (4) | 4 × t3.large |
8 |
| Pic doble (8) | 8 × t3.large |
16 |
| Durant un desplegament blau/verd (×2) | 16 × t3.large |
32 |
| Marge per a altres càrregues | — | +16 |
| Quota recomanada | 64 |
Fixa't en la quarta fila: un desplegament blau/verd duplica temporalment el nombre d'instàncies. És un cas que s'oblida sistemàticament en calcular quotes, i és la causa que molts primers desplegaments sense interrupció fallin. S'estudia a 08-03.
Alarmar abans de xocar amb una quota
Service Quotas publica mètriques d'ús a CloudWatch a l'espai AWS/Usage. Això permet alarmar
abans d'arribar al límit, que és el que converteix una quota de parany en una dada gestionada.
aws cloudwatch put-metric-alarm \
--alarm-name mercadofresco-cuota-vcpu \
--alarm-description "Us de vCPU per damunt del 70% de la quota del compte" \
--namespace AWS/Usage \
--metric-name ResourceCount \
--dimensions Name=Service,Value=EC2 \
Name=Resource,Value=vCPU \
Name=Type,Value=Resource \
Name=Class,Value=Standard/OnDemand \
--statistic Maximum --period 300 --evaluation-periods 2 --datapoints-to-alarm 2 \
--threshold 11 --comparison-operator GreaterThanThreshold \
--treat-missing-data notBreaching \
--alarm-actions arn:aws:sns:eu-west-1:111122223333:alertas-mercadofresco \
--profile mercadofresco-dev --region eu-west-1Aquell llindar d'11 és el 70 % de 16. La manera elegant d'expressar-ho, que s'ajusta sola si la
quota canvia, és una expressió de mètrica amb la funció SERVICE_QUOTA():
aws cloudwatch put-metric-alarm \
--alarm-name mercadofresco-cuota-vcpu-porcentaje \
--alarm-description "Us de vCPU per damunt del 70% de la quota, s'ajusta sol" \
--evaluation-periods 2 --datapoints-to-alarm 2 \
--threshold 70 --comparison-operator GreaterThanThreshold \
--treat-missing-data notBreaching \
--metrics '[
{
"Id": "uso",
"MetricStat": {
"Metric": {
"Namespace": "AWS/Usage",
"MetricName": "ResourceCount",
"Dimensions": [
{"Name":"Service","Value":"EC2"},
{"Name":"Resource","Value":"vCPU"},
{"Name":"Type","Value":"Resource"},
{"Name":"Class","Value":"Standard/OnDemand"}
]
},
"Period": 300,
"Stat": "Maximum"
},
"ReturnData": false
},
{ "Id": "cuota", "Expression": "SERVICE_QUOTA(uso)", "ReturnData": false },
{ "Id": "porcentaje", "Expression": "100 * (uso / cuota)",
"Label": "% de la quota de vCPU usada", "ReturnData": true }
]' \
--alarm-actions arn:aws:sns:eu-west-1:111122223333:alertas-mercadofresco \
--profile mercadofresco-dev --region eu-west-1SERVICE_QUOTA() és la funció que fa que això funcioni bé: retorna el valor actual de la quota
per a aquesta mètrica. Si demà AWS aprova l'augment a 64, l'alarma es recalibra sola sense que ningú
toqui res. És exactament el tipus de detall que separa una alarma que envelleix bé d'una que s'ha de
mantenir.
La mateixa tècnica per a la concurrència de Lambda, que és l'altra quota que pot mossegar MercadoFresco al pic de pujada de fotos al catàleg:
aws cloudwatch put-metric-alarm \
--alarm-name mercadofresco-cuota-lambda-concurrencia \
--namespace AWS/Lambda --metric-name ConcurrentExecutions \
--statistic Maximum --period 60 --evaluation-periods 3 --datapoints-to-alarm 2 \
--threshold 700 --comparison-operator GreaterThanThreshold \
--treat-missing-data notBreaching \
--alarm-actions arn:aws:sns:eu-west-1:111122223333:alertas-mercadofresco \
--profile mercadofresco-dev --region eu-west-1Cost: 0,10 USD per alarma. Dues alarmes de quota, 0,20 USD al mes, per evitar una fallada d'escalat al pic d'un divendres. És probablement la millor relació cost-benefici de tot el mòdul.
Automatització: API, exportació i notificacions
Important: l'API de Trusted Advisor (support i trustedadvisor) requereix pla Business o
superior. Amb Basic, aquestes ordres retornen un error de subscripció. S'inclouen perquè és el que
faràs servir tan bon punt la teva organització tingui aquest pla.
# Llistar totes les comprovacions disponibles
aws support describe-trusted-advisor-checks \
--language es \
--query 'checks[].[id,category,name]' --output table \
--region us-east-1 --profile mercadofresco-dev
# El resultat d'una comprovacio concreta
# (0Xc6LMYG8P = volums EBS infrautilitzats)
aws support describe-trusted-advisor-check-result \
--check-id 0Xc6LMYG8P --language es \
--region us-east-1 --profile mercadofresco-dev
# Forcar el refresc d'una comprovacio
aws support refresh-trusted-advisor-check \
--check-id 0Xc6LMYG8P \
--region us-east-1 --profile mercadofresco-dev
# Resum de l'estat de totes
aws support describe-trusted-advisor-check-summaries \
--check-ids 0Xc6LMYG8P Qch7DwouX1 hjLMh88uM8 \
--region us-east-1 --profile mercadofresco-devL'API de support només és a us-east-1. És global i s'atén des d'allà, igual que ACM per a
CloudFront (03-04) o les Web ACL de CloudFront (04-05). És un patró recurrent a AWS que ja
reconeixes.
Un script que exporta l'informe complet a CSV per a la revisió mensual:
"""Exporta les troballes de Trusted Advisor a CSV. Requereix pla Business."""
import boto3
import csv
from datetime import date
suport = boto3.client("support", region_name="us-east-1")
comprovacions = suport.describe_trusted_advisor_checks(language="es")["checks"]
fitxer = f"trusted-advisor-mercadofresco-{date.today()}.csv"
with open(fitxer, "w", newline="", encoding="utf-8") as f:
escriptor = csv.writer(f)
escriptor.writerow(["Categoria", "Comprovacio", "Estat",
"Recursos marcats", "Estalvi estimat USD"])
for comprovacio in comprovacions:
resultat = suport.describe_trusted_advisor_check_result(
checkId=comprovacio["id"], language="es"
)["result"]
if resultat["status"] == "ok":
continue # Nomes interessen warning i error
estalvi = 0
if "costOptimizing" in resultat.get("categorySpecificSummary", {}):
estalvi = resultat["categorySpecificSummary"]["costOptimizing"] \
.get("estimatedMonthlySavings", 0)
escriptor.writerow([
comprovacio["category"],
comprovacio["name"],
resultat["status"], # warning / error
resultat["resourcesSummary"]["resourcesFlagged"],
round(estalvi, 2),
])
print(f"Informe escrit a {fitxer}")Notificacions setmanals per correu: amb pla Business o Enterprise, Trusted Advisor envia un
resum setmanal als contactes configurats. S'activen a les preferències de la consola, i els
destinataris són els contactes alternatius del compte —el contacte d'operacions, el de seguretat,
el de facturació—, que vam configurar a 01-02. Si llavors no els vas configurar, aquest és el moment:
[email protected].
Integració amb EventBridge
Trusted Advisor emet esdeveniments quan l'estat d'una comprovació canvia. Amb EventBridge (07-03) es pot reaccionar automàticament:
{
"source": ["aws.trustedadvisor"],
"detail-type": ["Trusted Advisor Check Item Refresh Notification"],
"detail": {
"status": ["ERROR", "WARN"],
"check-name": [
"Security Groups - Specific Ports Unrestricted",
"Amazon S3 Bucket Permissions",
"MFA on Root Account",
"Service Limits",
"Exposed Access Keys"
]
}
}aws events put-rule \
--name regla-mercadofresco-trusted-advisor \
--description "Troballes critiques de Trusted Advisor cap a alertes" \
--event-pattern file://patron-trusted-advisor.json \
--profile mercadofresco-dev --region us-east-1
aws events put-targets \
--rule regla-mercadofresco-trusted-advisor \
--targets 'Id=1,Arn=arn:aws:sns:us-east-1:111122223333:alertas-mercadofresco-global' \
--profile mercadofresco-dev --region us-east-1Dos detalls: els esdeveniments de Trusted Advisor s'emeten a us-east-1, així que la regla va
allà; i el filtre per check-name és imprescindible, perquè sense ell rebries un avís cada vegada que
canvia qualsevol de les ~115 comprovacions.
El que EventBridge habilita, i que és el patró a copiar: no només notificar, sinó actuar. Una regla pot invocar una Lambda que, davant d'una troballa de «clau d'accés exposada», desactivi la clau immediatament. Quan una clau apareix en un repositori públic, cada minut compta. El detall complet d'EventBridge —patrons, objectius, busos, reintents— és la lliçó 07-03.
Compute Optimizer i Cost Optimization Hub
Dos serveis complementaris que s'esmenten aquí i es desenvolupen al mòdul 11:
AWS Compute Optimizer analitza les mètriques de CloudWatch dels últims 14 dies —més si actives les mètriques de memòria de l'agent que vam instal·lar a 05-01— i recomana el tipus d'instància òptim per a cada càrrega. És gratis per a les recomanacions bàsiques.
aws compute-optimizer get-ec2-instance-recommendations \
--query 'instanceRecommendations[].[instanceName,currentInstanceType,finding,recommendationOptions[0].instanceType,recommendationOptions[0].performanceRisk]' \
--output table \
--profile mercadofresco-dev --region eu-west-1Sortida típica per a MercadoFresco:
| Instància | Tipus actual | Troballa | Recomanat | Risc |
|---|---|---|---|---|
mercadofresco-tienda-01 |
t3.large |
Over-provisioned | t3.small |
Molt baix |
| Instàncies de l'ASG | t3.large |
Optimized | — | — |
I aquí convé un advertiment important: Compute Optimizer no sap que mercadofresco-tienda-01 no
hauria d'existir. Recomana reduir-la a t3.small i estalviar 20 USD. La resposta correcta és
apagar-la, i estalviar-ne 60. Les eines automàtiques optimitzen el que hi ha; la pregunta de si
hi ha de ser la continua fent una persona.
Compute Optimizer analitza també volums EBS, funcions Lambda —recomanant la memòria òptima, que a Lambda determina també la CPU— i serveis d'ECS a Fargate (mòdul 10).
Cost Optimization Hub consolida en un sol lloc les recomanacions de cost de Compute Optimizer, Trusted Advisor, Cost Explorer i les recomanacions de reserves, amb l'estalvi estimat agregat i sense duplicar. És la lliçó 11-03.
Aquesta lliçó no entra en costos. El mòdul 11 sencer hi està dedicat: etiquetatge i assignació (11-02), Cost Explorer (11-03), Budgets (11-04) i Savings Plans (11-05).
La rutina de revisió mensual de la Marta
Aquesta és la llista de comprovació concreta que la Marta executa el primer dilluns de cada mes, en una hora. És el producte operatiu de tot el mòdul 5.
Seguretat (15 minuts)
- [ ] Trusted Advisor, categoria de seguretat: cap vermell.
- [ ] Quadre de compliment de Config: nombre de regles no conformes enfront del mes passat.
- [ ]
aws cloudtrail validate-logssobre el mes anterior; desar-ne la sortida. - [ ] Consulta d'Athena: IP d'origen desconegudes i
AccessDeniedagrupats (05-03). - [ ] Revisar usuaris IAM amb claus de més de 90 dies.
- [ ] Comprovar que no hi ha activitat del compte arrel.
Cost (10 minuts)
- [ ] Volums EBS
available(consulta de Config). - [ ] IP elàstiques sense associar.
- [ ] Balancejadors sense trànsit en 7 dies.
- [ ] Recomanacions de Compute Optimizer.
- [ ] Comparar la factura del mes amb la de l'anterior; investigar qualsevol desviació superior al 20 %.
- [ ] Instantànies manuals d'RDS i EBS de més de 6 mesos.
Fiabilitat (10 minuts)
- [ ] Trusted Advisor, tolerància a errors.
- [ ] Quotes de servei: res per damunt del 70 %.
- [ ] Certificats d'ACM: cap a menys de 60 dies de caducar (a les dues regions).
- [ ] Comprovar que el canari
canario-mercadofresco-comprano ha fallat. - [ ] Revisar que les polítiques de DLM han creat les instantànies previstes (02-02).
Observabilitat (15 minuts) — el més important i el que més se salta
- [ ] Simulacre trimestral:
set-alarm-statesobre una alarma crítica i confirmar que l'avís arriba al telèfon de guàrdia. - [ ] Subscripcions d'SNS: cap en
PendingConfirmation. - [ ] Grups de registres sense retenció (regla de Config, hauria de donar zero).
- [ ] Cost de CloudWatch del mes: ha crescut? Per què?
- [ ] Alarmes que han saltat aquest mes: alguna va ser un fals positiu? Ajustar llindar o esborrar-la.
- [ ] Alarmes que no van saltar quan tocava: afegir la que falta.
Aquest penúltim punt és el que manté viu el sistema. Una alarma que dona falsos positius repetits acaba sent ignorada, i el dia que sigui real ningú no la mirarà. Una alarma que s'ignora és pitjor que no tenir alarma, perquè dona una falsa sensació de cobertura. Esborrar alarmes és tan important com crear-les.
Deute tècnic (10 minuts)
- [ ] Revisar el registre de decisions: alguna amb data de revisió vençuda? (Shield Advanced a 04-04, pla de suport en aquesta lliçó, migració a ADOT a 05-02).
- [ ] Regles de WAF marcades com a temporals durant un incident (04-05).
- [ ] Excepcions acceptades de Config i de Trusted Advisor: continuen sent vàlides?
Tancament del mòdul: la capa d'observabilitat completa
flowchart TD
subgraph INFRA["Infraestructura de MercadoFresco - moduls 1 a 4"]
A["ASG + EC2"]
B["ALB + CloudFront"]
C["RDS + replica"]
D["Lambdas + S3"]
E["VPC + SG + WAF + KMS"]
end
INFRA --> M["05-01 CLOUDWATCH<br/>metriques, registres, alarmes<br/>tauler mercadofresco-produccion"]
INFRA --> X["05-02 X-RAY<br/>traces d'extrem a extrem<br/>mapa de serveis"]
INFRA --> T["05-03 CLOUDTRAIL<br/>qui va cridar l'API<br/>trail-mercadofresco"]
INFRA --> G["05-04 AWS CONFIG<br/>estat i compliment<br/>+ remediacio automatica"]
INFRA --> V["05-05 TRUSTED ADVISOR<br/>bones practiques<br/>i quotes de servei"]
M --> SNS["alertas-mercadofresco<br/>correu + SMS COMPROVAT"]
X --> SNS
T --> SNS
G --> SNS
V --> SNS
M -.->|"ServiceLens"| X
T -.->|"dispara la gravacio"| G
G -.->|"troballa -> regla"| V
V -.->|"regla nova"| G
SNS --> P["Marta, Luis i Sara"]
Les cinc peces i què respon cadascuna, que és el resum que cal endur-se:
| Lliçó | Servei | Pregunta que respon |
|---|---|---|
| 05-01 | CloudWatch | Està funcionant? Quant? Va bé? Me n'assabento si falla? |
| 05-02 | X-Ray | On se'n va anar el temps? Quin component és el culpable? |
| 05-03 | CloudTrail | Qui va fer què? Quan, des d'on, amb quin resultat? |
| 05-04 | Config | Està ben configurat? Compleix? S'arregla sol? |
| 05-05 | Trusted Advisor | Què se m'està escapant? Xocaré amb algun límit? |
I les connexions entre elles, que són el que converteix cinc serveis en un sistema:
- CloudTrail dispara l'enregistrament de Config: sense CloudTrail, Config no s'assabenta dels canvis.
- CloudWatch rep els esdeveniments de CloudTrail i els converteix en alarmes de seguretat.
- ServiceLens uneix les mètriques de CloudWatch amb les traces d'X-Ray i els registres.
- Trusted Advisor descobreix el que no se't va acudir; Config ho converteix en regla permanent.
- Config remeia; CloudTrail registra la remediació; CloudWatch avisa que ha passat.
El camí complet d'un incident, que ara MercadoFresco té sencer:
Alarma de CloudWatch → ServiceLens → traça d'X-Ray → subsegment culpable → registre correlacionat → CloudTrail si hi va haver intervenció humana → regla de Config perquè no torni.
Les cinc preguntes del mòdul 4, respostes
El mòdul 4 es va tancar amb cinc preguntes obertes. Aquestes són les respostes, amb nom i cognoms:
1. «Ningú no ha comprovat que un avís d'SNS arribi a un telèfon a les 4 de la matinada.»
Resposta a 05-01. Es van comprovar les subscripcions d'alertas-mercadofresco buscant el temut
PendingConfirmation, es va subscriure el correu [email protected] i el telèfon de
guàrdia, i es va fer el simulacre amb set-alarm-state, que dispara les accions reals sense tocar
la mètrica. A més es va descobrir que el «no molestis» del mòbil silenciava els SMS de números curts:
la cadena d'avís inclou el telèfon, i el telèfon també s'ha de provar. Queda com a simulacre
trimestral a la rutina mensual.
2. «Els registres de WAF, VPC, ALB i Lambda s'acumulen en cinc llocs sense correlacionar.»
Resposta a 05-01. Centralització a CloudWatch Logs del que es pot centralitzar —aplicació,
nginx, Lambdas, WAF (aws-waf-logs-mercadofresco), flow logs (flowlogs-mercadofresco) i
PostgreSQL— amb retenció per grup des del primer dia, i amb l'honestedat de reconèixer el que no hi
va: els accessos de l'ALB i de CloudFront viuen a S3 i es consulten amb Athena. Logs Insights
consulta fins a 50 grups alhora, i això és el que fa possible la correlació.
3. «Si un client diu que la seva comanda triga 8 segons, la Marta no sap si el problema és a la botiga, a la Lambda o a la base de dades.»
Resposta dues vegades. Primer a 05-01, amb quatre consultes de Logs Insights sobre quatre
grups i una cronologia muntada a mà: 7.402 ms dins de PostgreSQL. Després a 05-02, en una
sola cerca —annotation.pedido_id = "48213"— i una vista de cascada on el problema es llegeix en dos
segons: 39 subsegments de 190 ms en sèrie, el 91 % del temps, un patró N+1. Corregit amb
WHERE id = ANY(...): p95 de 6,8 s a 0,44 s, i DatabaseConnections de 185 a 96 al pic del
divendres.
4. «Ningú no sap qui va desxifrar l'última còpia.»
Resposta a 05-03. Tres esdeveniments de kms:Decrypt sobre mercadofresco-pedidos: RDS xifrant
la seva còpia automàtica, una instància de l'ASG des de 10.0.11.24, i rol-restauracion-copias a
les 03:42 des de 198.51.100.77, sense MFA, sobre snapshot-2026-07-27. La investigació completa
—congelar l'evidència, trobar l'AssumeRole real, reconstruir la sessió per accessKeyId— va portar
al Luis provant una restauració de matinada. Intenció correcta, procediment incorrecte. Amb accions
correctives i dates, i una alarma per a la propera vegada.
5. «Res no avisa si algú desactiva el xifratge d'un bucket o obre un SG al món.»
Resposta a 05-04. I no només avisa: ho corregeix. Cronologia completa: T+0 algú desactiva
el xifratge, T+3 min Config crea el CI i avalua NON_COMPLIANT, T+4 min la remediació executa
AWS-EnableS3BucketEncryption, T+8 min conforme un altre cop. Sense intervenció humana, amb el
rastre complet a CloudTrail. I el quadre de compliment inicial va trobar catorze recursos que
feia mesos que incomplien sense que res els detectés, perquè no eren esdeveniments: eren estats.
I una sisena, que ningú no havia formulat i que apareix en aquesta lliçó: l'ASG no pot passar de quatre instàncies per una quota de vCPU del compte que ningú no havia mirat mai. Aquest és exactament el tipus de problema que només troba un repàs automàtic, i és el millor argument a favor de Trusted Advisor i de Service Quotas.
Cost total afegit
| Lliçó | Servei | Cost mensual |
|---|---|---|
| 05-01 | CloudWatch (mètriques, registres, alarmes, tauler, canari) | 43,68 USD |
| 05-02 | X-Ray (amb mostreig optimitzat) | 10,60 USD |
| 05-03 | CloudTrail (trail, esdeveniments de dades acotats, Insights, Athena) | 1,59 USD |
| 05-04 | AWS Config (enregistrador optimitzat, 29 regles, remediació) | 6,40 USD |
| 05-05 | Trusted Advisor (pla Basic) + 2 alarmes de quota | 0,20 USD |
| Total del mòdul 5 | ~62,47 USD/mes |
Posat en context:
| Concepte | Cost mensual |
|---|---|
| Infraestructura de MercadoFresco (mòduls 1-3) | ~540 USD |
| Seguretat (mòdul 4) | 28,36 USD |
| Observabilitat (mòdul 5) | 62,47 USD |
| Total | ~631 USD |
L'observabilitat és el 9,9 % de la despesa total. És una proporció alta comparada amb la seguretat, i val la pena dir per què és raonable: el 70 % d'aquesta xifra són CloudWatch i el canari, és a dir, la ingesta de registres i la comprovació contínua que es pot comprar. I enfront del que costa: la correcció de l'N+1 que va trobar X-Ray per 10,60 USD al mes va reduir a la meitat la pressió sobre la base de dades, evitant una ampliació d'instància RDS que hauria costat 80 USD mensuals. L'observabilitat es va pagar sola el primer mes.
I les cinc decisions que mantenen aquesta xifra en 62 USD en lloc de en 600:
- Retenció a cada grup de registres el dia que es crea (05-01).
- Cap dimensió de cardinalitat alta en mètriques personalitzades (05-01).
- Mostreig d'X-Ray al 0 % a
/saludi estàtics, 100 % a comandes (05-02). - Selectors d'esdeveniments de dades per prefix i
readOnly: false(05-03). recordingFrequency: DAILYper a instàncies i volums a Config (05-04).
Cinc línies de configuració que separen 62 USD de més de 600.
Errors Habituals i Consells
1. Esperar que Trusted Advisor ho vegi tot amb el pla Basic. Amb Basic veus seguretat bàsica i límits de servei. Res de cost, rendiment ni tolerància a errors, i sense API.
2. Obeir els grocs sense criteri. Trusted Advisor no coneix el teu context. Un volum arrel d'una instància efímera no necessita instantànies. Cada troballa és una hipòtesi; documenta les que acceptes i per què.
3. Ignorar la categoria de límits de servei. És la que més caigudes ha causat, i és de les poques disponibles al pla gratuït. Revisa-la sempre.
4. Sol·licitar un augment de quota quan ja hi estàs xocant. Els augments grans passen a un cas de suport i triguen dies. Alarma al 70 % i demana amb antelació.
5. Oblidar que les quotes són per regió. Pujar-la a eu-west-1 no la puja a eu-central-1. Si
tens pla de recuperació en una altra regió, puja-la també allà.
6. No comptar el desplegament blau/verd en calcular vCPU. Duplica temporalment les instàncies. És la causa més freqüent que un primer desplegament sense interrupció falli (08-03).
7. Confondre Trusted Advisor amb Config. Config comprova les teves regles i remeia; Trusted Advisor comprova les d'AWS i només assenyala. El cicle bo és: Trusted Advisor descobreix → Config converteix en regla → la remediació ho corregeix.
8. Refrescar comprovacions a mà constantment. Es refresquen soles cada 24 hores. Refrescar manualment abans d'una revisió concreta està bé; fer-ho cada hora no aporta res.
9. Contractar el pla Business només per Trusted Advisor. Fes el càlcul: si l'estalvi detectat no cobreix el cost, la raó per contractar-lo és el suport tècnic amb SLA, no les comprovacions. Decideix-ho amb aquest criteri.
10. Deixar que les troballes s'acumulin. Un informe amb 40 troballes permanents deixa de llegir-se. Resol-les, accepta-les formalment amb justificació, o treu-les de l'abast. Un informe net és un informe que algú mira.
11. No revisar les alarmes que donen falsos positius. Una alarma ignorada és pitjor que no tenir alarma. La revisió mensual inclou esborrar alarmes, no només crear-ne.
12. Optimitzar una instància que no hauria d'existir. Compute Optimizer recomana reduir
mercadofresco-tienda-01 a t3.small. La resposta correcta és apagar-la. Les eines optimitzen el
que hi ha; la pregunta de si hi ha de ser la fa una persona.
Consell final del mòdul: l'observabilitat no s'«acaba». Es manté. El sistema que has muntat en aquestes cinc lliçons es degrada sol si ningú no en té cura: apareixen alarmes sorolloses, registres sense retenció, regles no conformes que es normalitzen, quotes que s'acosten. L'hora mensual de la rutina de la Marta és el que manté viu tot el que hi ha. Sense ella, en sis mesos tens un tauler que ningú no mira i un munt de serveis facturant.
Exercicis
Exercici 1: la decisió del pla de suport
MercadoFresco creix. Dades actuals:
| Concepte | Valor |
|---|---|
| Despesa mensual a AWS | 2.400 USD |
| Comandes diàries | 6.500 |
| Facturació mensual | 185.000 EUR |
| Marge brut | 22 % |
| Persones a l'equip tècnic | 3 (la Marta, el Luis i una incorporació) |
| Guàrdies fora d'horari | La Marta, sense torns formals |
| Caigudes de l'últim any | 2, de 40 i 95 minuts |
Plans disponibles: Basic (0 USD), Developer (29 USD/mes o 3 % de la despesa, el que sigui més gran), Business (100 USD/mes o del 3 al 10 % de la despesa segons trams, el que sigui més gran).
Calcula el cost real de cada pla amb aquesta despesa. Estima el cost d'una caiguda de 95 minuts un divendres en hora punta. Decideix quin pla contractaries, justificant-ho amb números i no només amb les comprovacions de Trusted Advisor. Indica què faries amb el que el pla escollit no cobreix.
Exercici 2: el pla de quotes per al Black Friday
MercadoFresco espera per al Black Friday un pic de 5 vegades el trànsit habitual durant 6 hores. Situació actual:
| Element | Valor actual |
|---|---|
| Instàncies de l'ASG | 2-4 × t3.large (2 vCPU) |
| Capacitat per instància | 600 comandes/hora |
| Pic habitual del divendres | 900 comandes/hora |
| Quota de vCPU sota demanda | 16 |
| Altres càrregues del compte | 8 vCPU |
| Concurrència de Lambda | Quota 1.000, pic actual ~40 |
| IP elàstiques | Quota 5, usades 5 |
| Connexions d'RDS | Límit 200, pic actual 96 |
| Rèpliques de lectura | 1 |
A més, l'equip vol fer un desplegament blau/verd la setmana anterior per publicar la campanya.
Calcula: quantes instàncies calen al pic, quantes vCPU, quines quotes es queden curtes i en quant. Escriu les sol·licituds d'augment amb els valors que demanaries i la seva justificació. Dissenya les alarmes de quota que muntaries. Indica quins altres límits que no són d'AWS revisaries, i amb quanta antelació faries cada cosa.
Exercici 3: la revisió mensual amb troballes reals
És el primer dilluns d'octubre. La Marta executa la seva rutina i troba això:
Seguretat
- Trusted Advisor: 1 vermell — «Grups de seguretat: ports específics sense restricció».
- Config: 3 regles no conformes (el mes passat n'eren 0).
validate-logs: falta un fitxer de resum del 14 de setembre.- Athena: 2.400
AccessDeniedderol-mercadofresco-tiendasobres3:GetObject.
Cost
- Factura de CloudWatch: de 44 a 71 USD.
- 1 volum EBS
availablede 200 GiB, creat el 22 de setembre. - Compute Optimizer: les instàncies de l'ASG marcades com a under-provisioned.
Fiabilitat
- Quota de vCPU al 75 %.
- El canari
canario-mercadofresco-compraha fallat 14 vegades, totes entre les 03:00 i les 03:20.
Observabilitat
- L'alarma
mercadofresco-pedidos-fallidosha saltat 23 vegades aquest mes; 21 van ser falsos positius. - Una subscripció d'SNS en
PendingConfirmation: el correu de la persona nova.
Per a cadascuna de les onze troballes: digues què significa amb tota probabilitat, quina prioritat li dones (crítica, alta, mitjana, baixa), quina acció concreta prendries, i de quina lliçó del curs prové el coneixement necessari. Identifica quines d'aquestes troballes estan relacionades entre si, que és la part que distingeix una revisió mecànica d'una revisió útil.
Solucions
Solució 1
Cost real de cada pla amb 2.400 USD de despesa mensual:
| Pla | Càlcul | Cost real |
|---|---|---|
| Basic | — | 0 USD |
| Developer | màx(29, 3 % de 2.400 = 72) | 72 USD/mes |
| Business | màx(100, 10 % dels primers 10.000 = 240) | 240 USD/mes |
Compte amb el càlcul de Developer i Business: és el més gran entre el mínim i el percentatge. Amb 2.400 USD de despesa, Business costa 240 USD, no 100.
Cost d'una caiguda de 95 minuts un divendres en hora punta:
| Concepte | Càlcul |
|---|---|
| Facturació mensual | 185.000 EUR |
| Facturació per hora (mitjana) | 185.000 / 30 / 24 = 257 EUR/h |
| Factor d'hora punta del divendres | ×4 |
| Facturació en hora punta | ~1.028 EUR/h |
| 95 minuts | ~1.628 EUR de facturació perduda |
| Marge perdut (22 %) | ~358 EUR |
| Comandes no recuperades (estimat que se'n perd el 40 %) | ~143 EUR de marge |
| Cost reputacional i d'atenció al client | No quantificable, real |
Dues caigudes l'any ≈ 700-900 EUR de marge perdut, més el dany d'imatge en una botiga de producte fresc, on la confiança en el lliurament en 24 h és el producte.
La decisió: Business, 240 USD/mes. I la justificació no són les comprovacions de Trusted Advisor:
| Argument | Pes |
|---|---|
| Resposta en 1 hora per a producció caiguda, 24×7 | Decisiu |
| Accés a arquitectes de solucions per revisar decisions | Alt |
| Poder obrir casos tècnics en lloc de buscar a fòrums | Alt |
| Trusted Advisor complet | Mitjà |
| API de Trusted Advisor i notificacions setmanals | Mitjà |
| Estalvi detectat per les comprovacions de cost | 50-100 USD/mes |
El número que tanca la decisió: 240 USD/mes són 2.880 USD/any. Si el suport amb SLA redueix la durada d'una sola caiguda de 95 a 30 minuts, s'estalvien uns 240 EUR de marge. Amb dues caigudes l'any, no arriba a pagar-se només per això.
Però l'equip són tres persones, una guàrdia informal i cap possibilitat d'escalar a ningú a les 4 de la matinada. L'argument real és de risc, no d'estalvi: amb 185.000 EUR mensuals depenent de la plataforma, no tenir a qui trucar quan alguna cosa greu falli és un risc desproporcionat enfront de 2.880 USD anuals. És el mateix tipus de raonament que a 04-04 va portar a no contractar Shield Advanced —allà el cost era 100 vegades més gran i el risc molt menor—, aplicat en sentit contrari. La conclusió diferent amb el mateix mètode és el que demostra que el mètode és bo.
El que Business no cobreix i cal continuar fent:
| No cobreix | Com es resol |
|---|---|
| Gestor tècnic dedicat | Només en Enterprise; no cal a aquesta escala |
| Revisió Well-Architected guiada | Es fa en autoservei amb l'eina gratuïta (11-01) |
| Remediació automàtica | AWS Config (05-04): Trusted Advisor no remeia |
| Regles pròpies de compliment | AWS Config amb Guard |
| Detecció d'intrusions | GuardDuty, si es contracta |
| Que algú miri l'informe | La rutina mensual de la Marta. Cap eina no substitueix això |
I una condició perquè la decisió sigui bona: contractar Business i no canviar res més seria llençar
els diners. La decisió inclou establir torns de guàrdia formals entre les tres persones, amb el
simulacre de set-alarm-state verificat per a cada telèfon (05-01). El suport d'AWS respon en una
hora; algú de MercadoFresco ha d'estar despert per llegir aquesta resposta.
Solució 2
Càlcul de capacitat.
| Concepte | Valor |
|---|---|
| Pic habitual del divendres | 900 comandes/hora |
| Pic del Black Friday (×5) | 4.500 comandes/hora |
| Capacitat per instància | 600 comandes/hora |
| Instàncies necessàries | 4.500 / 600 = 7,5 → 8 |
| Marge de seguretat (+50 %) | 12 instàncies |
| vCPU necessàries (12 × 2) | 24 vCPU |
| Durant el desplegament blau/verd (×2) | 48 vCPU |
| Altres càrregues | 8 vCPU |
| Total en el pitjor moment | 56 vCPU |
| Quota actual | 16 |
El marge del 50 % no és paranoia: el número de 600 comandes/hora per instància es va mesurar en condicions normals. Al Black Friday la cistella mitjana és més gran, hi ha més cerques per comanda i més abandonaments amb reintents. La capacitat per instància baixarà, no pujarà.
Quotes que es queden curtes:
| Quota | Actual | Necessària | Ajustable? |
|---|---|---|---|
| vCPU sota demanda (estàndard) | 16 | 64 | Sí |
| IP elàstiques | 5 (usades 5) | 10 | Sí |
| Concurrència de Lambda | 1.000 | 1.000 (pic ×5 = 200) | Suficient |
| Instàncies RDS | 40 | 40 | Suficient |
| Connexions d'RDS | 200 | ~480 | No és una quota d'AWS |
| Grups de destí per ALB | 100 | 100 | Suficient |
Sol·licituds d'augment:
# vCPU: de 16 a 64. Marge per al pic, el blau/verd i creixement futur.
aws service-quotas request-service-quota-increase \
--service-code ec2 --quota-code L-1216C47A --desired-value 64 \
--profile mercadofresco-dev --region eu-west-1
# IP elastiques: de 5 a 10. Abans cal alliberar les 2 sense associar.
aws service-quotas request-service-quota-increase \
--service-code ec2 --quota-code L-0263D0A3 --desired-value 10 \
--profile mercadofresco-dev --region eu-west-1Justificació per al cas de suport, si escala: «Botiga de comerç electrònic d'alimentació. Campanya
de Black Friday amb pic previst de 5× el trànsit habitual durant 6 hores el 27 de novembre. Necessitem
escalar el grup d'autoescalat a 12 instàncies t3.large i fer un desplegament blau/verd previ que
duplica temporalment la capacitat. Sol·licitem 64 vCPU amb marge.»
La fila més important de la taula de quotes és la que no és una quota d'AWS: les connexions
d'RDS. Amb 12 instàncies × 40 connexions d'agrupació = 480 connexions, contra un max_connections
de 200. La base de dades es converteix en el coll d'ampolla abans que EC2. I aquesta no s'arregla
amb una sol·licitud a AWS: s'arregla amb arquitectura.
Altres límits que no són quotes d'AWS i que cal revisar:
| Límit | Risc | Acció |
|---|---|---|
max_connections d'RDS |
Crític | Agrupació de connexions, RDS Proxy, o instància més gran |
| Rèpliques de lectura | Alt | Afegir una segona rèplica per a les cerques |
| Límit de la passarel·la de pagament | Crític | Avisar el proveïdor amb setmanes d'antelació |
| Quota d'enviament de correu (SES) | Alt | Confirmacions de comanda: sandbox i límit diari |
| Capacitat del magatzem i de repartiment | Crític | No és un problema tècnic. 4.500 comandes/hora s'han de poder servir |
| Límits d'API de tercers | Mitjà | Missatgeria, mapes, geocodificació |
La cinquena fila és la que un perfil tècnic oblida i la que surt més cara: escalar la botiga per acceptar 4.500 comandes/hora que el magatzem no pot preparar converteix un èxit comercial en una catàstrofe de servei al client. El límit real de MercadoFresco pot ser a la nau, no a AWS.
Alarmes de quota a muntar:
# vCPU al 70% de la quota, ajustant-se sola si la quota canvia
aws cloudwatch put-metric-alarm \
--alarm-name mercadofresco-cuota-vcpu-porcentaje \
--evaluation-periods 2 --datapoints-to-alarm 2 \
--threshold 70 --comparison-operator GreaterThanThreshold \
--metrics '[
{"Id":"uso","MetricStat":{"Metric":{"Namespace":"AWS/Usage",
"MetricName":"ResourceCount","Dimensions":[
{"Name":"Service","Value":"EC2"},{"Name":"Resource","Value":"vCPU"},
{"Name":"Type","Value":"Resource"},{"Name":"Class","Value":"Standard/OnDemand"}]},
"Period":300,"Stat":"Maximum"},"ReturnData":false},
{"Id":"cuota","Expression":"SERVICE_QUOTA(uso)","ReturnData":false},
{"Id":"pct","Expression":"100*(uso/cuota)","ReturnData":true}
]' \
--alarm-actions arn:aws:sns:eu-west-1:111122223333:alertas-mercadofresco \
--profile mercadofresco-dev --region eu-west-1
# Connexions d'RDS al 70% de 200: la quota que de debo mossegara
aws cloudwatch put-metric-alarm \
--alarm-name mercadofresco-rds-conexiones-criticas \
--namespace AWS/RDS --metric-name DatabaseConnections \
--dimensions Name=DBInstanceIdentifier,Value=mercadofresco-pedidos \
--statistic Maximum --period 60 --evaluation-periods 2 \
--threshold 140 --comparison-operator GreaterThanThreshold \
--alarm-actions arn:aws:sns:eu-west-1:111122223333:alertas-mercadofresco \
--profile mercadofresco-dev --region eu-west-1
# Fallades de llancament de l'ASG: el senyal directe d'haver xocat amb la quota
aws cloudwatch put-metric-alarm \
--alarm-name mercadofresco-asg-fallos-lanzamiento \
--namespace AWS/AutoScaling --metric-name GroupPendingInstances \
--dimensions Name=AutoScalingGroupName,Value=asg-mercadofresco-tienda \
--statistic Maximum --period 300 --evaluation-periods 3 --datapoints-to-alarm 3 \
--threshold 0 --comparison-operator GreaterThanThreshold \
--alarm-actions arn:aws:sns:eu-west-1:111122223333:alertas-mercadofresco \
--profile mercadofresco-dev --region eu-west-1La tercera és especialment astuta: instàncies encallades en Pending durant 15 minuts és exactament
el que es veu quan els llançaments fallen per quota.
Cronograma, amb antelació realista:
| Quan | Què |
|---|---|
| 8 setmanes abans | Sol·licitar els augments de quota. Els grans triguen |
| 6 setmanes abans | Alliberar les 2 IP elàstiques i els volums orfes |
| 6 setmanes abans | Avisar la passarel·la de pagament i SES |
| 5 setmanes abans | Muntar RDS Proxy o agrupació de connexions; afegir una segona rèplica |
| 4 setmanes abans | Prova de càrrega real amb 5× el trànsit. Verificar que escala a 12 |
| 3 setmanes abans | Ajustar l'ASG: màxim 12, política d'escalat més agressiva, warm pool |
| 2 setmanes abans | Desplegament blau/verd de la campanya. Comprovar que la quota ho aguanta |
| 1 setmana abans | Congelació de canvis. Només correccions crítiques |
| El dia | Tauler mercadofresco-produccion a la pantalla; guàrdia amb dues persones |
| Després | Post-mortem amb dades, i abaixar les quotes no cal: no costen res |
La prova de càrrega de la quarta fila és el que converteix tot l'anterior en un pla i no en una esperança. Si no ho has provat, no saps si escala.
Solució 3
Troballes, amb prioritat i relacions.
| # | Troballa | Prioritat | Significat probable | Acció | Lliçó |
|---|---|---|---|---|---|
| 1 | TA: SG amb port sense restringir | Crítica | Algú va obrir un port | Identificar amb CloudTrail i tancar | 03-02, 05-03 |
| 2 | Config: 3 regles no conformes (n'eren 0) | Crítica | Alguna cosa va canviar al setembre | Veure quines regles i des de quan | 05-04 |
| 3 | Falta un fitxer de resum de CloudTrail | CRÍTICA MÀXIMA | Possible manipulació de l'auditoria | Investigació formal immediata | 05-03 |
| 4 | 2.400 AccessDenied del rol de la botiga |
Alta | Falta un permís: hi ha alguna cosa trencada | Revisar pol-mercadofresco-tienda |
04-01, 05-03 |
| 5 | CloudWatch de 44 a 71 USD | Mitjana | Més ingesta de registres | Veure quin grup va créixer | 05-01 |
| 6 | Volum EBS de 200 GiB orfe | Mitjana | Instància acabada el 22/9 | Comprovar contingut i esborrar | 02-02 |
| 7 | ASG under-provisioned | Alta | Les instàncies es queden curtes | Revisar tipus i política d'escalat | 02-01, 05-05 |
| 8 | Quota de vCPU al 75 % | Alta | A prop del sostre | Sol·licitar augment ja | 05-05 |
| 9 | El canari falla 14 vegades, 03:00-03:20 | Mitjana | Finestra de manteniment | Veure què passa a aquella hora | 05-01 |
| 10 | 21 de 23 alarmes van ser falsos positius | Alta | L'alarma està mal calibrada | Ajustar llindar o redissenyar-la | 05-01 |
| 11 | Subscripció en PendingConfirmation |
Alta | La persona nova no rep avisos | Reenviar i fer simulacre | 05-01 |
La troballa 3 és la més greu de totes i cal dir per què. Un fitxer de resum absent significa que la cadena d'integritat de CloudTrail està trencada el 14 de setembre. Pot ser un problema de lliurament d'AWS —passa, rarament— o pot significar que algú va esborrar fitxers de registre per amagar activitat. No es pot distingir sense investigar, i fins que no es descarti cal tractar-ho com un possible incident de seguretat:
# 1. Verificar l'abast exacte del que falta
aws cloudtrail validate-logs \
--trail-arn arn:aws:cloudtrail:eu-west-1:111122223333:trail/trail-mercadofresco \
--start-time 2026-09-13T00:00:00Z --end-time 2026-09-16T00:00:00Z \
--verbose --profile mercadofresco-dev --region eu-west-1
# 2. Veure si hi ha versions esborrades al bucket (el versionatge esta actiu)
aws s3api list-object-versions \
--bucket mercadofresco-auditoria-cloudtrail \
--prefix AWSLogs/111122223333/CloudTrail/eu-west-1/2026/09/14/ \
--query 'DeleteMarkers[].[Key,LastModified,Owner.DisplayName]' \
--profile mercadofresco-dev
# 3. Buscar qui va tocar el bucket o el trail aquell diaSELECT eventtime, eventname,
COALESCE(userIdentity.sessionContext.sessionIssuer.userName,
userIdentity.userName) AS identitat,
sourceipaddress, errorcode
FROM auditoria_mercadofresco.cloudtrail_mercadofresco
WHERE anio='2026' AND mes='09' AND dia IN ('13','14','15')
AND (eventname IN ('StopLogging','UpdateTrail','DeleteTrail','PutEventSelectors')
OR json_extract_scalar(requestParameters,'$.bucketName')
= 'mercadofresco-auditoria-cloudtrail')
ORDER BY eventtime;Si l'Object Lock en mode COMPLIANCE de 05-04 estava actiu, ningú no va poder esborrar res i
l'explicació és un problema de lliurament d'AWS: s'obre un cas de suport i es documenta. Si no ho
estava, cal investigar de debò. Aquesta és la millor demostració pràctica de per què l'Object Lock
importava.
Relacions entre troballes, que és la part que distingeix una revisió útil:
Grup A: troballes 1, 2 i 3 — probablement el mateix incident.
Tres regles de Config que van passar de conformes a no conformes, un port obert, i un forat a l'auditoria. És massa coincidència. La línia temporal de Config dirà exactament quan es van tornar no conformes les regles, i si aquesta data és el 14 de setembre, ja no és una coincidència: és un incident que cal reconstruir sencer.
aws configservice get-resource-config-history \
--resource-type AWS::EC2::SecurityGroup \
--resource-id <id-del-sg> \
--earlier-time 2026-09-10T00:00:00Z \
--later-time 2026-09-20T00:00:00Z \
--profile mercadofresco-dev --region eu-west-1Grup B: troballes 4 i 5 — el mateix desplegament.
2.400 AccessDenied sobre s3:GetObject signifiquen que hi ha una funcionalitat trencada que cap
client no ha reportat. I cada fallada genera una línia d'error al registre, cosa que explica en
bona part l'augment de CloudWatch de 44 a 71 USD. Un problema de permisos s'ha manifestat com un
problema de cost. Arreglar el permís arregla les dues coses.
Grup C: troballes 7 i 8 — el mateix problema de capacitat.
Compute Optimizer diu que les instàncies es queden curtes, i la quota de vCPU és al 75 %. Són les dues cares del mateix: MercadoFresco ha crescut i la capacitat no ha seguit. I hi ha un parany: si es resol la 7 escalant a més instàncies, s'agreuja la 8. La seqüència correcta és primer sol·licitar l'augment de quota, després escalar. A l'inrevés, l'ASG intentarà llançar i fallarà.
Grup D: troballes 9 i 6 — la finestra de manteniment.
El canari falla entre les 03:00 i les 03:20. Què passa a aquella hora? La finestra de manteniment d'RDS i la de còpies automàtiques (02-04). Durant una commutació Multi-AZ hi ha uns segons d'indisponibilitat, i el canari ho detecta. I això és una bona notícia disfressada de problema: el canari funciona i està mesurant un impacte real que els clients també pateixen, encara que de matinada afecti poca gent. Accions: comprovar si l'aplicació reintenta correctament les connexions perdudes (patró de 07-05), i valorar moure la finestra a una hora amb encara menys trànsit.
El volum orfe del 22 de setembre probablement vingui d'una instància acabada en aquell mateix treball de manteniment.
Grup E: troballes 10 i 11 — la salut del sistema d'avisos, i són les més urgents del que sembla poc urgent.
- 21 falsos positius de 23 signifiquen que
mercadofresco-pedidos-fallidosja no la mira ningú. El seu llindar fix de 10 errors en 5 minuts no aguanta el creixement del trànsit: amb més comandes hi ha més errors absoluts encara que la proporció sigui la mateixa. La correcció és la de la solució 1 de 05-01: alarmar sobre el percentatge, no sobre el número absolut, amb una expressió de mètrica. - La subscripció pendent significa que la persona nova no ha rebut ni un sol avís des que va
entrar. Si estava de guàrdia alguna nit, no hi havia ningú de guàrdia. Es reenvia la confirmació i
es fa un simulacre amb
set-alarm-statecontra el seu telèfon, que és exactament el protocol d'incorporació de 05-01.
Ordre d'actuació recomanat:
| Ordre | Acció | Per què primer |
|---|---|---|
| 1 | Investigar el resum de CloudTrail absent | Possible incident de seguretat en curs |
| 2 | Tancar el port obert | Exposició activa |
| 3 | Confirmar la subscripció i fer el simulacre | Sense avisos no hi ha res de la resta |
| 4 | Sol·licitar l'augment de quota de vCPU | Triga dies; començar ja |
| 5 | Arreglar el permís d'S3 | Funcionalitat trencada + cost |
| 6 | Recalibrar mercadofresco-pedidos-fallidos |
Una alarma ignorada és pitjor que cap |
| 7 | Escalar la capacitat (quan la quota estigui aprovada) | Depèn del 4 |
| 8 | Investigar les fallades del canari | Impacte real però acotat |
| 9 | Esborrar el volum orfe | Cost, sense urgència |
| 10 | Revisar el creixement de CloudWatch | Es resol en part amb el 5 |
| 11 | Documentar les regles de Config no conformes que s'acceptin | Tancament |
La lliçó de l'exercici: onze troballes aïllades semblen una llista de tasques. Agrupades en cinc grups relacionats, són cinc problemes reals: un possible incident de seguretat, un desplegament amb permisos incomplets, un problema de capacitat amb un parany d'ordre, una finestra de manteniment amb impacte mesurable, i un sistema d'avisos que s'ha degradat en silenci. Aquesta diferència és exactament el que aporta que la revisió la faci una persona amb context i no un informe automàtic.
Conclusió
MercadoFresco té l'última peça. Saps què és Trusted Advisor i en què es diferencia de tot l'anterior: Config comprova les teves regles, Trusted Advisor comprova les d'AWS; Config respon preguntes, Trusted Advisor les fa. I saps que el cicle bo és encadenar-los: Trusted Advisor descobreix el que no havies previst, escrius una regla de Config perquè no torni, i la remediació ho corregeix sola. Enfront de Well-Architected (11-01), la distinció és d'altura: Trusted Advisor mira cap avall, als recursos; Well-Architected mira cap amunt, a les decisions.
Coneixes les cinc categories —optimització de costos, rendiment, seguretat, tolerància a errors i límits de servei— i què comprova cadascuna, amb els tres estats i l'advertiment que un groc és una hipòtesi, no una ordre: els volums arrel de les instàncies de l'ASG no necessiten instantànies, i acceptar formalment aquesta troballa amb la seva justificació és la resposta correcta.
Tens la taula honesta del que veu MercadoFresco amb el pla Basic: seguretat bàsica i límits
de servei, que no és poc, i res de cost, rendiment, tolerància a errors ni API. I saps suplir el
que falta amb el que ja has après: els volums orfes amb una consulta avançada de Config, les IP
elàstiques amb describe-addresses, els balancejadors inactius amb RequestCount, les instàncies
infrautilitzades amb Compute Optimizer, el Multi-AZ amb una regla de Config. Gairebé tot el que
donaria el pla Business, gratis. El que no es pot reproduir és el suport tècnic amb SLA, i
aquesta és la raó real per la qual es contracta.
Has recorregut un informe complet de l'arquitectura de MercadoFresco i has trobat el que feia
mesos que hi era: 3 volums EBS orfes de les proves de 02-01, 2 IP elàstiques sense associar
que es facturen precisament per no fer-se servir i que a més consumien 2 de les 5 places de la
quota, mercadofresco-tienda-01 al 4 % de CPU des que vam muntar l'ASG i que ningú no va
apagar, el mateix port 22 obert que ja havia assenyalat Config —dues eines independents
confirmant-se—, i la troballa de compressió de CloudFront que s'arregla amb una casella.
I has descobert la quota que ningú no havia mirat: asg-mercadofresco-tienda no pot passar de
quatre instàncies perquè la quota de vCPU del compte és 16 i altres càrregues en consumeixen 8. El
màxim de l'ASG no era una decisió de disseny: era un límit invisible. Una fallada latent perfecta,
que es manifestaria exactament en el pitjor moment —el divendres en què calgués escalar— i que no
apareixeria en cap alarma de CloudWatch, cap regla de Config ni cap traça d'X-Ray. Saps gestionar
Service Quotas: veure l'ús, sol·licitar augments amb antelació perquè els grans triguen dies,
recordar que són per regió, comptar el desplegament blau/verd que duplica les instàncies, i
sobretot alarmar al 70 % amb SERVICE_QUOTA(), la funció que fa que l'alarma es recalibri sola
quan la quota canviï. Dues alarmes, 0,20 USD al mes, per no quedar-te sense escalar un divendres.
Coneixes l'API de Trusted Advisor (Business, i només a us-east-1, el mateix patró d'ACM i les
Web ACL de CloudFront), l'exportació de recomanacions a CSV, les notificacions setmanals als contactes
alternatius de 01-02, i la integració amb EventBridge (07-03) que permet no només notificar sinó
actuar —desactivar automàticament una clau d'accés que ha aparegut en un repositori públic—. I
saps on encaixen Compute Optimizer i Cost Optimization Hub, amb l'advertiment que resumeix la
relació entre eines i persones: Compute Optimizer recomana reduir mercadofresco-tienda-01 a
t3.small; la resposta correcta és apagar-la. Les eines optimitzen el que hi ha; la pregunta de
si hi ha de ser la fa una persona.
I tens la rutina mensual de la Marta: una hora, el primer dilluns, amb la seva llista de comprovació de seguretat, cost, fiabilitat, observabilitat i deute tècnic. Amb el punt que més se salta i més importa: revisar les alarmes que van donar falsos positius i esborrar-les o recalibrar-les, perquè una alarma que s'ignora és pitjor que no tenir alarma.
Amb això es tanca el mòdul 5. La capa d'observabilitat de MercadoFresco està completa:
mètriques i taulers amb mercadofresco-produccion, MercadoFresco/Tienda i tretze alarmes
verificades amb simulacre; traces d'extrem a extrem amb mostreig al 100 % a les comandes i al
0 % a la comprovació d'estat; auditoria inalterable a trail-mercadofresco amb set anys de
retenció i consultes SQL sobre cada crida a l'API; compliment continu amb 29 regles de Config i
remediació automàtica que restaura el xifratge d'un bucket en vuit minuts; i el repàs automàtic
que troba el que a ningú se li va acudir preguntar. Les cinc preguntes del mòdul 4 tenen resposta
—l'avís arriba, els registres es correlacionen, la comanda de vuit segons era un N+1, la còpia la va
desxifrar el Luis provant una restauració de matinada, i el xifratge es restaura sol— i per 62,47
USD al mes, el 9,9 % de la factura, amb cinc línies de configuració separant-la de més de 600.
I ara, amb la casa per fi vigilada, la vigilància comença a ensenyar una cosa incòmoda. El tauler de la Marta ho porta dient des que el vam muntar, i les dades d'aquest mòdul ho confirmen des de tres angles diferents: el següent coll d'ampolla és la base de dades.
mercadofresco-pedidos és una única instància de PostgreSQL que ho fa tot, i ho fa malament per
raons diferents en cada cas. La cistella castiga una taula de sessions amb escriptures constants
de dades que no tenen cap necessitat de ser transaccionals ni de viure per sempre. Els informes de
la Sara, amb les seves agregacions sobre mesos d'història, bloquegen la producció quan els executa
en hores de feina —i la rèplica de lectura només desplaça el problema, no el resol—. El catàleg
es consulta milers de vegades per minut per retornar sempre el mateix: preus i descripcions que
canvien un cop al dia. I el mateix X-Ray va ensenyar que fins i tot després de corregir l'N+1, la
latència de la botiga continua dominada per consultes a la base de dades.
Tot això és en una sola instància perquè, quan vam començar a 02-04, PostgreSQL era la resposta òbvia. I ho era. Però una base de dades relacional no és l'eina correcta per a tots els treballs, i forçar-la a ser-ho és la causa més comuna d'arquitectures que no escalen.
Al mòdul 6, «Bases de dades», començant per 06-01, «Com triar la base de dades adequada», veurem el model de decisió: relacional enfront de clau-valor, documental, en memòria, de sèries temporals i de grafs, amb els criteris reals —patró d'accés, consistència, latència, volum i cost— per triar cadascuna. Després DynamoDB per a la taula de sessions i la cistella, Aurora com l'evolució natural de PostgreSQL quan cal més, Redshift perquè els informes de la Sara deixin de tocar producció, i ElastiCache perquè el catàleg se serveixi des de memòria en microsegons. I tot plegat amb l'avantatge que, per primera vegada al curs, cada canvi que fem es podrà mesurar: tenim les mètriques, les traces i els taulers per demostrar si una decisió d'arquitectura va ser bona o no.
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
