Lab práctico · Semana 11: Repaso final: simulacros, técnicas de examen y visión transversal
Diseño de arquitectura: de los requisitos a la estimación de costes
Qué vas a construir
Nada en tu cuenta de AWS: vas a diseñar, que es exactamente lo que evalúa el examen y lo que harás en una entrevista de arquitecto. Para cada uno de tres escenarios de empresa:
- Extraer los requisitos (funcionales, no funcionales y restricciones) y detectar el que decide.
- Proponer una arquitectura con servicios de AWS y dibujarla (en papel, en draw.io o en Mermaid).
- Justificarla con los seis pilares del AWS Well-Architected Framework.
- Estimarla con la AWS Pricing Calculator, que es gratuita y no necesita cuenta.
Después compara con la solución de referencia (en los desplegables). No hay una única respuesta correcta: si tu diseño difiere, pregúntate si cumple todos los requisitos y si el calificador (coste, esfuerzo operativo…) te favorece o no.
Antes de empezar
- Ten a mano las tablas de decisión del módulo 11 y, si hace falta, los módulos 1-10.
- Abre la AWS Pricing Calculator en otra pestaña. Usa la región Europe (Spain) — eu-south-2. Si un servicio no aparece en esa región, usa Europe (Ireland) — eu-west-1 y anótalo.
- Plantilla para cada escenario (cópiala en un documento):
| Apartado | Tu respuesta |
|---|---|
| Requisitos funcionales | |
| Requisitos no funcionales (disponibilidad, rendimiento, seguridad, RPO/RTO) | |
| Restricciones (presupuesto, equipo, plazos, «sin cambiar el código») | |
| Requisito que decide | |
| Servicios elegidos y por qué | |
| Alternativas descartadas y por qué | |
| Justificación por pilares | |
| Coste mensual estimado y supuestos |
Paso 1: aprende a usar la Pricing Calculator (15 min)
- Entra en calculator.aws y pulsa Create estimate.
- Busca un servicio (por ejemplo, Amazon EC2), pulsa Configure y elige la región Europe (Spain).
- Rellena los datos: número de instancias, tipo, horas de uso, opción de compra (On-Demand, Savings Plans…), almacenamiento EBS.
- Pulsa Save and add service y repite con el resto de servicios.
- Agrupa los servicios (Create group) por nivel: «Web», «Datos», «Red».
- En My estimate verás el coste mensual y el de 12 meses. Usa Share para obtener un enlace público y Export para descargar CSV o PDF.
Truco: haz la estimación dos veces, una con On-Demand y otra con Savings Plans o instancias reservadas para la parte estable. La diferencia es un argumento de coste muy potente.
Paso 2: escenario 1, tienda online con picos
Empresa: «Calzados Ribera», tienda online española de zapatillas. Hoy tiene un único servidor en un proveedor de alojamiento: PHP con MySQL en la misma máquina.
Requisitos:
- Tráfico normal: unos 200 usuarios simultáneos. En lanzamientos y en el Black Friday, 10 veces más durante unas horas.
- La web debe seguir funcionando si falla un centro de datos (una AZ). Una caída de 1-2 minutos durante un failover de base de datos es aceptable.
- Catálogo de 50.000 imágenes de producto (unos 20 GB) que se sirven a clientes de España, Portugal y Francia.
- Los datos de pago los gestiona una pasarela externa, pero hay datos personales de clientes en la base de datos: cifrado en reposo obligatorio.
- Han sufrido intentos de inyección SQL y bots que prueban contraseñas.
- Equipo de 2 desarrolladores sin experiencia en Kubernetes. Quieren el menor esfuerzo operativo posible sin reescribir la aplicación entera.
- Presupuesto ajustado: quieren saber el coste mensual base.
Tu tarea: completa la plantilla, dibuja el diagrama y haz la estimación.
Solución de referencia: escenario 1
Requisito que decide: alta disponibilidad Multi-AZ con picos de 10x y LEAST operational overhead sin reescribir.
Arquitectura:
flowchart LR
U["Clientes"] --> R53["Route 53"]
R53 --> CF["CloudFront + AWS WAF"]
CF -->|"/static"| S3["S3: imágenes<br/>(OAC)"]
CF -->|"dinámico"| ALB["Application Load Balancer<br/>subredes públicas, 2 AZ"]
ALB --> ASG["Auto Scaling group<br/>EC2 PHP en subredes privadas<br/>AZ a y AZ b"]
ASG --> EC["ElastiCache<br/>sesiones y caché"]
ASG --> DB["Aurora MySQL<br/>escritor + réplica en otra AZ<br/>cifrado con KMS"]
ASG --> SM["Secrets Manager"]
- Route 53 para el dominio y CloudFront delante de todo: sirve las imágenes desde S3 (acceso solo vía Origin Access Control) y cachea lo que se pueda de la parte dinámica. Reduce la carga del origen en los picos y el coste de transferencia.
- AWS WAF asociado a CloudFront con reglas gestionadas contra SQLi y una regla basada en frecuencia (rate-based) contra los bots de contraseñas. Shield Standard viene incluido.
- ALB en dos AZ y un Auto Scaling group de EC2 (launch template con la AMI de la aplicación) en subredes privadas de dos AZ, con target tracking sobre la CPU o las peticiones por destino. Scheduled scaling antes de los lanzamientos conocidos.
- La aplicación pasa a ser stateless: sesiones en ElastiCache. Es el único cambio de código relevante (configuración del gestor de sesiones de PHP).
- Aurora MySQL (compatible con la MySQL actual, migración homogénea) con una réplica en otra AZ: failover automático en torno a un minuto. Cifrado en reposo con KMS. Credenciales en Secrets Manager con rotación.
- Salida a Internet de las instancias privadas (actualizaciones): NAT Gateway. Para reducir costes en la fase inicial se puede usar un único NAT, sabiendo que es un punto único de fallo solo para la salida, no para el servicio a clientes.
Alternativas descartadas:
- Elastic Beanstalk: sería válido y aún más sencillo de operar; es una buena respuesta alternativa si el equipo no quiere gestionar el ASG.
- ECS con Fargate: excelente a medio plazo, pero exige contenerizar la aplicación.
- DynamoDB: obligaría a reescribir el acceso a datos relacional.
- RDS MySQL Multi-AZ: válida y algo más barata; Aurora gana en failover más rápido y réplicas de lectura que absorben los picos.
Justificación por pilares:
| Pilar | Decisión |
|---|---|
| Excelencia operativa | Servicios gestionados (Aurora, ElastiCache, ALB), AMI + launch template, CloudWatch con alarmas; infraestructura en CloudFormation |
| Seguridad | Subredes privadas, WAF y Shield, KMS, Secrets Manager, security groups encadenados (ALB → EC2 → Aurora), S3 privado con OAC |
| Fiabilidad | Dos AZ en todos los niveles, failover de Aurora, health checks del ALB y autocuración del ASG |
| Eficiencia del rendimiento | CloudFront cachea imágenes, ElastiCache descarga la base de datos, escalado horizontal |
| Optimización de costes | Base pequeña con escalado a demanda; Savings Plans para el mínimo del ASG; CloudFront reduce la salida del origen |
| Sostenibilidad | Instancias Graviton (t4g/m7g), solo la capacidad necesaria gracias al escalado |
Estimación (supuestos para la calculadora):
| Componente | Supuestos | Referencia de precio |
|---|---|---|
| EC2 | 2 × t4g.small en base, 730 h; picos de 10 instancias unas 20 h al mes | Calcúlalo en la calculadora (compara On-Demand y Compute Savings Plans) |
| ALB | 1 ALB, 730 h + LCU | 0,0252 USD/h + 0,008 USD por LCU-hora en eu-south-2 (≈18 USD/mes + LCU) |
| NAT Gateway | 1 NAT, 730 h + pocos GB | 0,048 USD/h + 0,048 USD/GB (≈35 USD/mes) |
| Aurora MySQL | Escritor + réplica, instancias pequeñas, 20 GB | Calcúlalo en la calculadora |
| ElastiCache | 2 nodos pequeños o ElastiCache Serverless | Calcúlalo en la calculadora |
| S3 | 20 GB Standard | 0,023 USD por GB-mes (≈0,46 USD) |
| CloudFront | Salida según tráfico | Calcúlalo en la calculadora |
| WAF | 1 web ACL + reglas gestionadas + peticiones | Calcúlalo en la calculadora |
| IPv4 públicas | Las del ALB (una por AZ) | 0,005 USD/h por IP (≈3,65 USD/mes cada una) |
Fíjate en que el NAT Gateway y el ALB, por sí solos, suman más de 50 USD al mes: son costes fijos que en un examen aparecen como «optimiza la red».
Paso 3: escenario 2, telemetría de flota y data lake
Empresa: «Logística Meseta», transportista con 3.000 camiones. Cada camión envía su posición GPS, velocidad y temperatura de la carga cada 5 segundos (unos 600 eventos por segundo, mensajes de 1 KB).
Requisitos:
- Un panel de operaciones debe mostrar alertas en segundos si la temperatura de un camión frigorífico supera un umbral.
- Todos los datos brutos se guardan 7 años por contrato. Tras 90 días apenas se consultan, pero deben poder recuperarse si hay una reclamación (se admite esperar horas).
- Los analistas quieren consultar con SQL el histórico y ver informes semanales de consumo y rutas, sin administrar servidores.
- Los datos deben estar en formato eficiente para consultas (hoy reciben CSV de otro sistema cada noche y lo quieren convertir a Parquet).
- El equipo de datos de un socio debe acceder solo a algunas columnas (sin datos del conductor).
- Todo cifrado; los camiones se autentican con credenciales propias.
- Preferencia clara por servicios serverless y pago por uso.
Solución de referencia: escenario 2
Requisito que decide: streaming casi en tiempo real con varios consumidores + data lake serverless y barato a 7 años.
Arquitectura:
flowchart LR
T["Camiones"] --> KDS["Kinesis Data Streams<br/>(on-demand)"]
KDS --> L["Lambda<br/>reglas de temperatura"]
L --> SNS["SNS / EventBridge<br/>alertas"]
KDS --> FH["Data Firehose<br/>conversión a Parquet"]
FH --> S3["S3 data lake<br/>particionado por fecha"]
N["CSV nocturno"] --> S3R["S3 zona raw"]
S3R --> GL["AWS Glue job<br/>CSV a Parquet"]
GL --> S3
S3 --> CAT["Glue Data Catalog<br/>+ Lake Formation"]
CAT --> ATH["Athena"]
ATH --> Q["Amazon Quick<br/>informes"]
- Kinesis Data Streams (modo on-demand para no dimensionar shards) recibe los eventos. Permite varios consumidores independientes y reproceso.
- Consumidor 1: Lambda evalúa las reglas de temperatura y publica alertas en SNS (correo o SMS a operaciones) o en EventBridge para integrarlas con otros sistemas. Latencia de segundos.
- Consumidor 2: Amazon Data Firehose agrupa los eventos y los escribe en S3 convertidos a Parquet y particionados por fecha, sin código.
- El CSV nocturno llega a una zona raw de S3 y un job de AWS Glue lo transforma a Parquet.
- Glue Data Catalog registra las tablas; AWS Lake Formation concede al socio permisos a nivel de columna (sin los campos del conductor).
- Athena para SQL serverless (pagas por datos escaneados: Parquet y particiones reducen mucho el coste) y Amazon Quick (antes QuickSight) para los informes semanales.
- S3 Lifecycle: Standard 90 días → Glacier Flexible Retrieval o Deep Archive hasta los 7 años (se admite esperar horas) → expiración. Si el contrato exige que no se pueda borrar, S3 Object Lock.
- Cifrado con KMS en Kinesis, Firehose y S3; TLS en tránsito. Autenticación de los dispositivos: credenciales temporales (por ejemplo, Cognito identity pools) con permiso solo de
kinesis:PutRecordsobre ese stream.
Alternativas descartadas:
- Solo Firehose: no da alertas en segundos con lógica propia ni varios consumidores.
- Amazon MSK: válido si ya usan Kafka; aquí añade gestión innecesaria.
- Redshift: potente para BI intensivo, pero para informes semanales Athena es más barato y serverless.
- EMR: exceso para una conversión CSV → Parquet nocturna.
- SQS: no conserva orden ni permite varios consumidores leyendo el mismo flujo.
Justificación por pilares:
| Pilar | Decisión |
|---|---|
| Excelencia operativa | Todo serverless; métricas de Kinesis y Firehose en CloudWatch; alarmas de iterador atrasado |
| Seguridad | KMS, IAM de mínimo privilegio para los dispositivos, Lake Formation por columnas, buckets sin acceso público |
| Fiabilidad | Kinesis replica en varias AZ; S3 con 11 nueves de durabilidad; reproceso desde el stream si falla un consumidor |
| Eficiencia del rendimiento | Parquet + particiones; escalado automático de Kinesis on-demand, Lambda y Firehose |
| Optimización de costes | Pago por uso, lifecycle a Glacier, Athena escanea poco gracias al formato columnar |
| Sostenibilidad | Sin servidores ociosos; datos fríos en clases de archivo |
Estimación (supuestos para la calculadora):
- Volumen: 600 eventos/s × 1 KB ≈ 0,6 MB/s ≈ 1,5 TB al mes en bruto (en Parquet comprimido ocupa bastante menos).
- Kinesis Data Streams on-demand: por GB escrito y leído y por hora de stream. Calcúlalo en la calculadora.
- Firehose: por GB ingerido y por conversión de formato.
- S3: 3 meses en Standard (0,023 USD por GB-mes en eu-south-2) y el resto en Glacier.
- Athena: por TB escaneado; estima cuántas consultas y cuántos datos escanean.
- Lambda: 600 invocaciones por segundo si procesas registro a registro; mejor por lotes (batch size) para reducir invocaciones.
Si algún servicio no está disponible en eu-south-2 en la calculadora, estima en eu-west-1 y anótalo.
Paso 4: escenario 3, migración híbrida con recuperación ante desastres
Empresa: «Clínicas Levante», grupo de 12 clínicas dentales. Tiene un pequeño centro de datos en Valencia con:
- Una aplicación de gestión de citas y historiales en Windows Server con SQL Server, de un proveedor que no permite cambiar el código.
- Un servidor de ficheros SMB (radiografías, 8 TB, creciendo 150 GB al mes) integrado con su Active Directory.
- Copias en cintas que un empleado se lleva a casa cada viernes.
Requisitos:
- Migrar a AWS en 3 meses con mínimos cambios. La línea de Internet del centro de datos es de 1 Gbps.
- Si cae la región principal, la aplicación debe volver a funcionar en menos de 1 hora (RTO) perdiendo como mucho 15 minutos de datos (RPO).
- Datos de salud: cifrado en reposo y en tránsito, auditoría de accesos y copias inmutables durante 5 años.
- Las clínicas se conectan por Internet; el personal inicia sesión con sus usuarios de Active Directory.
- Presupuesto moderado: no quieren pagar una segunda región a plena capacidad.
Solución de referencia: escenario 3
Requisito que decide: rehost sin cambios de código + DR entre regiones con RTO de 1 h y RPO de 15 min al menor coste → pilot light o warm standby reducido.
Arquitectura:
flowchart TB
subgraph ONP["Centro de datos (durante la migración)"]
APP0["Windows + SQL Server"]
FS0["Servidor SMB 8 TB"]
end
subgraph R1["Región principal: eu-south-2"]
MGN["Application Migration Service"]
EC2A["EC2 Windows<br/>aplicación, 2 AZ tras ALB"]
RDS["RDS for SQL Server<br/>Multi-AZ, KMS"]
FSX["FSx for Windows File Server<br/>Multi-AZ + AD"]
AD["AWS Managed Microsoft AD"]
BK["AWS Backup<br/>Vault Lock"]
end
subgraph R2["Región de DR: eu-west-1"]
RDS2["Réplica o copias de RDS"]
AMI2["AMI copiadas<br/>ASG a 0 o mínimo"]
FSX2["Copias de FSx"]
BK2["Vault de copia"]
end
APP0 -->|"replicación"| MGN --> EC2A
FS0 -->|"DataSync por VPN"| FSX
EC2A --> RDS
EC2A --> FSX
FSX --> AD
RDS -. "réplica entre regiones" .-> RDS2
BK -. "copia entre regiones" .-> BK2
EC2A -. "AMI" .-> AMI2
FSX -. "backup" .-> FSX2
- Conectividad: Site-to-Site VPN desde el centro de datos (rápida de montar; Direct Connect tardaría semanas y no hace falta para 3 meses). Las clínicas acceden a la aplicación por HTTPS (ALB con certificado de ACM) o, si la aplicación es de escritorio, por Client VPN.
- Aplicación: rehost con AWS Application Migration Service (replica los servidores sin tocar el código). Las EC2 Windows se despliegan en dos AZ tras un ALB.
- Base de datos: RDS for SQL Server Multi-AZ (menos gestión que SQL Server en EC2; migración homogénea con copia de seguridad nativa o AWS DMS). Si el proveedor exigiera acceso al sistema operativo del servidor de base de datos, la alternativa sería SQL Server en EC2.
- Ficheros: FSx for Windows File Server Multi-AZ unido a AWS Managed Microsoft AD (con una relación de confianza con el AD local durante la transición). Migración de los 8 TB con AWS DataSync por la VPN: a 1 Gbps teórico son menos de un día de transferencia pura; en la práctica, unos días compartiendo la línea. Snow Family no hace falta (y además ya no está disponible para clientes nuevos).
- Copias: AWS Backup con planes para EC2, RDS y FSx, copia a la región de DR y Backup Vault Lock en modo compliance durante 5 años (inmutabilidad). Adiós a las cintas.
- DR (pilot light / warm standby reducido) en eu-west-1:
- RDS: réplica de lectura entre regiones para SQL Server si la edición lo admite (RPO de minutos) o, si no, copias automatizadas y snapshots replicados con la frecuencia que exija el RPO. Comprueba en la documentación qué opción cumple 15 minutos para tu edición.
- Aplicación: AMI copiadas y un ASG a 0 (pilot light) o a 1 instancia (warm standby) listo para escalar.
- FSx: copias de AWS Backup a la otra región (o replicación con DataSync programada si se necesita RPO más bajo).
- Route 53 failover con health checks para cambiar el DNS a la región de DR.
- Service Quotas revisadas en la región de DR para poder levantar la capacidad.
- Runbook automatizado con CloudFormation o Systems Manager Automation y simulacros de DR periódicos.
- Seguridad y cumplimiento: KMS en todos los almacenes (con claves multirregión o claves en ambas regiones), TLS, CloudTrail de organización hacia un bucket con Object Lock, AWS Config para reglas de cumplimiento, GuardDuty, y los informes de cumplimiento de AWS en AWS Artifact.
Alternativas descartadas:
- Multi-site active-active: cumple con creces pero cuesta el doble; el enunciado pide no pagar una segunda región a plena capacidad.
- Backup and restore puro: difícilmente cumple RTO de 1 h con 8 TB de ficheros y la base de datos.
- Storage Gateway (S3 File Gateway): útil si los ficheros se quedaran en local; aquí se migra todo y el protocolo SMB con AD pide FSx for Windows.
- Aurora PostgreSQL con migración heterogénea: ahorraría licencias, pero el proveedor no permite cambiar el código.
Justificación por pilares:
| Pilar | Decisión |
|---|---|
| Excelencia operativa | Rehost con MGN, AWS Backup centralizado, runbooks de DR automatizados y probados |
| Seguridad | KMS, TLS con ACM, AD gestionado, CloudTrail inmutable, Config, GuardDuty, Vault Lock |
| Fiabilidad | Multi-AZ en la región principal, DR en otra región con RPO/RTO medidos, cuotas preparadas |
| Eficiencia del rendimiento | FSx SSD o HDD según el acceso a radiografías; tamaño de instancias ajustado tras medir con Compute Optimizer |
| Optimización de costes | DR reducido (pilot light), Savings Plans para la parte estable, VPN en vez de Direct Connect, lifecycle de copias |
| Sostenibilidad | Se apaga el centro de datos propio; capacidad de DR mínima hasta que se necesita |
Estimación (supuestos para la calculadora):
- EC2 Windows: 2 instancias (m-family pequeña) en la región principal; 0 o 1 en DR. La licencia de Windows va incluida en el precio por hora.
- RDS for SQL Server: la licencia incluida es una parte importante del coste; compara ediciones (Web, Standard) en la calculadora.
- FSx for Windows: 8 TB (HDD es más barato para radiografías de acceso esporádico), capacidad de rendimiento y copias.
- Site-to-Site VPN: 0,05 USD/h por conexión en eu-south-2 (≈36,5 USD/mes).
- AWS Managed Microsoft AD: por hora de controlador de dominio.
- AWS Backup: GB almacenados y copia entre regiones (transferencia entre regiones incluida en la estimación).
- Route 53: zona alojada y health checks.
Comprueba que funciona
Tu diseño está «terminado» cuando puedes responder que sí a todo esto en cada escenario:
- Cada requisito del enunciado se cumple con algún componente del diagrama.
- Sabes cuál era el requisito que decide y tu diseño lo prioriza.
- No hay ningún punto único de fallo que afecte al servicio (o está justificado por coste).
- Los datos están cifrados en reposo y en tránsito y el acceso sigue el mínimo privilegio.
- Has justificado el diseño con los seis pilares.
- Tienes una estimación mensual guardada en la Pricing Calculator con sus supuestos.
- Puedes explicar en 2 minutos por qué descartaste dos alternativas.
Limpieza
No has creado recursos en AWS, así que no hay nada que borrar. Si has guardado estimaciones compartidas en la Pricing Calculator, recuerda que el enlace es público: no pongas datos confidenciales en los nombres de los grupos.
Preguntas para pensar como arquitecto
1. En el escenario 1, la dirección pide reducir costes al mínimo durante los meses sin campañas. ¿Qué cambiarías sin perder la alta disponibilidad?
Mantener dos AZ (es un requisito), pero con el mínimo del ASG en 2 instancias pequeñas cubiertas por un Compute Savings Plan; usar Spot para la capacidad adicional de los picos (la aplicación es stateless); un único NAT Gateway o eliminarlo si las instancias solo necesitan S3 y otros servicios de AWS a través de VPC endpoints; Aurora con instancias más pequeñas o Aurora Serverless v2 para la réplica; aumentar el TTL de caché en CloudFront.
2. En el escenario 2, el volumen se multiplica por 20 en dos años. ¿Qué parte del diseño se rompe primero?
Casi nada, porque todo escala solo: Kinesis on-demand, Firehose, Lambda, S3 y Athena. Lo que hay que vigilar son las cuotas (por ejemplo, la concurrencia de Lambda y el rendimiento del stream), el coste de Athena si las consultas escanean todo (particiones y Parquet son esenciales) y el coste de Kinesis on-demand frente a provisionado cuando el tráfico ya es estable y predecible.
3. En el escenario 3, ¿cuándo pasarías de Site-to-Site VPN a Direct Connect?
Si el centro de datos sigue vivo a largo plazo con mucho tráfico constante hacia AWS, si necesitas latencia y ancho de banda predecibles o si el coste de transferencia por Internet supera al de un puerto de Direct Connect. En ese caso, Direct Connect como enlace principal y la VPN como respaldo. Para una migración de 3 meses, no compensa.
4. ¿Cómo demostrarías a un auditor que las copias del escenario 3 no se pueden borrar?
Con AWS Backup Vault Lock en modo compliance (ni siquiera el usuario raíz puede acortar la retención una vez pasado el periodo de gracia), los registros de CloudTrail en un bucket con S3 Object Lock, reglas de AWS Config que comprueben la configuración y los informes de cumplimiento de AWS descargados de AWS Artifact.
5. Si solo pudieras mejorar un pilar en cada escenario, ¿cuál sería y por qué?
No hay respuesta única; se trata de razonar con el requisito que decide. Por ejemplo: en el 1, fiabilidad (los picos son el negocio); en el 2, optimización de costes (el volumen crece y el pago por uso puede dispararse); en el 3, seguridad (datos de salud) y fiabilidad a la par. En una entrevista, lo que se valora es que explicites el compromiso (trade-off) que aceptas.