Amb les etiquetes activades i l'informe de costos i ús lliurant-se cada dia a mercadofresco-informes-analitica, MercadoFresco ja pot repartir la seva factura. Falta l'altra meitat: mirar-la de debò. No el total, no una taula resumida, sinó el desglossament complet per servei, entrar a les tres o quatre línies que gairebé ningú no entén, i sortir-ne amb una llista d'accions concretes i el seu estalvi calculat.
Aquesta lliçó fa aquest recorregut. Veuràs què és el Cost Explorer i amb quines dades treballa, els conceptes de facturació que cal entendre abans de mirar un gràfic —perquè, si no, els números no quadren i es perd la confiança en l'eina—, la factura real de MercadoFresco servei per servei fins als 2.237,60 USD, les tres sorpreses que apareixen gairebé sempre, la detecció d'anomalies de cost, les recomanacions automàtiques i la seva relació amb Compute Optimizer i Trusted Advisor, la consulta des de boto3 per publicar la despesa al costat del negoci, i les deu optimitzacions que MercadoFresco executa amb el seu estalvi una per una.
Avís de cost. La interfície del Cost Explorer és gratuïta. El que sí que costa és l'API: cada crida paginada a
GetCostAndUsagei companyia es factura a 0,01 USD. Un tauler que consulti l'API cada cinc minuts són uns 90 USD al mes, un error car i sorprenentment freqüent. La detecció d'anomalies és gratuïta. Dades, comptes i identificadors ficticis; els preus són orientatius i varien segons la regió i la data.
Contingut
- Què és el Cost Explorer i amb quines dades treballa
- Conceptes de facturació: no combinat, amortitzat i net
- Càrrecs, crèdits, reemborsaments i impostos: per què la suma no quadra
- Facturació consolidada entre els sis comptes
- La factura de MercadoFresco, servei per servei
- Sorpresa 1: els NAT Gateway
- Sorpresa 2: la transferència de dades entre zones
- Sorpresa 3: CloudWatch
- Filtres, agrupacions i informes desats
- El tauler de cost que revisa la Marta cada mes
- Detecció d'anomalies de cost
- El cas de la càrrega nocturna a Redshift
- Recomanacions de reducció i recursos orfes
- Compute Optimizer i Trusted Advisor
- Previsió de despesa i com interpretar-la
- Consultar el Cost Explorer des de boto3
- Publicar la despesa diària com a mètrica de negoci
- Les deu optimitzacions de MercadoFresco
- Errors habituals i consells
- Exercicis
- Conclusió
Què és el Cost Explorer i amb quines dades treballa
L'AWS Cost Explorer és l'eina d'anàlisi interactiva de la factura: gràfics, filtres, agrupacions i previsions sobre la despesa i l'ús. S'activa una sola vegada des del compte de gestió i, a partir d'aquell moment, comença a preparar les dades.
El que cal saber abans de fiar-se d'un número:
| Característica | Detall | Conseqüència pràctica |
|---|---|---|
| Històric | 13 mesos enrere per defecte, ampliable a 38 | Permet comparar amb el mateix mes de l'any anterior |
| Granularitat mensual i diària | Disponible en tot l'històric | Suficient per al 90 % de l'anàlisi |
| Granularitat horària | Opcional, de pagament (uns 0,01 USD per cada 1.000 registres consultats), amb 14 dies de retenció | Imprescindible per al pic del divendres i per a 11-05 |
| Retard d'actualització | Fins a 24 hores, de vegades 48 al tancament del mes | La despesa d'avui no està completa; comparar dies parcials indueix a error |
| Previsió | Fins a 12 mesos endavant | Útil amb matisos; ho veurem més avall |
| Dades a nivell de recurs | Opcional, 14 dies | Quan cal més detall, s'ha d'anar al CUR (11-02) |
| Cost de la interfície | Gratuïta | L'API sí que costa: 0,01 USD per petició |
La primera regla operativa que evita disgustos: no treguis mai conclusions del dia en curs. Amb el retard d'actualització, la despesa d'avui sempre sembla menor del que serà, i més d'un equip ha celebrat un estalvi que era simplement una dada incompleta.
Conceptes de facturació: no combinat, amortitzat i net
Abans de mirar un gràfic cal entendre què s'està mesurant, perquè el Cost Explorer ofereix diverses mètriques de cost i donen resultats diferents per al mateix mes. És la causa número u de desconfiança en l'eina.
| Mètrica | Què mesura | Quan fer-la servir |
|---|---|---|
| Cost no combinat (unblended) | El cost tal com es factura, quan es factura | Quadrar amb la factura del mes; el valor per defecte |
| Cost amortitzat (amortized) | Reparteix els pagaments per avançat de reserves i Savings Plans al llarg del període que cobreixen | Analitzar el cost real d'operar; imprescindible amb compromisos |
| Cost net no combinat (net unblended) | Igual que el no combinat, però descomptant descomptes i crèdits | Veure el que realment es paga |
| Cost net amortitzat (net amortized) | Amortitzat i amb descomptes aplicats | La mètrica més fidel per al seguiment a llarg termini |
| Cost combinat (blended) | Mitjana de tarifes entre comptes de l'organització | Gairebé mai; existeix per raons històriques |
La diferència es veu millor amb un exemple que MercadoFresco viurà a 11-05. Suposem un Savings Plan d'1 any amb pagament total per avançat de 1.200 USD contractat l'1 de març:
| Mes | Cost no combinat | Cost amortitzat |
|---|---|---|
| Març | 1.200 USD (tot el pagament) | 100 USD |
| Abril | 0 USD | 100 USD |
| Maig | 0 USD | 100 USD |
| … | … | … |
Amb el cost no combinat, el gràfic mostra un pic enorme al març i una caiguda a zero després, cosa que és certa per a la tresoreria i absolutament inútil per analitzar l'eficiència. Amb l'amortitzat, cada mes carrega els 100 USD que li corresponen i el gràfic reflecteix el cost real d'operar.
La recomanació pràctica: fes servir el no combinat per quadrar amb la factura i el net amortitzat per analitzar. I digues sempre quin fas servir quan presentis un número, perquè dues persones mirant la mateixa pantalla amb mètriques diferents discutiran durant mitja hora sense adonar-se que totes dues tenen raó.
MercadoFresco, que encara no té cap compromís comprat, veu exactament el mateix número a les quatre mètriques. Això canvia a 11-05, i convé saber-ho per endavant.
Càrrecs, crèdits, reemborsaments i impostos: per què la suma no quadra
La segona font de desconfiança és que la suma del Cost Explorer no coincideix amb l'import cobrat a la targeta. No és cap error: és que la factura conté tipus de línia que el Cost Explorer, per defecte, filtra o mostra per separat.
| Tipus de línia | Què és | Apareix per defecte? |
|---|---|---|
| Usage | Consum real d'un servei | Sí |
| Tax | Impostos (l'IVA, en el cas espanyol) | No, s'exclou per defecte |
| Credit | Crèdits promocionals, de programes o de compensació | Es pot incloure o excloure |
| Refund | Devolucions per errors o ajustos | Es pot incloure o excloure |
| RIFee / SavingsPlanUpfrontFee | Quota d'una reserva o d'un Savings Plan | Sí, amb matisos segons la mètrica |
| Support | Quota del pla de suport | Sí |
| Enterprise Discount | Descompte negociat | Només a les mètriques «netes» |
La factura de MercadoFresco d'agost, completa:
Cost de serveis (Usage) ......................... 2.237,60 USD Crèdits aplicats ................................ - 45,00 USD (crèdits d'activació) Suport (pla Basic) .............................. 0,00 USD Subtotal ........................................ 2.192,60 USD Impostos (IVA 21 %) ............................. + 460,45 USD ------------------------------------------------------------ Total cobrat .................................... 2.653,05 USD
D'aquí surten dues regles que convé fixar a l'equip:
- El número de treball és el cost de serveis: 2.237,60 USD. És el que es pot reduir amb decisions d'enginyeria. Els impostos no s'optimitzen, es paguen.
- Els crèdits enganyen. Mentre durin, la despesa sembla menor del que és, i el dia que s'esgoten apareix un salt que ningú no ha provocat. MercadoFresco els exclou de l'anàlisi i els tracta pel que són: un descompte temporal.
Facturació consolidada entre els sis comptes
L'organització o-a1b2c3d4e5 té la facturació consolidada activada, que és el comportament per defecte d'AWS Organizations (09-04). Implica tres coses que afecten directament aquesta anàlisi:
- Una sola factura i un sol mètode de pagament, emesos des del compte de gestió
999988887777. Els comptes membre no reben factura pròpia. - Agregació d'ús per als trams per volum. Els 40 GB d'S3 de producció, els 12 de preproducció i els 8 de desenvolupament compten com a 60 GB a efectes de trams de preu. Amb volums petits l'estalvi és simbòlic, però amb transferència de dades o S3 a gran escala arriba a ser rellevant.
- Els compromisos es comparteixen. Un Savings Plan comprat en qualsevol compte cobreix l'ús de tots els altres, tret que se'n desactivi la compartició. És un punt central d'11-05.
Al Cost Explorer, el compte de gestió ho veu tot; un compte membre només es veu a si mateix, i únicament si l'accés està habilitat. La Marta treballa sempre des del compte de gestió amb el rol de només lectura de facturació, i el Luis i la Sara veuen el seu propi compte.
La factura de MercadoFresco, servei per servei
Aquest és el desglossament complet del mes d'agost, agrupat per servei, amb cost no combinat i els sis comptes consolidats:
| # | Servei | USD/mes | % | Què és exactament |
|---|---|---|---|---|
| 1 | Amazon Aurora (RDS) | 342,60 | 15,3 % | aurora-mercadofresco-pedidos: escriptor + 2 lectors, emmagatzematge, E/S, còpies; més preproducció i desenvolupament |
| 2 | Amazon ECS – Fargate | 262,40 | 11,7 % | svc-mercadofresco-tienda-fg arm64 i -trabajadores amb Spot, en 3 entorns |
| 3 | NAT Gateway | 243,80 | 10,9 % | 6 NAT (2 per entorn): càrrec per hora + dades processades |
| 4 | Amazon CloudWatch | 214,90 | 9,6 % | Registres, mètriques personalitzades, Container Insights, taulers, alarmes, canari |
| 5 | Amazon ElastiCache | 135,40 | 6,1 % | mercadofresco-catalogo: primari + rèplica, més un node petit a preproducció |
| 6 | Amazon S3 | 128,90 | 5,8 % | 5 buckets: fotos, informes, registres web, còpies, artefactes |
| 7 | VPC: punts d'enllaç i transferència entre AZ | 118,60 | 5,3 % | 4 punts d'enllaç d'interfície × 2 AZ + trànsit creuat entre zones |
| 8 | Amazon Redshift Serverless | 104,50 | 4,7 % | wg-mercadofresco-analitica: RPU-hora i emmagatzematge gestionat |
| 9 | Elastic Load Balancing | 104,20 | 4,7 % | alb-mercadofresco-tienda en 3 entorns: càrrec fix + unitats de capacitat |
| 10 | AWS Config | 74,60 | 3,3 % | grabador-mercadofresco en 6 comptes + 29 regles |
| 11 | Amazon CloudFront | 62,80 | 2,8 % | Distribució E2QWERTY123ABC: transferència per damunt del tram gratuït |
| 12 | Amazon DynamoDB | 58,40 | 2,6 % | mercadofresco-carritos i -idempotencia: sota demanda + PITR |
| 13 | AWS Backup i instantànies | 46,80 | 2,1 % | Còpies d'Aurora, EBS i DynamoDB, amb còpia entre regions |
| 14 | AWS Lambda | 41,20 | 1,8 % | Les 6 funcions del curs: GB-segon i invocacions |
| 15 | Amazon GuardDuty | 38,60 | 1,7 % | Anàlisi d'esdeveniments als 6 comptes |
| 16 | AWS KMS | 34,60 | 1,5 % | alias/mercadofresco-datos i peticions de xifratge |
| 17 | Amazon EC2 i EBS (residual) | 33,90 | 1,5 % | Un bastió oblidat, 3 volums solts, 2 IP elàstiques |
| 18 | AWS WAF | 31,20 | 1,4 % | waf-mercadofresco-cdn i -alb: Web ACL, regles i peticions |
| 19 | Missatgeria (SQS, SNS, EventBridge, Step Functions) | 27,50 | 1,2 % | Les cues, el tema, el bus i la màquina d'estats |
| 20 | Eines de desenvolupament (CodeBuild, Pipeline, Deploy, ECR) | 26,40 | 1,2 % | Minuts de compilació, pipelines actius i 42 GB d'imatges |
| 21 | Transferència de dades a internet (fora de CloudFront) | 24,80 | 1,1 % | Sortides directes des de l'ALB i des de les tasques |
| 22 | Amazon Inspector | 21,40 | 1,0 % | Escaneig continu d'imatges d'ECR |
| 23 | AWS CloudTrail | 18,70 | 0,8 % | trail-mercadofresco, esdeveniments de dades acotats i Insights |
| 24 | Amazon Route 53 | 12,40 | 0,6 % | Zona allotjada, consultes i comprovacions de salut |
| 25 | AWS X-Ray | 10,60 | 0,5 % | Traces amb mostreig optimitzat |
| 26 | Altres (Athena, Chatbot, Systems Manager, API del Cost Explorer) | 9,80 | 0,4 % | Serveis d'import menor |
| 27 | Secrets Manager i Parameter Store | 8,60 | 0,4 % | 2 secrets amb rotació i paràmetres avançats |
| Total | 2.237,60 | 100 % |
El primer que cal fer amb una taula així és llegir-la al revés de com la mira tothom. La reacció típica és fixar-se en Aurora, que és la línia més gran, i començar a discutir si calen dos lectors. Però Aurora hi és per una decisió conscient, documentada i signada per gerència (l'ADR-014 d'11-01). El que és interessant són les línies que ningú no va decidir: el NAT, la transferència entre zones, CloudWatch i l'EC2 residual. Sumen 611,20 USD al mes, un 27,3 % de la factura, i cap d'elles no ha estat mai objecte d'una decisió explícita.
Sorpresa 1: els NAT Gateway
243,80 USD al mes, la tercera línia de la factura, per un component que ningú no recorda haver triat. És la troballa més repetida en totes les revisions de cost del sector.
El NAT Gateway es factura per dos conceptes:
| Concepte | Preu aproximat a eu-west-1 |
Comentari |
|---|---|---|
| Càrrec per hora | ~0,045 USD/h ≈ 33 USD al mes per NAT | Es paga encara que no hi passi ni un sol byte |
| Dades processades | ~0,045 USD/GB | Es paga per les dades en tots dos sentits |
El desglossament de MercadoFresco:
| Entorn | NAT | Càrrec fix | Dades processades | Total |
|---|---|---|---|---|
| Producció | 2 (un per AZ) | 66,00 USD | 34,00 USD (756 GB) | 100,00 USD |
| Preproducció | 2 | 66,00 USD | 8,00 USD (178 GB) | 74,00 USD |
| Desenvolupament | 2 | 66,00 USD | 3,80 USD (85 GB) | 69,80 USD |
| Total | 6 | 198,00 USD | 45,80 USD | 243,80 USD |
Dues observacions que canvien la conversa:
- El 81 % del cost és el càrrec fix per hora, no el trànsit. Optimitzar el trànsit no arregla el problema; reduir el nombre de NAT sí.
- Preproducció i desenvolupament paguen 143,80 USD al mes per sortir a internet, en entorns on no hi ha ni un sol client i on una hora sense sortida a internet no li importa a ningú. Dos NAT en desenvolupament són alta disponibilitat per a un entorn que ningú no considera crític.
I hi ha una tercera observació que connecta amb 10-02: bona part dels 756 GB de producció són descàrregues d'imatges d'ECR, crides a l'API d'S3 i enviament de registres a CloudWatch, és a dir, trànsit cap a serveis d'AWS que podria no passar pel NAT si hi hagués punts d'enllaç. MercadoFresco ja va posar quatre punts d'enllaç del camí crític; l'anàlisi pendent és si compensa posar-ne més, i la resposta —com es va veure a 10-02— és que set punts d'enllaç en dues AZ surten més cars que el NAT.
Sorpresa 2: la transferència de dades entre zones
Dins dels 118,60 USD de la línia de VPC hi ha dues coses molt diferents:
| Concepte | Cost | Naturalesa |
|---|---|---|
| 4 punts d'enllaç d'interfície × 2 AZ | 64,20 USD | Càrrec fix per hora i per AZ |
| Transferència de dades entre AZ | 54,40 USD | ~0,01 USD/GB en cada sentit |
La transferència entre zones és el cost més invisible d'AWS, perquè no té cap recurs a qui culpar: no apareix sota cap etiqueta, no hi ha cap tauler que la mostri i no es pot apagar. Apareix tota sola tan bon punt una arquitectura és Multi-AZ, que és justament el que es recomana per fiabilitat.
D'on surten aquests 54,40 USD a MercadoFresco:
- L'ALB reparteix entre dues AZ. Amb
cross-zone load balancingactivat —que en un ALB està sempre actiu i és gratuït per a l'ALB, però no per a l'NLB— una petició que arriba a l'AZapot acabar en una tasca de l'AZb. - Aurora replica de l'escriptor als dos lectors, i un d'ells és a l'altra zona. Cada byte escrit creua la zona.
- ElastiCache replica del primari a la rèplica, que és a l'altra AZ.
- Les tasques de Fargate llegeixen de l'escriptor d'Aurora, que és en una zona concreta; la meitat de les tasques creuen.
I aquí ve el més important: gairebé tot aquest cost és el preu de l'alta disponibilitat, i no s'ha d'eliminar. Aquest és el cas exemplar del compromís entre pilars d'11-01: es podria estalviar concentrant-ho tot en una zona, i es perdria exactament la propietat per la qual es va muntar Multi-AZ. El que sí que té sentit és reduir el creuament innecessari: dirigir les lectures al lector de la mateixa zona quan es pugui, i no moure volums grans de dades entre zones per costum.
L'acció correcta amb aquesta línia no és retallar-la, sinó saber que existeix, entendre-la i no descobrir-la el dia que la factura pugi un 40 % per un canvi de topologia.
Sorpresa 3: CloudWatch
214,90 USD, quarta línia de la factura. És la sorpresa que més incomoda, perquè l'observabilitat és una virtut i aquí apareix com una despesa considerable. El desglossament:
| Concepte de CloudWatch | Cost | Origen |
|---|---|---|
| Ingesta de registres | 118,40 USD | ~61 GB/mes a ~0,50 USD/GB (Logs Standard) |
| Emmagatzematge de registres | 34,60 USD | ~1,1 TB acumulats: la retenció no es va configurar mai |
| Mètriques personalitzades | 27,00 USD | 90 mètriques × 0,30 USD |
| Container Insights | 18,60 USD | Mètriques per tasca i contenidor |
| Alarmes | 8,40 USD | 84 alarmes × 0,10 USD |
| Taulers | 6,00 USD | 2 taulers per damunt dels 3 gratuïts, més versions antigues |
| Canari de Synthetics | 1,90 USD | Comprovació cada 5 minuts |
Les dues línies que dominen són ingesta i emmagatzematge de registres, i totes dues tenen la mateixa arrel: ningú no va decidir mai quant retenir ni què registrar. Concretant:
- Les aplicacions registren en nivell
DEBUGa preproducció i a producció, perquè es va activar per depurar un incident a l'abril i no es va tornar a abaixar. - Els registres d'accés de l'ALB i els del WAF van a CloudWatch Logs a més de a S3, i dupliquen el cost.
- Cap grup de registres no té
retentionInDaysconfigurat, cosa que significa retenció indefinida. Un grup creat fa un any continua guardant-ho tot.
Aquesta és la partida amb millor relació entre esforç i estalvi de tota la factura, i apareix a la llista d'optimitzacions de més avall.
Filtres, agrupacions i informes desats
La utilitat del Cost Explorer és creuar dimensions. Les agrupacions disponibles i per a què serveix cadascuna:
| Agrupar per | Respon a | Ús típic a MercadoFresco |
|---|---|---|
| Servei | En què gastem? | La taula anterior; el punt de partida |
| Compte vinculat | Quin entorn gasta? | Producció 66 %, preproducció 18 %, desenvolupament 11 % |
| Regió | On gastem? | Detectar recursos oblidats en altres regions |
| Tipus d'ús (usage type) | Què en concret dins del servei? | Separar NatGateway-Hours de NatGateway-Bytes |
| Tipus de càrrec (charge type) | Ús, impost, crèdit o quota? | Quadrar amb la factura |
| Etiqueta | Quin component o qui? | Componente, Propietario, Entorno (11-02) |
| Categoria de cost | Quina àrea de negoci? | producto, plataforma, analitica |
| Família d'instància / plataforma | Quin maquinari? | Veure quant queda en x86 enfront d'arm64 |
El tipus d'ús és la dimensió més infravalorada i la que resol més misteris. «Amazon Virtual Private Cloud: 362,40 USD» no diu res; agrupat per tipus d'ús apareixen EUW1-NatGateway-Hours: 198,00, EUW1-NatGateway-Bytes: 45,80, EUW1-VpcEndpoint-Hours: 64,20 i EUW1-DataTransfer-Regional-Bytes: 54,40, i de cop se sap exactament què cal fer.
Els informes desats són consultes amb els seus filtres i agrupacions, amb nom i compartides al compte de gestió. Els cinc de MercadoFresco:
| Informe desat | Configuració | Per a què |
|---|---|---|
mf-mensual-por-servicio |
Mensual, agrupat per servei, 13 mesos | La foto general i la seva tendència |
mf-por-entorno |
Mensual, agrupat per compte vinculat | Quant s'emporta el que no és productiu |
mf-por-componente |
Mensual, agrupat per etiqueta Componente |
La conversa amb cada propietari |
mf-red |
Mensual, filtrat a VPC + ELB + CloudFront, agrupat per tipus d'ús | Vigilar NAT i transferència |
mf-no-productivo-diario |
Diari, filtrat als comptes 2222… i 3333… |
Detectar el que es queda encès |
L'últim és el més útil dels cinc: en una vista diària de desenvolupament, un recurs encès un dissabte es veu a primera ullada.
El tauler de cost que revisa la Marta cada mes
La Marta bloqueja 45 minuts el dia 5 de cada mes —quan les dades del mes anterior ja estan tancades— i segueix sempre el mateix guió. La disciplina de mirar sempre el mateix, en el mateix ordre, és el que converteix el soroll en tendència:
- Total del mes enfront de l'anterior i enfront del mateix mes de l'any passat. Si la variació supera el ±10 %, s'explica abans de continuar.
- Cost per comanda. És el primer número que es diu en veu alta, abans que el total (11-02).
- Les cinc línies que més han pujat en valor absolut, no en percentatge. Un servei que passa de 0,40 a 1,20 USD ha pujat un 200 % i no importa.
- Repartiment per entorn. Objectiu declarat: que el que no és productiu no superi el 25 % del total.
- Cost sense etiquetar. Ha de tendir a zero; si puja, hi ha recursos nous creats fora del pipeline.
- Anomalies detectades des de l'última revisió i què se n'ha fet, de cadascuna.
- Previsió del mes en curs i comparació amb el pressupost (11-04).
- Una acció concreta amb propietari i data. Només una. Una reunió mensual que produeix dotze accions a l'any executades val més que una que en produeix quaranta d'abandonades.
Detecció d'anomalies de cost
Mirar la factura un cop al mes té un problema evident: un error comès el dia 6 es descobreix el dia 5 del mes següent, amb trenta dies de despesa acumulada. L'AWS Cost Anomaly Detection cobreix aquest buit amb aprenentatge automàtic sobre el patró històric de despesa, i és gratuït.
Els conceptes:
- Un monitor defineix què es vigila: tots els serveis, un compte, una etiqueta o una categoria de cost.
- Una subscripció defineix a qui s'avisa, amb quin llindar i amb quina freqüència.
- Els llindars poden ser absoluts (més de X USD d'impacte) o percentuals (més d'un X % sobre el que s'espera). Es poden combinar amb
AND/OR.
Els tres monitors de MercadoFresco:
# 1. Monitor general per servei: detecta qualsevol servei que es dispari
aws ce create-anomaly-monitor --anomaly-monitor '{
"MonitorName": "mf-todos-los-servicios",
"MonitorType": "DIMENSIONAL",
"MonitorDimension": "SERVICE"
}'
# 2. Monitor especific dels comptes no productius, mes sensible
aws ce create-anomaly-monitor --anomaly-monitor '{
"MonitorName": "mf-entornos-no-productivos",
"MonitorType": "CUSTOM",
"MonitorSpecification": {
"Dimensions": {
"Key": "LINKED_ACCOUNT",
"Values": ["222233334444", "333344445555"],
"MatchOptions": ["EQUALS"]
}
}
}'
# 3. Subscripcio: avisa alertas-mercadofresco quan l'impacte superi
# 25 USD absoluts O el 40 % sobre el que s'espera
aws ce create-anomaly-subscription --anomaly-subscription '{
"SubscriptionName": "mf-avisos-coste",
"MonitorArnList": [
"arn:aws:ce::999988887777:anomalymonitor/mf-todos-los-servicios",
"arn:aws:ce::999988887777:anomalymonitor/mf-entornos-no-productivos"
],
"Subscribers": [
{"Type": "SNS", "Address": "arn:aws:sns:eu-west-1:111122223333:alertas-mercadofresco"}
],
"Frequency": "IMMEDIATE",
"ThresholdExpression": {
"Or": [
{"Dimensions": {"Key": "ANOMALY_TOTAL_IMPACT_ABSOLUTE",
"Values": ["25"], "MatchOptions": ["GREATER_THAN_OR_EQUAL"]}},
{"Dimensions": {"Key": "ANOMALY_TOTAL_IMPACT_PERCENTAGE",
"Values": ["40"], "MatchOptions": ["GREATER_THAN_OR_EQUAL"]}}
]
}
}'Comentaris sobre les decisions preses aquí:
MonitorType: DIMENSIONALambSERVICEcrea automàticament un monitor per a cada servei que es faci servir. És l'opció per defecte assenyada i no s'ha de mantenir.- El segon monitor existeix perquè els entorns no productius tenen un patró molt més pla: qualsevol pujada és sospitosa, mentre que a producció una pujada pot ser simplement un divendres bo.
Frequency: IMMEDIATEnomés funciona amb SNS; el correu admetDAILYoWEEKLY. Per a l'avís immediat cal passar per SNS, que a més ja està integrat amb Chatbot i arriba al canal de l'equip.- Els llindars combinats amb
Oreviten les dues errades clàssiques: un llindar només percentual dispara constantment en serveis barats, i un de només absolut no detecta que un servei petit s'ha multiplicat per deu.
Un consell de calibratge: comença amb llindars alts i abaixa'ls. Un detector d'anomalies que avisa tres vegades per setmana se silencia en quinze dies i ja no serveix de res.
El cas de la càrrega nocturna a Redshift
El 14 d'agost a les 09:12, alertas-mercadofresco rep aquest avís:
Anomalia de cost detectada Servei: Amazon Redshift Compte: 111122223333 Impacte total: 68,40 USD Cost esperat: 3,10 USD/dia Cost real: 14,50 USD/dia Detectada el: 2026-08-14 Primer dia afectat: 2026-08-08
La investigació de la Sara segueix tres passos que serveixen de plantilla per a qualsevol anomalia de cost:
graph TD A["Avis d'anomalia<br/>Redshift, +68,40 USD"] --> B["1. Agrupar per TIPUS D'US<br/>al Cost Explorer"] B -->|"RPU-Hours"| C["Es computacio:<br/>alguna cosa s'executa de mes"] B -->|"Storage"| C2["Son dades:<br/>alguna cosa s'acumula"] C --> D["2. Vista HORARIA<br/>dels dies afectats"] D --> E["Patro: activitat continua<br/>de 02:00 a 08:00, abans 40 min"] E --> F["3. CloudTrail + registres<br/>de consultes"] F --> G["Causa: desplegament del 7 d'agost<br/>JOIN sense condicio"] G --> H["Corregir + limit d'us<br/>+ abaixar el llindar del monitor"]
Els tres passos, amb el seu resultat concret:
- Agrupar per tipus d'ús al Cost Explorer, filtrant a Redshift i als últims 14 dies. El resultat assenyala
RPU-Hours, no l'emmagatzematge: el problema és computació, no dades. - Vista horària d'aquells dies. El patró és inequívoc: abans, un pic de 40 minuts a les 02:00; ara, activitat contínua des de les 02:00 fins a les 08:00.
- CloudTrail i els registres de consultes. El 7 d'agost es va desplegar un informe nou amb una consulta que fa un producte cartesià per un
JOINsense condició. La consulta no falla: simplement triga sis hores, i mentrestant el grup de treball Serverless no es pausa mai.
El cost real de l'incident: 68,40 USD en set dies, que a aquest ritme serien uns 340 USD al mes, un 15 % de la factura, per un JOIN mal escrit.
Les tres accions que es prenen, i cap no és «arreglar la consulta» i prou:
| Acció | Què evita |
|---|---|
Corregir el JOIN i afegir la consulta a les proves del pipeline |
Que es torni a desplegar igual |
Fixar un límit d'ús a wg-mercadofresco-analitica: alerta a 40 RPU-hora diàries i aturada a 60 |
Que qualsevol consulta futura es mengi la factura |
| Abaixar el llindar del monitor d'anomalies del compte de producció de 25 a 15 USD | Que es detecti en dos dies en lloc de en set |
La lliçó general: una anomalia de cost gairebé sempre és un error tècnic, no un problema de diners. L'avís de facturació va ser, en aquest cas, el sistema de detecció d'errors més eficaç que tenia l'equip.
Recomanacions de reducció i recursos orfes
El Cost Explorer inclou una secció de Rightsizing recommendations que analitza l'ús de CPU i memòria dels últims 14 dies i proposa reduir o apagar. Convé conèixer-ne els límits: només cobreix EC2 (no Fargate, no Lambda, no Aurora) i assumeix que el patró de les dues últimes setmanes es repetirà.
Per a MercadoFresco, que ja té gairebé tota la computació a Fargate, aquesta secció aporta poc. El que sí que aporta molt és la caça de recursos orfes, que no requereix cap eina especial:
| Tipus d'orfe | Com es detecta | A MercadoFresco | Cost |
|---|---|---|---|
| Volums EBS sense associar | Estat available |
3 volums, 100 GiB | 8,00 USD/mes |
| Adreces IP elàstiques sense associar | Sense instància ni interfície | 2 adreces | 7,30 USD/mes |
| Instantànies antigues | Anteriors a la política de retenció | 4 d'RDS, 11 d'EBS | 6,20 USD/mes |
| Instàncies EC2 aturades amb volum | Estat stopped però l'EBS es continua pagant |
1 bastió aturat des del maig | 4,80 USD/mes |
| Imatges d'ECR sense política de cicle de vida | Recompte creixent per repositori | 412 imatges, 42 GB | 4,20 USD/mes |
| Balancejadors sense destins sans | Grup de destinació buit | 1 ALB d'una prova de l'abril | 17,10 USD/mes |
| Grups de registres sense retenció | retentionInDays nul |
84 grups | 34,60 USD/mes |
| Punts d'enllaç de VPC en entorns aturats | Càrrec fix sense trànsit | 4 a preproducció | 32,10 USD/mes |
Sumen 114,30 USD al mes en coses que ningú no fa servir, és a dir, un 5,1 % de la factura llençat. I són, sense excepció, restes de feina legítima: una prova que es va fer, un entorn que es va aixecar, una instància que es va aturar en lloc d'acabar-la.
L'script que MercadoFresco executa cada dilluns per detectar-los:
#!/usr/bin/env bash
# Detector d'orfes. Nomes informa: no esborra res.
REGION=eu-west-1
echo "== Volums EBS sense associar =="
aws ec2 describe-volumes --region $REGION \
--filters Name=status,Values=available \
--query 'Volumes[].{Id:VolumeId,GiB:Size,Creat:CreateTime}' --output table
echo "== IP elastiques sense associar =="
aws ec2 describe-addresses --region $REGION \
--query 'Addresses[?AssociationId==null].[PublicIp,AllocationId]' --output table
echo "== Grups de registres sense retencio =="
aws logs describe-log-groups --region $REGION \
--query 'logGroups[?retentionInDays==null].[logGroupName,storedBytes]' \
--output table
echo "== Grups de destinacio sense destins sans =="
for tg in $(aws elbv2 describe-target-groups --region $REGION \
--query 'TargetGroups[].TargetGroupArn' --output text); do
sans=$(aws elbv2 describe-target-health --region $REGION --target-group-arn "$tg" \
--query 'length(TargetHealthDescriptions[?TargetHealth.State==`healthy`])' \
--output text)
[ "$sans" = "0" ] && echo "SENSE DESTINS SANS: $tg"
doneDues decisions de disseny d'aquest script mereixen comentari. Només informa, mai no esborra: un volum available pot ser la còpia que algú va separar expressament abans d'una migració, i un esborrat automàtic destruiria dades. I s'executa setmanalment, no cada dia, perquè els orfes apareixen a poc a poc i un informe diari que gairebé sempre està buit es deixa de llegir.
Compute Optimizer i Trusted Advisor
Tres eines se solapen aquí i convé saber quina fer servir per a què:
| Eina | Què analitza | Fortalesa | Límit |
|---|---|---|---|
| Cost Explorer – Rightsizing | EC2 amb dades de facturació | Integrat amb el cost | Només EC2, 14 dies |
| AWS Compute Optimizer | EC2, Auto Scaling, EBS, Lambda, ECS a Fargate | Aprenentatge automàtic sobre mètriques reals; cobreix Fargate i Lambda | Necessita 14 dies de dades; millor amb mètriques de memòria |
| Trusted Advisor (05-05) | Comprovacions predefinides transversals | Cobreix cost, seguretat, fiabilitat i quotes | Les comprovacions de cost completes exigeixen pla Business |
Per a MercadoFresco, la més útil de les tres és Compute Optimizer, precisament perquè cobreix el que el Cost Explorer no veu:
- Lambda: recomana memòria per funció. La funció
mercadofresco-generar-miniaturasestà a 1.024 MB i fa servir 340 MB de pic; abaixar-la a 512 MB estalvia poc en diners però també redueix el temps, perquè la CPU escala amb la memòria. Aquí cal anar amb compte: abaixar la memòria d'una Lambda pot fer-la més lenta i més cara, i s'ha de mesurar amb l'ajust de potència, no suposar-ho. - ECS a Fargate: valida el dimensionament per percentil que es va fer a 10-02, i assenyala que
svc-mercadofresco-trabajadoresestà sobredimensionat en memòria. - EBS: proposa passar els volums
gp2restants agp3, un 20 % més barat amb el mateix rendiment base.
El repartiment de papers que funciona: Trusted Advisor per al que és evident i transversal, Compute Optimizer per al dimensionament fi, Cost Explorer per entendre els diners i decidir. Cap de les tres no substitueix la revisió mensual amb criteri humà, perquè cap no sap que un entorn de preproducció s'ha d'assemblar a producció encara que estigui infrautilitzat.
Previsió de despesa i com interpretar-la
El Cost Explorer projecta la despesa futura amb un interval de confiança. Per a MercadoFresco, la previsió d'agost a mitjan mes era de 2.180 USD amb un interval del 80 % entre 2.050 i 2.310; el tancament real va ser de 2.237,60 USD, dins de l'interval.
Tres advertiments sobre la previsió, en ordre d'importància:
- Extrapola el passat. No sap que l'1 de setembre s'apaga l'entorn de desenvolupament a les nits, ni que al desembre hi ha campanya. Tota decisió ja presa invalida la previsió.
- L'interval de confiança forma part del número. Presentar «2.180 USD» sense dir «entre 2.050 i 2.310» converteix una estimació en una promesa, i algú la tractarà com a tal.
- És molt dolenta a principi de mes. Amb tres dies de dades, la previsió de MercadoFresco va oscil·lar entre 1.900 i 2.600 USD. A partir del dia 10 s'estabilitza.
El seu ús legítim és com a entrada dels pressupostos amb llindar sobre cost previst d'11-04: assabentar-se el dia 8 que se superarà el pressupost és molt més útil que assabentar-se'n el dia 30, quan ja s'ha superat.
Consultar el Cost Explorer des de boto3
Tot el que hem vist es pot automatitzar amb l'API. L'exemple complet que MercadoFresco executa cada dia:
import boto3
from datetime import date, timedelta
ce = boto3.client("ce", region_name="us-east-1") # l'endpoint de CE es global
avui = date.today()
inici = (avui - timedelta(days=32)).replace(day=1) # mes anterior complet
resposta = ce.get_cost_and_usage(
TimePeriod={"Start": inici.isoformat(), "End": avui.isoformat()},
Granularity="DAILY",
Metrics=["UnblendedCost"],
GroupBy=[
{"Type": "DIMENSION", "Key": "SERVICE"},
{"Type": "TAG", "Key": "Componente"},
],
Filter={
"And": [
{"Dimensions": {"Key": "RECORD_TYPE",
"Values": ["Usage"], "MatchOptions": ["EQUALS"]}},
{"Dimensions": {"Key": "LINKED_ACCOUNT",
"Values": ["111122223333"], "MatchOptions": ["EQUALS"]}},
]
},
)
# Acumular per servei per treure el top 10 del periode
per_servei = {}
for dia in resposta["ResultsByTime"]:
for grup in dia["Groups"]:
servei = grup["Keys"][0]
quantitat = float(grup["Metrics"]["UnblendedCost"]["Amount"])
per_servei[servei] = per_servei.get(servei, 0.0) + quantitat
print(f"{'Servei':<45} {'USD':>10}")
for servei, quantitat in sorted(per_servei.items(),
key=lambda x: -x[1])[:10]:
print(f"{servei:<45} {quantitat:>10.2f}")Els detalls que calen perquè això funcioni i no surti car:
- El client es crea a
us-east-1. L'endpoint del Cost Explorer és global i viu allà; crear-lo aeu-west-1produeix un error de connexió que despista bastant. RECORD_TYPE = Usageexclou impostos, crèdits i quotes, perquè la suma coincideixi amb el cost de serveis i no amb el total facturat.- Cada crida costa 0,01 USD. Aquest script s'executa un cop al dia: 0,30 USD al mes. Executat cada cinc minuts des d'un tauler serien 87 USD al mes, més del que costa ElastiCache a preproducció.
GroupByadmet un màxim de dues dimensions. Per a creuaments més rics, el camí és el CUR amb Athena d'11-02.- La resposta ve paginada amb
NextPageTokenquan hi ha molts grups; en producció cal recórrer-la, i cada pàgina és una altra petició facturada.
Publicar la despesa diària com a mètrica de negoci
El pas que converteix l'anàlisi en una cosa que es mira sense voler: portar la despesa al tauler on ja viu el negoci.
import boto3
from datetime import date, timedelta
ce = boto3.client("ce", region_name="us-east-1")
cw = boto3.client("cloudwatch", region_name="eu-west-1")
ahir = date.today() - timedelta(days=2) # 2 dies: la dada d'ahir encara no es tancada
fins = ahir + timedelta(days=1)
dades = ce.get_cost_and_usage(
TimePeriod={"Start": ahir.isoformat(), "End": fins.isoformat()},
Granularity="DAILY",
Metrics=["UnblendedCost"],
GroupBy=[{"Type": "DIMENSION", "Key": "LINKED_ACCOUNT"}],
Filter={"Dimensions": {"Key": "RECORD_TYPE",
"Values": ["Usage"], "MatchOptions": ["EQUALS"]}},
)
ENTORNS = {
"111122223333": "produccion",
"222233334444": "preproduccion",
"333344445555": "desarrollo",
}
metriques, total = [], 0.0
for grup in dades["ResultsByTime"][0]["Groups"]:
compte = grup["Keys"][0]
quantitat = float(grup["Metrics"]["UnblendedCost"]["Amount"])
total += quantitat
if compte in ENTORNS:
metriques.append({
"MetricName": "CosteDiario",
"Dimensions": [{"Name": "Entorno", "Value": ENTORNS[compte]}],
"Value": round(quantitat, 2),
"Unit": "None",
})
metriques.append({"MetricName": "CosteDiario",
"Dimensions": [{"Name": "Entorno", "Value": "total"}],
"Value": round(total, 2), "Unit": "None"})
cw.put_metric_data(Namespace="MercadoFresco/Tienda", MetricData=metriques)
print(f"Publicat el cost del {ahir}: {total:.2f} USD")Per què això importa més del que sembla:
- Fa servir la dada de fa dos dies, no la d'ahir, pel retard d'actualització. Publicar la d'ahir produeix una sèrie amb valls falses que confonen més del que informen.
- Publica una sèrie per entorn i una de total, cosa que permet posar al tauler
mercadofresco-negocioun gràfic ambCosteDiarioal costat dePedidosConfirmados. Veure les dues línies juntes és la manera més directa d'entendre el cost unitari sense calcular res. - Permet alarmes de CloudWatch sobre el cost, amb tota la maquinària del mòdul 5: llindars, dades absents, accions i silenciament. Una alarma de
CosteDiarioa desenvolupament per damunt de 10 USD avisa en hores, no en setmanes. - Aquest script viu en una Lambda amb EventBridge Scheduler executant-se a les 06:00, i el seu cost total és de cèntims.
Les deu optimitzacions de MercadoFresco
Amb tota l'anàlisi feta, la Marta i el Luis dediquen dos dies a executar. Aquestes són les deu accions, ordenades per estalvi:
| # | Optimització | Estalvi/mes | Risc | Esforç |
|---|---|---|---|---|
| 1 | Apagada nocturna i de cap de setmana de preproducció i desenvolupament | 118,00 USD | Baix | Mitjà |
| 2 | Retenció de registres i baixada del nivell a INFO a producció |
74,00 USD | Baix | Baix |
| 3 | De 2 NAT a 1 a preproducció i desenvolupament | 66,00 USD | Baix | Baix |
| 4 | Autoescalat de lectors d'Aurora: de 2 a 1 en horari vall | 54,00 USD | Mitjà | Mitjà |
| 5 | Retirar els punts d'enllaç d'interfície de preproducció | 32,00 USD | Baix | Baix |
| 6 | Cicle de vida a S3 per a mercadofresco-registros-web i còpies |
38,00 USD | Baix | Baix |
| 7 | Esborrar els orfes: volums, IP, instantànies, ALB de proves | 41,00 USD | Baix | Baix |
| 8 | arm64 als treballadors i a preproducció (la botiga ja el tenia) | 27,00 USD | Baix | Mitjà |
| 9 | Redshift: abaixar la RPU base, límit d'ús i treure la càrrega duplicada | 27,00 USD | Baix | Baix |
| 10 | Cicle de vida a ECR: conservar 20 d'etiquetades, esborrar sense etiquetar > 14 dies | 11,00 USD | Baix | Baix |
| Total | 488,00 USD |
El detall de les tres primeres, que són les que més aporten.
1. Apagada nocturna (118,00 USD). Preproducció i desenvolupament funcionen 24×7 per a un equip que treballa de 8 a 19 de dilluns a divendres. Encesos de 07:30 a 20:30 en dies laborables són 65 de les 168 hores setmanals: un 61 % de reducció en el que es pot apagar. Amb EventBridge Scheduler:
# Baixar a zero les tasques del servei de desenvolupament cada nit
aws scheduler create-schedule \
--name mf-desarrollo-apagar \
--schedule-expression "cron(30 20 ? * MON-FRI *)" \
--schedule-expression-timezone "Europe/Madrid" \
--flexible-time-window '{"Mode":"OFF"}' \
--target '{
"Arn": "arn:aws:scheduler:::aws-sdk:ecs:updateService",
"RoleArn": "arn:aws:iam::333344445555:role/rol-mercadofresco-planificador",
"Input": "{\"Cluster\":\"ecs-mercadofresco\",\"Service\":\"svc-mercadofresco-tienda-fg\",\"DesiredCount\":0}"
}'La zona horària explícita Europe/Madrid no és un detall menor: sense ella, l'horari d'estiu desplaça l'apagada una hora i, dues vegades l'any, algú troba l'entorn apagat a les 19:30. El que s'apaga: tasques de Fargate a zero, instàncies d'Aurora aturades —recordant que RDS i Aurora arrenquen sols als 7 dies d'estar aturats, així que cal un planificador que els torni a aturar—, i el grup de treball de Redshift, que es pausa sol.
2. Retenció de registres (74,00 USD). Dos canvis independents. El primer, posar retenció als 84 grups de registres:
# Politica per defecte: 30 dies en no productiu, 90 en produccio,
# 365 nomes per als registres d'auditoria
for grup in $(aws logs describe-log-groups \
--query 'logGroups[?retentionInDays==null].logGroupName' \
--output text); do
case "$grup" in
*cloudtrail*|*auditoria*) dies=365 ;;
*produccion*|*prod*) dies=90 ;;
*) dies=30 ;;
esac
aws logs put-retention-policy --log-group-name "$grup" --retention-in-days $dies
echo "$grup -> $dies dies"
doneEl segon, abaixar el nivell de registre de DEBUG a INFO a producció, cosa que redueix la ingesta de 61 a uns 38 GB al mes. I una decisió d'arquitectura que es pren de passada: els registres d'accés de l'ALB i del WAF deixen de duplicar-se a CloudWatch Logs i es queden només a S3, on ja es consulten amb Athena i costen vint vegades menys.
3. De 2 NAT a 1 (66,00 USD). A preproducció i desenvolupament s'elimina un NAT per entorn i s'encamina el trànsit de les dues subxarxes privades pel que queda. La conseqüència real, escrita perquè ningú no se sorprengui: si cau l'AZ del NAT supervivent, aquell entorn es queda sense sortida a internet. A desenvolupament, això significa que el Luis no pot descarregar dependències durant una estona. A producció no es toca, i aquesta asimetria és exactament el que significa tractar els entorns segons la seva criticitat en lloc de per costum.
El resultat global:
| Concepte | Abans | Després |
|---|---|---|
| Factura mensual | 2.237,60 USD | 1.749,60 USD |
| Reducció | −488,00 USD (−21,8 %) | |
| Estalvi anualitzat | −5.856 USD | |
| Cost per comanda | 0,01243 USD | 0,00972 USD (−21,8 %) |
| Pes del que no és productiu | 29,0 % | 19,4 % |
I una observació honesta sobre aquesta llista: cap de les deu accions no ha degradat la producció. No s'ha tret cap lector d'Aurora al pic, no s'ha reduït l'observabilitat de producció per sota del que cal i no s'ha tocat la redundància de sortida a internet on hi ha clients. Un estalvi del 22 % sense tocar la qualitat del servei és el normal a la primera passada d'optimització d'una arquitectura que no s'ha revisat mai. La segona passada ja costa molta més feina per cada dòlar.
Errors Habituals i Consells
Error: comparar el mes en curs amb el mes anterior complet. El dia 12 sembla que s'ha estalviat un 60 %. Consell: compara períodes equivalents —dia 1 a 12 enfront de dia 1 a 12— o fes servir la previsió, mai un mes parcial contra un de tancat.
Error: treure conclusions de la despesa d'avui. Amb fins a 24 hores de retard, el dia en curs sempre sembla barat. Consell: treballa amb dades de fa dos dies com a mínim, i publica les mètriques amb aquest desfasament.
Error: barrejar cost no combinat i amortitzat en la mateixa conversa. Dues persones veuen números diferents i discuteixen mitja hora. Consell: digues sempre quina mètrica fas servir. No combinat per quadrar amb la factura, net amortitzat per analitzar.
Error: perseguir la línia més gran de la factura. Aurora és la més gran i és una decisió conscient i signada; els diners mal gastats són a les línies mitjanes que ningú no va decidir. Consell: ordena per «cost que ningú no ha decidit», no per import.
Error: consultar l'API del Cost Explorer des d'un tauler que es refresca cada minut. A 0,01 USD per petició, l'anàlisi de costos acaba sent una partida de la factura. Consell: consulta un cop al dia i publica el resultat com a mètrica de CloudWatch; els taulers llegeixen la mètrica, no l'API.
Error: activar la granularitat horària i oblidar-la. Té cost per registres consultats i es paga encara que gairebé no es faci servir. Consell: activa-la per a l'anàlisi concreta que la necessiti —el pic del divendres, la base estable d'11-05— i revisa si continua fent falta.
Error: llindars d'anomalia massa sensibles. Tres avisos per setmana i el canal se silencia. Consell: comença alt —25 USD o 40 %— i abaixa segons l'experiència real, amb llindars combinats absolut i percentual.
Error: esborrar orfes automàticament. Un volum available pot ser la còpia que algú va apartar abans d'una migració. Consell: el detector informa, la persona decideix. I abans d'esborrar, etiqueta amb FechaBaja i espera una setmana.
Error: apagar entorns sense avisar. L'equip es troba l'entorn caigut a les 20:31 enmig d'una prova. Consell: anuncia-ho, deixa un procediment d'encesa manual documentat i comença per desenvolupament abans que per preproducció.
Consell: la primera anàlisi d'una factura mai revisada rendeix entre un 15 i un 30 %. No cal ser brillant, cal mirar. El difícil és la segona passada.
Consell: converteix cada troballa en una comprovació permanent. La retenció de registres no és una tasca, és una regla de Config; el cicle de vida d'ECR no és un esborrat, és una política; l'apagada nocturna no és un recordatori, és un planificador.
Exercicis
Exercici 1: interpretar una anomalia
El 3 d'octubre, alertas-mercadofresco rep un avís: Amazon S3 al compte 111122223333 ha passat de 4,20 a 19,80 USD diaris des del 28 de setembre. Impacte acumulat: 78,00 USD.
- Enumera quatre hipòtesis ordenades de més a menys probable.
- Indica quina agrupació i quin filtre faries servir al Cost Explorer per descartar-les.
- Si la causa resulta ser que es va activar el registre d'accés al bucket
mercadofresco-catalogo-fotosi aquests registres s'escriuen al mateix bucket, quines tres accions prendries?
Exercici 2: prioritzar optimitzacions amb pressupost de temps
Disposes d'un sol dia de feina i d'aquesta llista d'accions possibles sobre la factura de MercadoFresco:
| Acció | Estalvi/mes | Esforç | Risc |
|---|---|---|---|
| A. Apagada nocturna del que no és productiu | 118 USD | 6 h | Baix |
| B. Retenció de registres | 74 USD | 1 h | Baix |
| C. Migrar els treballadors a arm64 | 27 USD | 8 h | Mitjà |
| D. De 2 NAT a 1 en el que no és productiu | 66 USD | 2 h | Baix |
| E. Esborrar orfes | 41 USD | 2 h | Baix |
| F. Comprar un Savings Plan a 3 anys | 210 USD | 1 h | Alt |
- Tria què faries en aquest dia i justifica-ho.
- Per què F és perillosa ara mateix, si és la de més estalvi i menys esforç?
- Calcula l'estalvi aconseguit i el percentatge sobre els 2.237,60 USD.
Exercici 3: llegir un desglossament per tipus d'ús
El Cost Explorer, filtrat a Amazon CloudWatch i agrupat per tipus d'ús, retorna per a un mes:
| Tipus d'ús | USD |
|---|---|
EUW1-DataProcessing-Bytes |
118,40 |
EUW1-TimedStorage-ByteHrs |
34,60 |
EUW1-CW:MetricMonitorUsage |
27,00 |
EUW1-CW:Requests |
18,60 |
EUW1-CW:AlarmMonitorUsage |
8,40 |
EUW1-CW:Dashboards |
6,00 |
EUW1-CW:Canaries |
1,90 |
- Tradueix cada línia al que significa a la pràctica.
- Quines atacaries primer i amb quina acció concreta?
- Estima l'estalvi si la ingesta baixa de 61 a 38 GB al mes i la retenció passa d'indefinida a 30/90 dies, sabent que l'emmagatzematge s'estabilitzaria al voltant dels 130 GB.
Solucions
Solució a l'exercici 1
(1) Quatre hipòtesis, de més a menys probable:
- S'ha activat un registre que escriu a S3 —accés al bucket, registres de l'ALB, del WAF, del CUR o de flux de la VPC— i el volum de peticions
PUTs'ha disparat. És la causa més freqüent d'un salt brusc a S3, perquè el cost no és als bytes sinó a les peticions. - S'ha pujat un volum gran de dades: una càrrega inicial, una còpia de seguretat manual, una exportació de la base de dades.
- Un procés en bucle que reescriu els mateixos objectes, o versionatge activat sense cicle de vida que conserva totes les versions antigues.
- Transferència de sortida cap a internet o cap a una altra regió, si algun consumidor extern va començar a llegir directament del bucket saltant-se CloudFront.
(2) Com descartar-les. Filtre: servei = Amazon S3, compte = 111122223333, últims 30 dies, granularitat diària. Agrupació: tipus d'ús. Aquesta única vista discrimina les quatre hipòtesis en una ullada, perquè els tipus d'ús són diferents: Requests-Tier1 (peticions PUT) assenyala la primera o la tercera; TimedStorage-ByteHrs assenyala la segona; DataTransfer-Out-Bytes assenyala la quarta. Si Requests-Tier1 domina, un segon pas amb el CUR agrupant per line_item_resource_id dona el bucket exacte.
(3) Tres accions si és el registre d'accés escrivint al mateix bucket:
- Moure el destí dels registres a
mercadofresco-registros-web, mai al mateix bucket que s'està registrant. Escriure els registres d'accés al mateix bucket crea un bucle: cada escriptura de registre genera un accés, que genera un registre. És un error clàssic i pot créixer sense límit. - Posar cicle de vida a aquests registres: 30 dies a Standard, després Glacier Instant Retrieval, esborrat als 180. Els registres d'accés gairebé mai no es consulten passat el primer mes.
- Preguntar-se si calen. Si l'objectiu era auditoria, els esdeveniments de dades de CloudTrail (05-03) ja cobreixen l'accés a S3 amb millor format i millor integració, i probablement ja estiguin actius. Un registre duplicat es paga dues vegades.
Solució a l'exercici 2
(1) Què faria en un dia (8 hores): B (1 h) + D (2 h) + E (2 h) = 5 hores, i amb les 3 hores restants començar A, deixant el planificador escrit i provat a desenvolupament però sense aplicar-lo encara a preproducció.
El raonament: B, D i E són de risc baix, esforç baix i efecte immediat, i juntes sumen 181 USD al mes en cinc hores de feina. A és la de més estalvi però necessita sis hores de rellotge més un avís a l'equip, així que partir-la és el més assenyat. C queda per a una altra setmana: vuit hores per 27 USD al mes és la pitjor relació de la llista, i a més té risc mitjà perquè exigeix provar la imatge arm64 a preproducció abans.
(2) Per què F és perillosa. Per una raó d'ordre que 11-05 desenvolupa i que convé interioritzar ara: comprometre capacitat abans d'optimitzar és comprar el que estàs a punt de deixar de fer servir. Si es compra un Savings Plan a tres anys dimensionat sobre el consum actual i la setmana següent s'executen les accions A a E, el consum baixa un 22 % i el compromís sobrant es paga igualment durant tres anys. A això s'hi sumen dos agreujants: tres anys és un horitzó en què l'arquitectura gairebé segur que canvia, i un Savings Plan no es pot cancel·lar. L'ordre correcte és sempre: primer apagar el que sobra, després dimensionar el que queda, i només aleshores comprometre.
(3) Estalvi aconseguit:
B (retencio de registres) ........ 74,00 USD D (de 2 NAT a 1) ................. 66,00 USD E (recursos orfes) ............... 41,00 USD -------------------------------------------- Total ............................ 181,00 USD/mes Sobre 2.237,60 USD ............... 8,1 % Anualitzat ....................... 2.172 USD
Vuit per cent de la factura en cinc hores de feina. És un rendiment que cap altra activitat tècnica no iguala, i és exactament per això que el pla de millora d'11-01 començava pel pilar de costos.
Solució a l'exercici 3
(1) Traducció de cada línia:
| Tipus d'ús | Què és a la pràctica |
|---|---|
DataProcessing-Bytes |
Ingesta de registres: GB que arriben a CloudWatch Logs. La línia dominant |
TimedStorage-ByteHrs |
Emmagatzematge de registres ja ingerits, mes a mes. Creix si no hi ha retenció |
CW:MetricMonitorUsage |
Mètriques personalitzades, a 0,30 USD cadascuna al mes. Són 90 |
CW:Requests |
Crides a l'API: PutMetricData, GetMetricData, Container Insights |
CW:AlarmMonitorUsage |
Alarmes, a 0,10 USD estàndard. Són 84 |
CW:Dashboards |
Taulers per damunt dels 3 gratuïts |
CW:Canaries |
Comprovacions de Synthetics, per execució |
(2) Què atacar primer. Les dues línies de registres, que són el 71 % del total, i en aquest ordre:
- Retenció (
TimedStorage), perquè és el canvi de menys risc: una ordre per grup, cap efecte sobre l'aplicació i l'estalvi comença el mes següent. Només cal decidir amb criteri els grups d'auditoria, que han de conservar més temps. - Ingesta (
DataProcessing), abaixant el nivell aINFOa producció i deixant de duplicar els registres de l'ALB i del WAF a CloudWatch quan ja són a S3. - En un tercer pla, revisar les 90 mètriques personalitzades i les 84 alarmes: gairebé sempre hi ha mètriques que ningú no grafica i alarmes que ningú no atén. Són 35 USD al mes i, més important, cada alarma que ningú no mira degrada la credibilitat de les que sí que importen.
(3) Estimació de l'estalvi:
Ingesta: 61 GB -> 38 GB, a ~0,50 USD/GB
118,40 -> ~73,70 USD estalvi 44,70 USD
Emmagatzematge: 1,1 TB -> ~130 GB estabilitzat
34,60 -> ~ 4,10 USD estalvi 30,50 USD
------------------------------------------------------------------
Estalvi total estimat 75,20 USD/mesCoincideix amb els 74 USD de l'acció 2 de la llista d'optimitzacions. Dos matisos per no prometre de més: l'estalvi de l'emmagatzematge no és immediat, perquè els registres existents van caducant al llarg de les setmanes següents segons la seva antiguitat, així que l'efecte complet es veu el segon o tercer mes; i baixar de DEBUG a INFO té un cost real que cal acceptar per escrit, que és tenir menys detall disponible el dia que calgui investigar un incident estrany a producció. La mitigació és deixar el nivell DEBUG activable sota demanda mitjançant un paràmetre a /mercadofresco/produccion/... sense necessitat de desplegar.
Conclusió
MercadoFresco ha obert la seva factura i n'ha sortit amb un 22 % menys de despesa i cap degradació del servei.
Saps què és el Cost Explorer i amb quines dades treballa: 13 mesos d'històric, granularitat diària gratuïta i horària de pagament, fins a 24 hores de retard —d'aquí la regla de no treure mai conclusions del dia en curs— i una interfície gratuïta amb una API que costa 0,01 USD per petició, que és l'error car que converteix un tauler de costos en una partida de la factura.
Tens els conceptes de facturació que cal entendre abans de mirar un gràfic: no combinat per quadrar amb la factura, amortitzat per analitzar quan hi ha compromisos —amb l'exemple del Savings Plan de 1.200 USD que es veu com un pic al març o com 100 USD al mes segons la mètrica—, i les variants netes que descompten crèdits. Més la raó per la qual la suma mai no quadra amb el que es cobra: els tipus de línia Tax, Credit, Refund i les quotes, amb la regla de treballar sempre sobre el cost de serveis, que és l'únic que s'optimitza amb enginyeria. I la facturació consolidada entre els sis comptes, amb les seves tres conseqüències: una sola factura, agregació de trams per volum i compromisos compartits.
Tens la factura completa de MercadoFresco: 27 línies fins als 2.237,60 USD, encapçalades per Aurora (342,60), Fargate (262,40), NAT Gateway (243,80) i CloudWatch (214,90). I la manera correcta de llegir-la, que no és de més gran a més petit sinó separant el que s'ha decidit del que no: Aurora hi és per un ADR signat, mentre que els 611,20 USD del NAT, la transferència entre zones, CloudWatch i l'EC2 residual —el 27,3 % de la factura— no els ha decidit mai ningú.
Tens les tres sorpreses desmuntades amb el seu origen concret. El NAT Gateway, del qual el 81 % és càrrec fix per hora i no trànsit, amb 143,80 USD al mes pagats per entorns sense ni un sol client. La transferència entre zones, el cost més invisible d'AWS perquè no té cap recurs a qui culpar, que neix de l'ALB repartint entre AZ, de la rèplica d'Aurora i de la d'ElastiCache, i que no s'ha d'eliminar perquè és el preu de l'alta disponibilitat. I CloudWatch, on el 71 % són registres i l'arrel és la mateixa a totes dues línies: ningú no va decidir mai què registrar ni quant retenir.
Tens les eines de vigilància: filtres i agrupacions —amb el tipus d'ús com la dimensió més infravalorada, la que converteix «VPC: 362,40 USD» en quatre línies accionables—, els cinc informes desats, el guió de vuit passos de la revisió mensual de la Marta que acaba sempre amb una sola acció amb propietari i data, i la detecció d'anomalies amb monitors dimensionals, llindars combinats absolut i percentual, i avís immediat per SNS. Amb el cas real de la càrrega nocturna a Redshift —un JOIN sense condició que costava 340 USD al mes i es va detectar per la factura— i la seva lliçó: una anomalia de cost gairebé sempre és un error tècnic, no un problema de diners.
Tens la caça de recursos orfes, 114,30 USD al mes en coses que ningú no fa servir, amb l'script setmanal que informa i mai no esborra; el repartiment de papers entre Cost Explorer, Compute Optimizer i Trusted Advisor, sabent que només Compute Optimizer veu Fargate i Lambda; la previsió amb els seus tres advertiments, començant perquè extrapola el passat i per tant qualsevol decisió ja presa la invalida; i la consulta des de boto3 amb get_cost_and_usage, el client a us-east-1, el filtre RECORD_TYPE=Usage i l'script que publica CosteDiario a MercadoFresco/Tienda amb dos dies de desfasament, perquè la despesa visqui per fi al mateix tauler que les comandes.
I tens les deu optimitzacions executades amb el seu estalvi: apagada nocturna (118), retenció de registres (74), de dos NAT a un en el que no és productiu (66), autoescalat de lectors d'Aurora (54), cicle de vida a S3 (38), orfes (41), punts d'enllaç de preproducció (32), arm64 als treballadors (27), límits a Redshift (27) i cicle de vida a ECR (11). 488,00 USD al mes, un 21,8 %, que deixen la factura en 1.749,60 USD i el cost per comanda en 0,00972 USD. Amb l'observació honesta que cap de les deu no ha degradat la producció, i amb l'advertiment sobre el que ve després: la primera passada d'optimització d'una arquitectura mai revisada rendeix entre un 15 i un 30 % sense ser brillant; la segona ja costa molta més feina per cada dòlar.
Queda un problema que aquesta anàlisi no resol. Tot l'anterior és mirar cap enrere: es descobreix el que ja s'ha gastat. El detector d'anomalies avisa en un dia o dos, cosa que està bé, però encara ningú no ha posat cap límit. Si demà el Luis aixeca un clúster d'EKS de proves al compte de desenvolupament i se n'oblida, o si una consulta nova es dispara un divendres a la nit, la factura creixerà sense que res s'hi interposi. I el presupuesto-mensual-mercadofresco de 10 USD creat a 01-02 fa vint-i-tants mesos que salta tots els dies 2, fins al punt que ja ningú no llegeix els seus correus.
A 11-04, «AWS Budgets», es passa d'analitzar a controlar: pressupostos per compte, per servei, per etiqueta i per categoria de cost, amb llindars sobre cost real i previst, amb avisos escalonats i amb accions automàtiques capaces de congelar el compte de desenvolupament quan arriba al seu límit. Més la rutina FinOps que sosté tot el cicle.
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
