Hace once módulos, MercadoFresco era una tienda online con un servidor que se caía los viernes, unas copias de seguridad que nadie había restaurado nunca y un despliegue que consistía en copiar ficheros por SSH un martes por la noche. Hoy tiene una arquitectura elástica, segura, observable, desplegable desde un pipeline, descrita en código, repartida en cinco cuentas, auditada con método y con una factura que cuesta un 24,8 % menos de lo que costaba hace dos meses.
Esta lección no enseña ningún servicio nuevo. Hace cinco cosas: recorre la arquitectura completa asociando cada pieza al módulo donde se aprendió y cierra el balance de los cinco problemas iniciales; plantea el proyecto final, que es un reto real con diez entregables; ofrece una solución de referencia comentada con sus alternativas descartadas; traza los caminos para seguir aprendiendo, con las certificaciones, los recursos y lo que este curso no ha tocado; y cierra el curso con la lista de limpieza de todo lo creado, para que nadie siga pagando por un laboratorio terminado.
Aviso de coste. Esta lección incluye la limpieza final de todos los recursos del curso. Si has seguido las prácticas en una cuenta real, esa sección no es opcional: un clúster de EKS olvidado cuesta 73 USD al mes, un grupo de ElastiCache más de 100, y siete endpoints de VPC unos 112. El orden de borrado importa, porque hay dependencias. Datos, cuentas e identificadores ficticios.
Contenido
- La arquitectura completa de MercadoFresco
- Cada componente y el módulo donde se aprendió
- Los cinco problemas y su métrica
- Errores comunes y consejos
- Ejercicios: el proyecto final
- Soluciones: la arquitectura de referencia comentada
- Los caminos de certificación de AWS
- Recursos oficiales para seguir
- Lo que este curso no ha tocado
- Qué sabes hacer ahora
- La limpieza final, en el orden correcto
- Conclusión
La arquitectura completa de MercadoFresco
graph TB
subgraph USUARIOS[" "]
U["Clientes<br/>Madrid · Barcelona · Valencia · Sevilla"]
end
subgraph BORDE["Borde global"]
R53["Route 53<br/>mercadofresco.example"]
CF["CloudFront E2QWERTY123ABC"]
WAFC["waf-mercadofresco-cdn<br/>+ Shield Standard"]
end
subgraph PROD["Cuenta produccion 111122223333 — vpc-mercadofresco, eu-west-1"]
ALB["alb-mercadofresco-tienda<br/>tg-mercadofresco-tienda / -verde<br/>waf-mercadofresco-alb · /salud"]
subgraph APP["Subredes privadas de aplicacion -app-a / -app-b"]
FG["svc-mercadofresco-tienda-fg<br/>Fargate arm64 · 2-20 tareas"]
TR["svc-mercadofresco-trabajadores<br/>Fargate + Fargate Spot"]
end
subgraph DATOS["Subredes de datos -datos-a / -datos-b"]
AU[("aurora-mercadofresco-pedidos<br/>escritor + 2 lectores")]
EC[("mercadofresco-catalogo<br/>ElastiCache")]
end
DY[("mercadofresco-carritos<br/>mercadofresco-idempotencia")]
SQS["cola-mercadofresco-pedidos<br/>-correo · -almacen · -analitica<br/>DLQ: -pedidos-fallidos"]
SNS["mercadofresco-pedido-confirmado"]
EB["bus-mercadofresco"]
SF["mercadofresco-procesar-pedido"]
LAM["Lambdas: cobrar-pago · reservar-stock<br/>asignar-reparto · estado-pedido<br/>generar-miniaturas"]
S3[("mercadofresco-catalogo-fotos<br/>-informes-analitica · -registros-web<br/>-copias-basedatos · -artefactos")]
RS[("wg-mercadofresco-analitica<br/>Redshift Serverless")]
NAT["nat-mercadofresco-a / -b<br/>vpce-mercadofresco-s3 + ECR/Logs/Secrets"]
end
subgraph HERR["Herramientas 555566667777"]
ECR["ECR mercadofresco/tienda<br/>mercadofresco/trabajadores"]
PIPE["pipeline-mercadofresco-tienda<br/>build-* · app-mercadofresco-tienda<br/>blue/green + reversion"]
GIT["mercadofresco-tienda<br/>mercadofresco-infra"]
end
subgraph SEG["Seguridad 444455556666"]
CT["trail-mercadofresco"]
CFG["grabador-mercadofresco"]
GD["GuardDuty"]
end
subgraph GEST["Gestion 999988887777 — o-a1b2c3d4e5"]
ORG["Organizations · IAM Identity Center<br/>OU Seguridad · Infraestructura · Cargas · Aislamiento"]
BUD["presupuesto-mensual-mercadofresco<br/>+ 9 presupuestos · Savings Plan"]
end
OBS["CloudWatch MercadoFresco/Tienda<br/>mercadofresco-produccion · -negocio<br/>X-Ray · Container Insights<br/>alertas-mercadofresco"]
KMS["alias/mercadofresco-datos<br/>mercadofresco/produccion/rds/mfadmin"]
U --> R53 --> CF
WAFC -.protege.-> CF
CF --> ALB
ALB --> FG
FG --> AU
FG --> EC
FG --> DY
FG --> SQS
SQS --> TR
TR --> SF
SF --> LAM
LAM --> AU
LAM --> SNS
SNS --> EB
FG --> S3
CF --> S3
AU -.carga nocturna.-> RS
S3 -.informes.-> RS
FG -.salida.-> NAT
GIT --> PIPE --> ECR
PIPE -.despliega.-> FG
KMS -.cifra.-> AU
KMS -.cifra.-> S3
KMS -.cifra.-> DY
OBS -.observa.-> PROD
CT -.audita.-> PROD
CFG -.evalua.-> PROD
GD -.vigila.-> PROD
ORG -.gobierna.-> PROD
ORG -.gobierna.-> HERR
ORG -.gobierna.-> SEG
BUD -.controla.-> PROD
Cada componente y el módulo donde se aprendió
| Componente | Servicio | Módulo | Qué problema resolvió |
|---|---|---|---|
| Cuenta, MFA, presupuesto inicial, regiones | Cuenta, IAM raíz, Budgets | 01-02, 01-03 | Punto de partida seguro |
| Consola, CLI y SDK, perfiles | CLI, boto3 | 01-04, 01-05 | Trabajar sin depender del ratón |
mercadofresco-tienda (primera versión) |
EC2, EBS | 02-01, 02-02 | Sacar la tienda del servidor físico |
mercadofresco-catalogo-fotos y demás buckets |
S3 | 02-03 | Almacenamiento sin límite y con ciclo de vida |
| Base de datos gestionada | RDS → Aurora | 02-04, 06-03 | Copias, parches y conmutación automáticos |
mercadofresco-generar-miniaturas y las demás |
Lambda | 02-05 | Trabajo esporádico sin servidor |
vpc-mercadofresco, subredes, nat-mercadofresco-a/-b, endpoints |
VPC | 03-01 | Aislamiento de red por capas |
sg-mercadofresco-alb/-tienda/-basedatos/-cache |
Grupos de seguridad, NACL | 03-02 | Mínimo privilegio en la red |
alb-mercadofresco-tienda, tg-mercadofresco-tienda/-verde, /salud |
ALB | 03-03 | Reparto, salud y despliegue sin corte |
E2QWERTY123ABC |
CloudFront | 03-04 | 350 ms → 25 ms y −96,6 % de coste en fotos |
mercadofresco.example |
Route 53 | 03-05 | DNS con comprobación de salud |
| Identity Center, roles, políticas | IAM | 04-01 | Nadie con credenciales permanentes |
alias/mercadofresco-datos |
KMS | 04-02 | Cifrado en reposo con clave propia |
mercadofresco/produccion/rds/mfadmin, /mercadofresco/produccion/... |
Secrets Manager, Parameter Store | 04-03 | Secretos rotados y fuera del código |
| Shield Standard, decisión sobre Advanced | Shield | 04-04 | Protección volumétrica con criterio |
waf-mercadofresco-cdn, -alb |
WAF | 04-05 | Inyección, XSS, bots e inundación L7 |
MercadoFresco/Tienda, paneles, alertas-mercadofresco |
CloudWatch | 05-01 | Saber qué pasa y enterarse a tiempo |
| Trazas de extremo a extremo | X-Ray | 05-02 | Encontrar el cuello de botella real |
trail-mercadofresco |
CloudTrail | 05-03 | Quién hizo qué y cuándo |
grabador-mercadofresco, 29 reglas |
Config | 05-04 | Cumplimiento continuo y remediación |
| Comprobaciones y decisión sobre el plan | Trusted Advisor | 05-05 | Higiene continua sin esfuerzo |
| Elección razonada de motor por caso | — | 06-01 | Dejar de usar una sola base de datos para todo |
mercadofresco-carritos, -idempotencia |
DynamoDB | 06-02 | Clave-valor a escala, 51 → 8 USD |
aurora-mercadofresco-pedidos |
Aurora | 06-03 | p99 de 1.900 a menos de 900 ms |
wg-mercadofresco-analitica |
Redshift Serverless | 06-04 | Informes sin tumbar producción, 1.586 → 16 USD |
mercadofresco-catalogo |
ElastiCache | 06-05 | Ficha de producto de 240 a 28 ms |
cola-mercadofresco-pedidos y las demás, DLQ |
SQS | 07-01 | Absorber el pico sin perder pedidos |
mercadofresco-pedido-confirmado |
SNS | 07-02 | Un evento, muchos interesados |
bus-mercadofresco |
EventBridge | 07-03 | Enrutado por contenido y programación |
mercadofresco-procesar-pedido |
Step Functions | 07-04 | Orquestar el pedido con reintentos y compensación |
| Idempotencia, reintentos, DLQ, saga | Patrones | 07-05 | No cobrar dos veces |
mercadofresco-tienda, mercadofresco-infra |
CodeCommit | 08-01 | Código versionado con revisión |
build-mercadofresco-* |
CodeBuild | 08-02 | Compilar y probar en cada commit |
app-mercadofresco-tienda |
CodeDeploy | 08-03 | Blue/green con reversión automática |
pipeline-mercadofresco-tienda |
CodePipeline | 08-04, 08-05 | 4,8 despliegues/semana, restauración en 4 min |
red-mercadofresco.yaml, aplicacion-mercadofresco.yaml |
CloudFormation | 09-01 | Infraestructura reproducible |
infra-cdk/, MercadoFrescoVpc |
CDK | 09-02 | Infraestructura en un lenguaje real |
| Evaluación y descarte razonado | Elastic Beanstalk | 09-03 | Saber cuándo no usar una herramienta |
o-a1b2c3d4e5, 6 cuentas, OU, SCP, ss-mercadofresco-linea-base |
Organizations | 09-04 | Aislamiento y gobierno; −340 USD de duplicados |
ecs-mercadofresco, mercadofresco/tienda |
ECS y ECR | 10-01 | Contenedores sin AMI que mantener |
svc-mercadofresco-tienda-fg arm64, Fargate Spot |
Fargate | 10-02 | 158 → 70 USD y arranque en 40 s |
| Análisis y decisión de quedarse en ECS | EKS | 10-03 | Decidir con criterios escritos, no con moda |
| Revisión de 6 pilares, ADR, RTO/RPO | Well-Architected | 11-01 | Saber qué falta antes de que falle |
| Etiquetas activadas, CUR, coste por pedido | Cost allocation, Athena | 11-02 | Una factura que alguien puede leer |
| Diez optimizaciones, anomalías | Cost Explorer | 11-03 | −488 USD/mes sin degradar nada |
| Diez presupuestos, congelación de desarrollo | Budgets | 11-04 | No poder pasarse sin enterarse |
| Compute SP + nodos reservados | Savings Plans, RI | 11-05 | −68 USD/mes por comprometer capacidad |
Los cinco problemas y su métrica
El curso empezó con cinco problemas concretos. Este es el balance, con números y no con adjetivos:
| # | Problema inicial | Solución | Métrica antes | Métrica después |
|---|---|---|---|---|
| 1 | La tienda se cae los viernes entre las 17:00 y las 21:00 | Fargate con autoescalado por seguimiento de destino y escalado programado que sube el mínimo a las 16:45; colas SQS que absorben la ráfaga; ALB en dos AZ; ElastiCache y lectores de Aurora que descargan la base de datos | 1 servidor, caídas semanales; p99 de 1.900 ms | 900 pedidos/hora sostenidos, p99 < 900 ms, 0 caídas; capacidad probada hasta 1.400 |
| 2 | Las copias no son fiables: nadie ha restaurado nunca | Aurora con PITR continuo y copias replicadas entre regiones; PITR en DynamoDB; versionado y ciclo de vida en S3; AWS Backup; RTO y RPO declarados y firmados, con simulacro semestral | Sin RTO ni RPO; restauración nunca probada | RPO 5 min en región / 6 h regional; RTO 8 h, con simulacro en el calendario |
| 3 | Crecer a más ciudades exige montar todo otra vez | Todo en CloudFormation y CDK; ss-mercadofresco-linea-base con StackSets; pipeline que despliega solo; CloudFront acercando el contenido |
Semanas de trabajo manual por ciudad | 4 ciudades sobre la misma infraestructura; una nueva no requiere infraestructura nueva |
| 4 | Los despliegues dan miedo: martes por la noche, por SSH | Pipeline con pruebas, análisis y puerta de calidad; blue/green con canario del 10 %; reversión automática por alarma | 1 despliegue cada 2-3 semanas; reversión manual de horas | 4,8 despliegues/semana, en horario laboral; restauración en 4 minutos (menos de 1 con blue/green) |
| 5 | Nadie gobierna la infraestructura: ni quién, ni cuánto, ni por qué | Organizations con 6 cuentas y SCP; Identity Center; Config y CloudTrail centralizados; etiquetado impuesto; presupuestos con acciones; revisión Well-Architected semestral | Una cuenta, permisos amplios, factura ilegible | 6 cuentas aisladas, cobertura de etiquetado del 95 %, coste por pedido de 0,00934 USD y −24,8 % de factura |
Cinco problemas, cinco soluciones, y en los cinco casos un número que se puede enseñar. Esa es la diferencia entre haber migrado a la nube y haber resuelto algo.
Errores Comunes y Consejos
Error: creer que la arquitectura final era el objetivo desde el principio. Nadie diseña esto de una vez. MercadoFresco llegó aquí en once pasos, cada uno resolviendo un problema concreto que dolía. Consejo: cuando diseñes, empieza por el problema, no por el diagrama.
Error: copiar esta arquitectura tal cual. Tiene sentido para una tienda con estos volúmenes, estos problemas y este equipo. Para 200 pedidos al mes es un disparate, y para 200.000 al día se queda corta. Consejo: copia el método de decisión, no las cajas del diagrama.
Error: entregar un proyecto de arquitectura sin números. «Usaremos DynamoDB porque escala» no es una justificación; «usaremos DynamoDB porque son 400 escrituras por segundo con acceso por clave y latencia de un dígito de milisegundos, y el coste estimado es de 22 USD al mes» sí lo es. Consejo: cada decisión, un número.
Error: no escribir las alternativas descartadas. El evaluador —y tú dentro de un año— necesita saber qué consideraste y por qué lo dejaste fuera. Consejo: por cada decisión importante, una alternativa descartada con su motivo.
Error: terminar el curso sin borrar los recursos. Es el error más caro de todos y le pasa a mucha gente. Consejo: haz la limpieza del final de esta lección hoy, no «cuando tenga un rato».
Consejo: el mejor proyecto no es el que usa más servicios, sino el que justifica mejor por qué no usa algunos. Descartar Shield Advanced, descartar EKS y descartar Beanstalk fueron tres de las decisiones más valiosas de este curso.
Consejo: guarda tu solución del proyecto. Dentro de seis meses, releerla te dirá más sobre lo que has aprendido que cualquier examen.
Ejercicios
Ejercicio 1: el proyecto final
El encargo. MercadoFresco crece y el negocio plantea tres cosas a la vez para el próximo año:
- Apertura en Portugal y Francia. Lisboa y Oporto primero, París y Lyon después. Los clientes portugueses y franceses deben tener una experiencia equivalente a la española.
- Aplicación móvil para iOS y Android, con dos funciones nuevas: seguimiento del reparto en tiempo real —el cliente ve el vehículo moverse en el mapa— y recomendaciones de productos personalizadas según su historial de compra.
- Mantener el coste por pedido. El gerente ha sido explícito: puede subir la factura, pero el coste por pedido no debe subir.
Los requisitos, escritos:
| Requisito | Valor | Origen |
|---|---|---|
| Latencia | Primer byte < 200 ms en Lisboa, Oporto, París y Lyon | Producto |
| Residencia del dato | Los datos personales de clientes de la UE permanecen en la UE; geolocalización tratada según el RGPD | Legal |
| Disponibilidad | 99,95 % mensual para el proceso de pedido | Negocio (contrato con proveedores) |
| Volumen | ×4 pedidos: de 180.000 a 720.000 al mes; pico de 3.600 pedidos/hora | Previsión comercial |
| Seguimiento en tiempo real | Posición del repartidor cada 5 s, visible con < 3 s de retraso | Producto |
| Recomendaciones | Actualizadas a diario; no en tiempo real | Producto |
| Presupuesto | Coste por pedido ≤ 0,00934 USD | Gerencia |
| Equipo | Sigue siendo pequeño: 5 personas tras dos contrataciones | Realidad |
Lo que hay que entregar. Diez apartados:
(a) Diagrama de arquitectura. Un diagrama —mermaid, draw.io o papel fotografiado— con las regiones, las cuentas, los componentes y los flujos principales. Debe distinguir lo que ya existe de lo que se añade.
(b) Región o regiones y estrategia multirregión. ¿Una región o varias? ¿Cuáles? ¿Activo-activo, activo-pasivo, o una sola región con distribución en el borde? Justifica con los requisitos de latencia, residencia y disponibilidad, y di explícitamente qué descartas y por qué.
(c) Motores de datos para las dos funciones nuevas. Qué usarías para el seguimiento en tiempo real y qué para las recomendaciones, con el patrón de acceso, el volumen estimado y el coste aproximado de cada uno.
(d) Plan de seguridad y cumplimiento. Identidades, cifrado, secretos, protección perimetral, auditoría, y específicamente cómo tratas los datos de geolocalización de repartidores y clientes bajo el RGPD.
(e) Plan de observabilidad con SLI y SLO. Al menos tres indicadores con su objetivo, su ventana y su presupuesto de error; qué alarma dispara qué, y qué paneles necesita cada perfil.
(f) Pipeline y estrategia de despliegue para el nuevo ámbito multirregión y para la aplicación móvil, que tiene un ciclo de publicación distinto al de la web.
(g) Infraestructura como código y estructura de cuentas. Qué cambia en la organización actual de seis cuentas y cómo se despliega lo mismo en varias regiones sin duplicar código.
(h) Presupuesto mensual estimado con desglose por servicio y el coste por pedido resultante, comparado con el objetivo de 0,00934 USD.
(i) Revisión Well-Architected de tu propia propuesta: los tres riesgos principales que introduces, su pilar y su mitigación.
(j) Plan de migración por fases, con hitos, criterios de avance y qué haces si una fase falla.
Rúbrica de evaluación:
| Apartado | Peso | Se valora |
|---|---|---|
| (a) Diagrama | 8 % | Legible; distingue lo nuevo de lo existente; coherente con el resto de la entrega |
| (b) Regiones | 14 % | Justificación con los tres requisitos; alternativas descartadas con su motivo; coste consciente |
| (c) Motores de datos | 14 % | Patrón de acceso antes que producto; volumen estimado; coste; no usar un motor «porque escala» |
| (d) Seguridad y RGPD | 12 % | Cobertura de las cinco capas; tratamiento explícito de geolocalización; remitir a un profesional donde corresponda |
| (e) Observabilidad | 10 % | SLI medibles y SLO realistas ligados al negocio; presupuesto de error; no confundir métrica con objetivo |
| (f) Pipeline | 10 % | Despliegue progresivo; reversión; ciclo distinto para móvil; multirregión |
| (g) IaC y cuentas | 10 % | Parametrización por región; sin duplicar código; cuentas justificadas |
| (h) Presupuesto | 12 % | Números coherentes y trazables; coste por pedido calculado; comparación con el objetivo |
| (i) Well-Architected | 6 % | Autocrítica real; riesgos que de verdad introduce la propuesta |
| (j) Migración | 4 % | Fases con criterio de avance y plan de vuelta atrás |
Criterio general: una entrega que justifique bien tres alternativas descartadas vale más que una que enumere quince servicios. Y cualquier apartado sin un número es un apartado incompleto.
Ejercicio 2: la decisión de una sola región
Un compañero propone la solución más simple posible para el requisito de latencia: quedarse solo en eu-west-1 y resolver Portugal y Francia con CloudFront y AWS Global Accelerator, sin desplegar nada en otra región.
- ¿Qué requisitos del enunciado sí resuelve esa propuesta y cuáles no?
- Estima la latencia de red desde Lisboa y desde París hasta Irlanda, y di si el requisito de 200 ms es alcanzable.
- ¿Qué le responderías sobre disponibilidad del 99,95 %?
Ejercicio 3: el coste por pedido con ×4 de volumen
Con la factura actual de 1.681,60 USD y 180.000 pedidos, el coste por pedido es de 0,00934 USD. El volumen se multiplica por cuatro hasta 720.000 pedidos.
- Si la factura creciera linealmente, ¿cuánto costaría y cuál sería el coste por pedido?
- Identifica cuatro partidas de la factura que no crecen con el volumen y estima cuánto pesan.
- Estima la factura real con ×4 de pedidos y calcula el coste por pedido. ¿Se cumple el objetivo?
Soluciones
Solución al ejercicio 1: arquitectura de referencia comentada
Esta es una solución válida, no la única. Su valor está en las razones, no en las cajas.
(a) y (b) Regiones y estrategia multirregión.
La propuesta: eu-west-1 (Irlanda) sigue siendo la región principal y única para el estado transaccional, reforzada con CloudFront en todo el borde europeo y AWS Global Accelerator para el tráfico de la aplicación móvil. Se añade eu-west-3 (París) únicamente para dos cosas: el destino de la recuperación ante desastres y, si las mediciones lo justifican, una réplica de lectura del catálogo.
Por qué:
- La latencia se resuelve en el borde, no moviendo la base de datos. El requisito es de primer byte, y el 90 % del contenido de una tienda es estático o cacheable: fotos, catálogo, JavaScript. CloudFront ya lo sirve desde puntos de presencia en Lisboa, Madrid, París y Marsella. Para las llamadas dinámicas de la API, Global Accelerator mete el tráfico en la red troncal de AWS en el punto de presencia más cercano, lo que recorta entre un 20 y un 40 % de la latencia frente a internet público.
- La residencia del dato ya se cumple: Irlanda es la UE. El RGPD exige que los datos permanezcan en la UE o en países con decisión de adecuación, no que estén en el país del cliente. Este es el malentendido más frecuente en este tipo de proyectos.
- Una segunda región activa multiplicaría por dos la complejidad y por casi dos la factura, y el requisito de 99,95 % no la necesita: 99,95 % mensual son 21,9 minutos de indisponibilidad al mes, perfectamente alcanzables con Multi-AZ bien hecho dentro de una sola región.
Alternativas descartadas y por qué:
| Alternativa | Motivo del descarte |
|---|---|
Activo-activo en eu-west-1 y eu-west-3 |
Requiere Aurora Global Database con escritura en dos sitios o partición por país; duplica coste y trabajo; el requisito de disponibilidad no lo pide |
| Una región por país (Irlanda, París, y España en Irlanda) | Fragmenta los datos, complica los informes de Sara, multiplica el gobierno por tres y no mejora la latencia de forma perceptible frente a CloudFront |
eu-south-2 (España) como principal |
Menos servicios disponibles, sin ventaja de latencia real para Francia, y obligaría a migrar todo lo existente |
Warm standby en eu-west-3 |
+35 % de factura para un RTO que el negocio no ha pedido; se reevalúa si el RTO baja de 8 h |
(c) Motores de datos para las funciones nuevas.
Seguimiento del reparto en tiempo real. Dos problemas distintos que la gente suele mezclar:
- Ingerir la posición: 200 repartidores enviando su posición cada 5 segundos son 40 mensajes/segundo, 3,5 millones al día. Es un volumen pequeño y constante.
- Entregarla al cliente: cada cliente con un pedido en curso quiere ver el vehículo moverse con menos de 3 segundos de retraso.
La propuesta:
| Pieza | Servicio | Por qué |
|---|---|---|
| Ingesta desde el móvil del repartidor | AWS IoT Core con MQTT | Diseñado para dispositivos móviles con conexión intermitente; MQTT consume mucha menos batería y datos que HTTP; autenticación por certificado por dispositivo |
| Estado actual de cada reparto | DynamoDB mercadofresco-repartos-posicion, con TTL de 4 horas |
Acceso por clave (id de reparto), escritura constante, lectura de un solo elemento. El TTL borra solo lo que ya no sirve, sin proceso de limpieza |
| Entrega al cliente | API Gateway WebSocket | Conexión persistente; el cliente recibe empujes en lugar de preguntar cada 3 s, lo que evita miles de peticiones inútiles |
| Histórico para análisis | Kinesis Data Firehose → S3 → Athena | El histórico no necesita baja latencia; a S3 sale por céntimos |
Coste estimado: unos 95 USD al mes con este volumen, dominado por las conexiones WebSocket y las escrituras de DynamoDB.
Alternativa descartada: hacer que la aplicación pregunte por HTTP cada 3 segundos. Con 3.000 pedidos en curso serían 1.000 peticiones por segundo contra la API, es decir, más tráfico que toda la tienda, y una batería del móvil agotada en dos horas.
Recomendaciones de productos. Aquí la clave está en un requisito que el enunciado da y que mucha gente pasa por alto: «actualizadas a diario; no en tiempo real». Eso cambia toda la solución.
| Pieza | Servicio | Por qué |
|---|---|---|
| Datos de entrada | Redshift Serverless, que ya tiene el histórico de compras | No hay que construir ninguna canalización nueva |
| Cálculo | Trabajo nocturno en Redshift + una Lambda que escribe el resultado | Con datos diarios, un cálculo por lotes de 20 minutos basta |
| Almacenamiento del resultado | DynamoDB mercadofresco-recomendaciones, clave = id de cliente |
Lectura por clave en un dígito de milisegundos; una escritura al día por cliente |
| Servicio al cliente | La API existente lee de DynamoDB | Cero infraestructura nueva en el camino crítico |
Coste estimado: unos 40 USD al mes.
Alternativa descartada: Amazon Personalize. Es el servicio específico para esto y probablemente daría mejores recomendaciones. Se descarta en la primera versión por tres razones: cuesta bastante más, añade un servicio nuevo que mantener a un equipo de cinco personas, y no hay todavía una medida de si las recomendaciones funcionan. La decisión escrita: empezar con reglas sencillas —«compraron esto también», «vuelves a necesitar esto»— sobre datos que ya están, medir la conversión durante tres meses, y entonces decidir si Personalize compensa. Introducir aprendizaje automático antes de tener una métrica de éxito es la forma más cara de no saber si algo sirve.
(d) Seguridad y cumplimiento.
Lo existente se mantiene y se extiende: Identity Center, alias/mercadofresco-datos para todo lo nuevo, secretos en Secrets Manager, WAF en CloudFront y en el ALB, Shield Standard, CloudTrail y Config centralizados en 444455556666.
Lo que se añade por la aplicación móvil:
- Amazon Cognito para la identidad de los clientes, con inicio de sesión federado. Los tokens caducan; nada de claves en la aplicación.
- Certificados por dispositivo en IoT Core para los repartidores, con política que solo permite publicar en su propio tema. Un repartidor no puede publicar la posición de otro.
- Limitación de velocidad y protección de bots en el WAF de la API móvil, que es el nuevo objetivo obvio.
Y la parte delicada, la geolocalización:
| Cuestión | Tratamiento propuesto |
|---|---|
| ¿Es dato personal? | Sí, sin discusión. La posición de una persona identificable es dato personal; la de un repartidor identificado lo es además en contexto laboral, con normativa adicional |
| Base legal | Ejecución del contrato para el reparto; no consentimiento genérico. Para el repartidor, la vigilancia laboral tiene requisitos propios: información previa, proporcionalidad y consulta a la representación de los trabajadores |
| Minimización | Se guarda solo la posición del reparto en curso, con TTL de 4 horas en DynamoDB. No se construye un histórico de movimientos del repartidor |
| Histórico | Solo agregados y anonimizados: tiempos medios por zona, sin identificar a la persona |
| Cifrado | En reposo con KMS y en tránsito con TLS y MQTT sobre TLS, extremo a extremo |
| Acceso | Rol específico y mínimo; cada consulta queda en CloudTrail |
| Derechos del interesado | Procedimiento escrito de acceso, rectificación y supresión, con el borrado propagado a S3 y Redshift |
Y la advertencia que debe figurar en la entrega y que forma parte de la nota: esto es un diseño técnico, no un dictamen jurídico. El tratamiento de geolocalización de trabajadores es uno de los puntos más sensibles del RGPD y de la normativa laboral, exige evaluación de impacto y debe revisarlo un profesional de protección de datos antes de ponerse en producción. Una propuesta que resuelve la geolocalización sin mencionar esto está incompleta por muy buena que sea técnicamente.
(e) Observabilidad con SLI y SLO.
| SLI | Definición medible | SLO | Ventana | Presupuesto de error |
|---|---|---|---|---|
| Disponibilidad del pedido | Peticiones a /pedido con respuesta 2xx o 3xx ÷ total |
99,95 % | 30 días | 21,9 min/mes |
| Latencia de confirmación | p99 de TiempoConfirmacionPedido |
< 900 ms | 30 días | 1 % de peticiones |
| Frescura del seguimiento | p95 del retraso entre emisión y visualización | < 3 s | 7 días | 5 % de actualizaciones |
| Éxito del reparto | Repartos entregados en el plazo ÷ total | > 98 % | 30 días | Métrica de negocio |
Con tres decisiones importantes: las alarmas se ponen sobre la tasa de consumo del presupuesto de error, no sobre umbrales instantáneos, para no despertar a nadie por un pico de 30 segundos; los paneles se separan por perfil —mercadofresco-produccion para el turno de guardia, mercadofresco-negocio para Sara y gerencia, y uno nuevo mercadofresco-movil—; y el coste por pedido sigue en el panel de negocio, junto a los pedidos, como se estableció en 11-02.
(f) Pipeline y despliegue. Se mantiene pipeline-mercadofresco-tienda con blue/green y reversión, y se añaden tres cosas: una etapa por región para lo que se despliegue en eu-west-3, siempre desplegando primero en la región secundaria y solo después en la principal; un pipeline propio para la API móvil, que se versiona de forma independiente porque las aplicaciones publicadas en las tiendas no se pueden revertir —una versión antigua puede quedar instalada meses, así que la API debe mantener compatibilidad hacia atrás durante al menos dos versiones—; y banderas de funcionalidad para activar el seguimiento en tiempo real por ciudad, lo que permite abrir Lisboa sin tocar el código.
(g) IaC y estructura de cuentas. La organización de seis cuentas no cambia: sigue siendo la adecuada, y el Entorno sigue siendo la mejor dimensión de separación. Lo que cambia es la parametrización: las plantillas red-mercadofresco.yaml y aplicacion-mercadofresco.yaml y las pilas del CDK reciben la región como parámetro, con ss-mercadofresco-linea-base extendido a la nueva región. Un solo repositorio, una sola definición, dos destinos.
La única cuenta que se plantea añadir es una de datos para la analítica y las recomendaciones, y se descarta por ahora: con cinco personas, una cuenta más es más gobierno del que aporta. Se revisará si el equipo de datos crece.
(h) Presupuesto estimado.
| Concepto | Actual | Con ×4 y las funciones nuevas | Comentario |
|---|---|---|---|
| Aurora | 342,60 | 890,00 | Escala casi con el volumen; +1 lector |
| Fargate | 262,40 | 880,00 | Escala con el volumen |
| CloudWatch | 214,90 | 420,00 | Crece menos que lineal con retención bien puesta |
| NAT Gateway | 243,80 | 290,00 | El 81 % es cargo fijo: no escala |
| ElastiCache | 71,83 | 185,00 | Nodo mayor; con reserva |
| S3 | 128,90 | 310,00 | Escala con fotos y registros |
| CloudFront | 62,80 | 240,00 | Escala con el tráfico; más regiones de borde |
| Redshift Serverless | 104,50 | 190,00 | Más datos, mismo patrón |
| DynamoDB | 58,40 | 240,00 | Incluye posición y recomendaciones |
| ALB y VPC | 222,80 | 330,00 | Mayoritariamente cargo fijo |
| IoT Core + API Gateway WebSocket | 0 | 95,00 | Nuevo |
| Lambda y mensajería | 68,70 | 210,00 | Escala con el volumen |
| Cognito | 0 | 45,00 | Nuevo; primeros usuarios gratuitos |
| Gobierno, seguridad y CI/CD | 190,10 | 240,00 | Apenas escala |
| Global Accelerator | 0 | 35,00 | Nuevo; cargo fijo + transferencia |
| Total | 1.681,60 | ≈ 4.600,00 | |
| Pedidos/mes | 180.000 | 720.000 | ×4 |
| Coste por pedido | 0,00934 USD | 0,00639 USD | −31,6 % |
El objetivo se cumple con holgura, y la razón es exactamente la que 11-02 anticipaba: hay una parte importante de la factura —NAT, ALB, endpoints, gobierno, observabilidad base— que no crece con el volumen, y al repartirse entre cuatro veces más pedidos hace bajar el coste unitario. Multiplicar el negocio por cuatro multiplica la factura por 2,7.
(i) Los tres riesgos principales de esta propuesta:
| # | Riesgo | Pilar | Mitigación |
|---|---|---|---|
| 1 | Una sola región para el estado transaccional. Una caída regional deja fuera de servicio a tres países en lugar de a uno, y el RTO de 8 horas pasa a ser mucho más caro en reputación | Fiabilidad | Reevaluar el RTO con el negocio ahora que hay tres países; si baja de 4 h, pasar a luz piloto en eu-west-3 (+12 % de factura, calculado en 11-01) |
| 2 | La geolocalización de repartidores es el punto de mayor exposición regulatoria de todo el sistema | Seguridad | Minimización con TTL de 4 h, sin histórico personal, evaluación de impacto y revisión obligatoria por un profesional de protección de datos antes de producción |
| 3 | Cinco personas para tres países, dos plataformas y seis servicios nuevos. El riesgo mayor de esta propuesta no es técnico | Excelencia operativa | Runbooks y guardia definida —pendientes desde 11-01—; abrir por fases; descartar Personalize y la cuenta de datos en la primera versión; automatizar antes de crecer |
(j) Plan de migración por fases:
| Fase | Contenido | Criterio para avanzar | Si falla |
|---|---|---|---|
| 0 (2 sem) | Global Accelerator y ajuste de CloudFront; medir latencia real desde Lisboa y París | Primer byte < 200 ms medido | Reevaluar eu-west-3 para lectura |
| 1 (4 sem) | API móvil y Cognito; aplicación sin seguimiento ni recomendaciones | Aplicación en tiendas, 500 usuarios, sin incidencias 2 semanas | Retrasar; la web sigue funcionando |
| 2 (4 sem) | Seguimiento en tiempo real, solo en Madrid | p95 de frescura < 3 s; batería aceptable; validación de protección de datos | Desactivar la bandera; nadie se entera |
| 3 (3 sem) | Recomendaciones diarias, con medición de conversión | Conversión medible durante 3 semanas | Desactivar; se pierde una función, no un pedido |
| 4 (6 sem) | Apertura de Lisboa y Oporto | Operación estable 3 semanas y SLO cumplidos | Parar la expansión; España no se ve afectada |
| 5 (6 sem) | París y Lyon | Ídem | Ídem |
| 6 (continuo) | Prueba de carga a 3.600 pedidos/hora, simulacro de recuperación, revisión Well-Architected | Riesgos altos ≤ 5 | Bloquea la fase 5 |
Dos principios que gobiernan el plan: cada fase es reversible sin afectar a lo que ya funciona —banderas de funcionalidad, no despliegues irreversibles— y la prueba de carga es requisito para abrir el segundo país, no una tarea que se hace si sobra tiempo. Es exactamente el hallazgo de riesgo alto que 11-01 dejó abierto.
Solución al ejercicio 2
(1) Qué resuelve y qué no. La propuesta de una sola región resuelve: la residencia del dato, porque Irlanda es la UE; el coste, porque es con diferencia la opción más barata; la simplicidad operativa, decisiva con cinco personas; y la latencia del contenido estático, que es el grueso de una tienda. No resuelve por sí sola: la latencia de las peticiones dinámicas si no se añade Global Accelerator o algún mecanismo de aceleración; y no aporta nada frente a una caída regional completa, que sigue siendo el riesgo número uno de la propuesta.
(2) Latencia estimada. El ida y vuelta de red desde Lisboa hasta eu-west-1 ronda los 40-55 ms, y desde París los 25-35 ms. Sobre eso hay que sumar el establecimiento de TLS —que con reutilización de conexión y TLS 1.3 se amortiza— y el tiempo de proceso en el servidor, que en MercadoFresco está por debajo de 900 ms en el p99 pero mucho más bajo en la mediana. El requisito de 200 ms de primer byte es perfectamente alcanzable para contenido servido desde CloudFront —donde la latencia es la del punto de presencia local, del orden de 10-20 ms— y alcanzable para la API dinámica con Global Accelerator y conexiones reutilizadas. Lo que no sería alcanzable es servir cada petición dinámica desde Irlanda sin caché ni aceleración y con una consulta lenta detrás.
(3) Sobre el 99,95 %. Aquí hay que ser preciso con los números, porque es donde la conversación se suele torcer. 99,95 % mensual son 21,9 minutos de indisponibilidad al mes. Eso es perfectamente alcanzable en una sola región con Multi-AZ bien hecho: ALB en dos zonas, Aurora con conmutación por debajo de 30 segundos, tareas repartidas y despliegues sin corte. Lo que una sola región no cubre es una caída regional completa, que es un suceso raro pero real.
La respuesta honesta al compañero es que tiene razón en la propuesta y le falta una frase: la arquitectura de una sola región cumple el SLO comprometido, y el riesgo residual —una caída regional— debe estar escrito, cuantificado y aceptado por quien firma el contrato de 99,95 %, exactamente como se hizo en 11-01 con el RPO regional de 6 horas. Si el negocio no acepta ese riesgo residual ahora que hay tres países en juego, entonces la conversación cambia y hay que presupuestar luz piloto en eu-west-3: +12 % de factura, unos 550 USD al mes con el nuevo tamaño.
Solución al ejercicio 3
(1) Crecimiento lineal. Sería 1.681,60 × 4 = 6.726,40 USD, y el coste por pedido se mantendría exactamente igual en 0,00934 USD, porque el crecimiento lineal es la definición de coste unitario constante.
(2) Cuatro partidas que no crecen con el volumen:
| Partida | Importe actual | Por qué no crece |
|---|---|---|
| NAT Gateway | 243,80 USD | El 81 % es cargo fijo por hora; solo crecen los datos procesados |
| ALB y endpoints de VPC | 222,80 USD | Cargo fijo por hora y por AZ; las unidades de capacidad crecen poco |
| Gobierno y seguridad (Config, CloudTrail, GuardDuty, Organizations) | 132,90 USD | Depende del número de cuentas y recursos, no de pedidos |
| CI/CD (CodeBuild, Pipeline, ECR) | 26,40 USD | Depende de los despliegues, no del tráfico |
| Total que apenas escala | 625,90 USD | 37,2 % de la factura actual |
A esas cuatro habría que añadir la base fija de CloudWatch —paneles, alarmas, métricas personalizadas— y la parte de Redshift que depende del número de informes y no del volumen de pedidos.
(3) Estimación realista.
Parte que escala con el volumen ...... 1.055,70 x 4 = 4.222,80 USD
Parte que apenas escala ............. 625,90 x 1,2 = 751,08 USD
-------------
Subtotal 4.973,88 USD
Ajuste por eficiencia de escala (cache, tramos, reservas, -8 %) -397,91
-------------
Estimacion ~4.576,00 USDLo que coincide, dentro del margen de una estimación, con los 4.600 USD del apartado (h) de la solución de referencia.
Coste por pedido = 4.600,00 / 720.000 = 0,00639 USD Objetivo ......................................... 0,00934 USD
Se cumple el objetivo con un 31,6 % de margen. Y la conclusión de fondo es la que da sentido a todo el módulo 11: el coste por pedido baja al crecer porque el 37 % de la factura es infraestructura fija que se reparte entre más pedidos. Es la razón por la que presentar el coste absoluto en la reunión mensual conduce a decisiones equivocadas, y por la que la métrica unitaria de 11-02 es la que hay que enseñarle al gerente. Con una advertencia: esta ventaja solo existe si la parte fija se mantiene bajo control. Si al crecer se añaden cuentas, regiones, clústeres y herramientas sin criterio, la parte fija crece con ellos y la economía de escala desaparece.
Los caminos de certificación de AWS
Este curso no prepara para ninguna certificación en concreto, pero cubre buena parte del temario de varias. El mapa:
| Certificación | Nivel | A quién le conviene | Módulos de este curso que la cubren |
|---|---|---|---|
| Cloud Practitioner (CLF) | Fundacional | Perfiles no técnicos, comercial, gestión de proyecto; o como primer paso | 1, 2, y partes de 4, 5 y 11. Este curso la supera con creces en profundidad técnica |
| Solutions Architect – Associate (SAA) | Asociado | El destino natural tras este curso. Diseño de arquitecturas | 1 a 11, casi por completo. Faltaría profundizar en migraciones y redes híbridas |
| Developer – Associate (DVA) | Asociado | Quien escribe el código que corre en AWS | 2, 4, 5, 6, 7, 8, 10. Faltaría más SDK, Cognito y API Gateway |
| SysOps Administrator – Associate (SOA) | Asociado | Operación, monitorización y automatización | 1, 3, 5, 9, 11. Faltaría Systems Manager en profundidad y el examen tiene laboratorios prácticos |
| Solutions Architect – Professional (SAP) | Profesional | Arquitectos con dos o más años de experiencia real | Base cubierta; exige además multicuenta avanzado, migraciones y escenarios muy largos |
| DevOps Engineer – Professional (DOP) | Profesional | Quien vive en el pipeline | 8, 9, 10 son el núcleo; exige más automatización y recuperación |
| Especialidad: Security | Especialidad | Seguridad en la nube | 4, 5, 9 dan la base; faltaría respuesta a incidentes y criptografía avanzada |
| Especialidad: Advanced Networking | Especialidad | Redes complejas e híbridas | 3 da la base; faltaría Transit Gateway, Direct Connect y BGP |
| Especialidad: Machine Learning | Especialidad | Ciencia de datos e IA | No cubierta por este curso |
Tres consejos sobre certificaciones, dichos sin rodeos:
- La Associate de arquitecto es la que mejor relación tiene entre esfuerzo y utilidad si ya has hecho este curso. Con dos o tres semanas de repaso enfocado y exámenes de práctica, es alcanzable.
- Una certificación no sustituye a haber construido algo. Abre puertas en procesos de selección y no enseña a decidir. Las decisiones difíciles de este curso —descartar EKS, descartar Shield Advanced, elegir un año en lugar de tres— no salen en ningún examen.
- Si vas a certificarte, hazlo por el temario, no por el sello. El valor real está en las áreas que el examen te obliga a estudiar y que tú nunca habrías tocado por tu cuenta.
Recursos oficiales para seguir
| Recurso | Qué es | Para qué usarlo |
|---|---|---|
| Documentación de AWS | Referencia oficial por servicio | La fuente de verdad. Empieza siempre por la guía del desarrollador, no por el blog |
| AWS Architecture Center | Patrones de referencia y diagramas | Ver cómo se resuelven problemas parecidos al tuyo |
| AWS Well-Architected Labs | Laboratorios prácticos por pilar | El mejor complemento de 11-01, y son gratuitos |
| Workshops de AWS | Talleres guiados por servicio | Aprender un servicio nuevo con las manos en dos horas |
| Blog de arquitectura de AWS | Casos y patrones | Suscríbete; una entrada a la semana mantiene el nivel |
| Calculadora de precios de AWS | Estimación previa | Úsala antes de crear nada, no después |
| What's New / anuncios | Cambios y servicios nuevos | Revisión mensual, no diaria: el ruido es enorme |
| Guías de referencia de seguridad | Prescriptivo sobre seguridad y multicuenta | Cuando montes la organización de verdad |
| Prescriptive Guidance | Patrones y hojas de ruta | Migraciones y modernización |
Y un consejo sobre cómo leerlos: la documentación de AWS es enorme y está pensada para consultarla, no para leerla. La forma productiva de usarla es tener un problema concreto, buscar la página exacta y leerla entera, incluida la sección de cuotas y la de precios, que son las dos que más disgustos evitan.
Lo que este curso no ha tocado
Once módulos y unas doscientas horas de AWS después, esto es lo que queda fuera y es el siguiente paso natural:
| Área | Servicios | Por qué importa | Cuándo abordarla |
|---|---|---|---|
| Analítica y datos | Glue, Athena en profundidad, EMR, Kinesis, Lake Formation, QuickSight | Es la evolución natural de lo que hace Sara con Redshift: un lago de datos de verdad | Cuando los informes dejen de caber en un almacén |
| IA generativa y aprendizaje automático | Bedrock, SageMaker, Comprehend, Textract, Personalize | Recomendaciones, búsqueda semántica en el catálogo, atención al cliente | Cuando haya una métrica de éxito, no antes |
| IoT | IoT Core, Greengrass, SiteWise | Vehículos de reparto, sensores de temperatura en la cadena de frío | Apareció ya en el proyecto final |
| Migraciones | DMS, MGN, Migration Hub, Snow Family | Traer sistemas existentes desde un centro de datos | Cuando adquieras una empresa o migres un ERP |
| Redes avanzadas | Transit Gateway, Direct Connect, PrivateLink, Cloud WAN | Conectar decenas de VPC, cuentas y oficinas | Cuando la topología deje de caber en un diagrama |
| Seguridad avanzada | GuardDuty en profundidad, Security Hub, Macie, Detective, Inspector, Firewall Manager | Detección, correlación y respuesta a escala | Cuando haya alguien dedicado a seguridad |
| Contenedores avanzados | EKS en producción, App Mesh, Karpenter, GitOps con Argo | Si algún día se cumplen los criterios de 10-03 | Cuando el equipo de plataforma tenga cuatro personas |
| Aplicaciones y usuarios | Cognito, AppSync, Amplify, API Gateway en profundidad | El frente de las aplicaciones móviles y las API públicas | Apareció ya en el proyecto final |
| Resiliencia | Fault Injection Service, Resilience Hub, Elastic Disaster Recovery | Probar de verdad lo que 11-01 dejó pendiente | Ya: es el riesgo alto que sigue abierto |
Y el orden que tiene más sentido después de este curso: primero Resiliencia, porque cierra el riesgo abierto más grave; después Analítica, porque es donde está el valor de negocio inmediato; y luego lo que pida el problema que tengas delante.
Qué sabes hacer ahora
Al empezar este curso probablemente sabías que AWS existía y que «tiene muchos servicios». Ahora sabes hacer cosas concretas:
- Diseñar una arquitectura de tres capas en la nube, con red aislada, cómputo elástico y datos gestionados, y explicar cada decisión.
- Elegir el motor de datos adecuado a partir del patrón de acceso en lugar de por costumbre: relacional, clave-valor, en memoria, columnar.
- Poner una aplicación en contenedores sin gestionar servidores, con autoescalado, despliegue progresivo y reversión automática.
- Aislar y proteger: identidades sin credenciales permanentes, cifrado con claves propias, secretos rotados, WAF y grupos de seguridad con mínimo privilegio.
- Saber qué está pasando: métricas, registros, trazas, alarmas y paneles que responden a preguntas de negocio y no solo de infraestructura.
- Desacoplar con colas, temas, buses y máquinas de estados, y hacerlo bien: idempotencia, reintentos, colas de mensajes fallidos y compensación.
- Construir un pipeline que lleve un commit a producción sin intervención manual y que sepa volver atrás solo.
- Describir toda la infraestructura en código y desplegarla en varias cuentas y regiones sin copiar y pegar.
- Gobernar una organización multicuenta con unidades organizativas, políticas de control y una línea base común.
- Auditar lo construido con método —seis pilares, hallazgos, riesgos y plan priorizado— y documentar decisiones con sus alternativas descartadas.
- Leer una factura de AWS, repartirla por entorno y componente, encontrar lo que sobra y ponerle límites.
- Y sobre todo: decir que no. Descartar Shield Advanced con criterio, descartar EKS con seis condiciones escritas, descartar Beanstalk, descartar Personalize hasta tener una métrica. Un arquitecto se reconoce por lo que deja fuera.
La limpieza final, en el orden correcto
Si has seguido las prácticas en una cuenta real, esto no es opcional. El orden importa, porque muchos recursos no se pueden borrar mientras otros dependan de ellos.
Antes de empezar, dos comprobaciones: revisa Cost Explorer con granularidad diaria para saber qué está costando de verdad, y filtra por la etiqueta Proyecto=mercadofresco en Tag Editor para tener el inventario completo. Cambia de región y repite: lo olvidado suele estar en us-east-1.
Fase 1 — Detener lo que consume ahora (minutos).
REGION=eu-west-1
# Servicios de ECS a cero tareas antes de borrar nada
aws ecs update-service --region $REGION --cluster ecs-mercadofresco \
--service svc-mercadofresco-tienda-fg --desired-count 0
aws ecs update-service --region $REGION --cluster ecs-mercadofresco \
--service svc-mercadofresco-trabajadores --desired-count 0
# Grupos de trabajo de Redshift Serverless (lo mas caro si se olvida)
aws redshift-serverless delete-workgroup --region $REGION \
--workgroup-name wg-mercadofresco-analitica
# Clusteres de EKS del ejercicio de 10-03: 73 USD/mes cada uno
aws eks list-clusters --region $REGIONFase 2 — Cómputo y contenedores. Servicios de ECS, luego el clúster; funciones Lambda; instancias EC2 —terminar, no parar, porque una instancia parada sigue pagando su volumen EBS—; grupos de Auto Scaling; y las imágenes de ECR, que se cobran por GB almacenado.
Fase 3 — Balanceo y entrega. Oyentes del ALB, luego el ALB, luego los grupos de destino. La distribución de CloudFront hay que deshabilitarla primero y esperar a que se propague antes de borrarla, lo que tarda del orden de 15 minutos. Las direcciones IP elásticas se liberan aparte: una IP sin asociar cuesta más que una asociada.
Fase 4 — Datos. Aquí conviene pararse a pensar, porque es irreversible. Clústeres de Aurora y RDS con --skip-final-snapshot solo si de verdad no quieres conservar nada; grupos de réplica de ElastiCache; tablas de DynamoDB; y los buckets de S3, que hay que vaciar antes de borrar, incluidas las versiones antiguas y los marcadores de borrado si el versionado está activo, que es la causa número uno de «no puedo borrar este bucket».
Fase 5 — Red. El orden es estricto y no admite atajos:
endpoints de VPC -> NAT Gateway -> liberar IP elasticas -> tablas de rutas -> subredes -> grupos de seguridad -> puerta de enlace de internet (desasociar y borrar) -> VPC
Los endpoints de interfaz son la fuga más silenciosa: cuestan unos 0,011 USD por hora, por AZ y por endpoint, aunque no pase un solo byte. Siete endpoints en dos AZ son 112 USD al mes por nada.
Fase 6 — Observabilidad y gobierno. Alarmas y paneles de CloudWatch; grupos de registros, que siguen costando almacenamiento indefinidamente; canarios de Synthetics; el grabador de Config, que cobra por elemento de configuración; los trails de CloudTrail más allá del primero, que es gratuito; y las reglas de EventBridge.
Fase 7 — Seguridad y gestión. Programar el borrado de las claves de KMS, con un periodo de espera de entre 7 y 30 días —cuestan 1 USD al mes mientras tanto—; secretos de Secrets Manager, también con periodo de recuperación; parámetros avanzados de Parameter Store, que son los únicos que cobran; y las Web ACL de WAF, que cuestan 5 USD al mes más 1 por regla aunque no estén asociadas a nada.
Fase 8 — Comprobación final. Cuatro pasos que nadie hace y que evitan la sorpresa del mes siguiente:
- Espera 48 horas y vuelve a mirar Cost Explorer con granularidad diaria. Lo que siga apareciendo es lo que se te ha olvidado.
- Recorre las regiones, especialmente
us-east-1, donde acaban las Web ACL de CloudFront y muchas pruebas. - Revisa Trusted Advisor, que lista recursos huérfanos.
- Deja un presupuesto de 1 USD activo con aviso al 100 %. Es tu red de seguridad permanente y cuesta cero.
Y lo que no hay que borrar: la cuenta en sí, si quieres seguir practicando; el trail de gestión, que es gratuito; y el presupuesto de vigilancia. Cerrar la cuenta es la opción nuclear y solo tiene sentido si no vas a volver.
Conclusión
Aquí termina el curso, y merece la pena mirar el camino completo antes de cerrar.
Empezaste con una cuenta vacía y una tienda que se caía los viernes. Terminas con una arquitectura que sirve a cuatro ciudades con 900 pedidos por hora en el pico, que se despliega casi cinco veces por semana en horario laboral, que se restaura en cuatro minutos, que está descrita íntegramente en código, gobernada en seis cuentas, auditada con los seis pilares del marco Well-Architected y presupuestada hasta el céntimo por pedido. Los cinco problemas que abrieron el curso están resueltos y cada uno tiene un número al lado.
Pero lo que te llevas no son los servicios. Los servicios cambian: la mitad de las pantallas de este curso serán distintas dentro de tres años y habrá nombres nuevos que hoy no existen. Lo que no cambia es el método, y eso es lo que has practicado once módulos seguidos: empezar por el problema y no por la tecnología; elegir el motor de datos por su patrón de acceso; medir antes de optimizar y optimizar antes de comprometer; probar la recuperación en lugar de suponerla; automatizar lo que se hace dos veces; escribir las decisiones con sus alternativas descartadas; y poner un número al lado de cada afirmación.
Y con ese método viene su parte menos vistosa y más valiosa: la capacidad de decir que no. Este curso descartó Shield Advanced con criterio, descartó EKS con seis condiciones escritas que lo cambiarían, descartó Elastic Beanstalk, descartó una segunda región activa, descartó Personalize hasta tener una métrica de éxito y descartó un compromiso a tres años que habría condicionado la arquitectura. Ninguna de esas decisiones sale en un diagrama y todas ellas son el trabajo real de un arquitecto. Se te reconocerá antes por lo que dejes fuera con argumentos que por lo que consigas encajar.
Queda un último consejo, y es el único que de verdad importa a partir de aquí: monta algo tuyo. No otro laboratorio guiado, ni otro tutorial. Algo pequeño y real, que resuelva un problema que te importe: la web de un club, un servicio para automatizar algo tedioso, un panel con datos que te interesen. Ponlo en una cuenta propia con MFA y un presupuesto de cinco dólares. Rómpelo. Arréglalo a las once de la noche. Descubre por ti mismo que las copias no funcionaban, que aquel grupo de seguridad estaba abierto y que el endpoint que dejaste encendido te ha costado catorce dólares. Ese día habrás aprendido más que en cualquier módulo de este curso, porque el error propio se recuerda y el ajeno se olvida.
MercadoFresco, mientras tanto, sigue repartiendo producto fresco en veinticuatro horas. Los viernes por la tarde, cuando entran novecientos pedidos por hora, las tareas ya están arriba desde las 16:45 porque alguien programó ese escalado. Nadie se entera. Y esa es exactamente la señal de que el trabajo está bien hecho: la mejor arquitectura es la que nadie nota.
Gracias por llegar hasta aquí. Ahora borra los recursos y ve a construir algo.
Curso de AWS
Módulo 1: Introducción a AWS
- ¿Qué es AWS?
- Configuración de tu cuenta de AWS
- Infraestructura global de AWS
- Consola de administración de AWS
- AWS CLI y SDKs
Módulo 2: Servicios principales de AWS
Módulo 3: Redes y entrega de contenido
- Amazon VPC
- Grupos de seguridad y listas de control de acceso
- Elastic Load Balancing
- Amazon CloudFront
- Route 53
Módulo 4: Seguridad e identidad
- AWS Identity and Access Management (IAM)
- AWS Key Management Service (KMS)
- Secrets Manager y Parameter Store
- AWS Shield
- AWS WAF
Módulo 5: Monitorización y gestión
- Amazon CloudWatch
- AWS X-Ray y trazabilidad distribuida
- AWS CloudTrail
- AWS Config
- AWS Trusted Advisor
Módulo 6: Bases de datos
- Cómo elegir la base de datos adecuada
- Amazon DynamoDB
- Amazon Aurora
- Amazon Redshift
- Amazon ElastiCache
Módulo 7: Integración de aplicaciones
- Amazon SQS
- Amazon SNS
- Amazon EventBridge
- AWS Step Functions
- Patrones de integración: idempotencia, reintentos y colas de mensajes fallidos
