Escenarios de arquitecturas resilientes y de alta disponibilidad
Aborde escenarios de conmutación por error de bases de datos Multi-AZ, auto scaling ante tráfico en ráfagas y conmutación por error basada en comprobaciones de estado de Route 53 para afianzar los conceptos de fiabilidad
Escenarios de arquitecturas resilientes y de alta disponibilidad es una lección gratuita de AWS Solutions Architect en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de AWS Solutions Architect, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de AWS Solutions Architect incluye 4 lecciones en total.
Escenario 1: Aplicación web Multi-AZ
Escenario: Una empresa ejecuta una aplicación web de dos niveles (ALB → EC2 → RDS) y desea eliminar cualquier punto único de fallo dentro de la Región de AWS. Solución: Implemente instancias EC2 en un Auto Scaling Group que abarque al menos 2 zonas de disponibilidad detrás de un ALB (que es inherentemente multi-AZ). Habilite RDS Multi-AZ para la replicación síncrona en espera. Configure comprobaciones de estado en el ALB para redirigir automáticamente el tráfico y evitar las instancias en mal estado. Con esta arquitectura, la pérdida de cualquier AZ provoca una conmutación por error automática en todos los niveles.
# Create RDS with Multi-AZ enabled
aws rds create-db-instance \
--db-instance-identifier prod-mysql \
--db-instance-class db.t3.large \
--engine mysql \
--multi-az \
--master-username admin \
--master-user-password Pass123! \
--allocated-storage 100
# Create ASG across 3 AZs
aws autoscaling create-auto-scaling-group \
--auto-scaling-group-name web-asg \
--min-size 2 --max-size 10 --desired-capacity 3 \
--availability-zones us-east-1a us-east-1b us-east-1c \
--target-group-arns arn:aws:elasticloadbalancing:us-east-1:123:targetgroup/web-tg/abcEscenario 2: Escalado de lectura de RDS bajo carga
Escenario: La instancia de RDS de una aplicación de comercio electrónico alcanza los límites de CPU durante las horas punta debido a consultas de análisis con gran intensidad de lectura del equipo de inteligencia empresarial. Solución: Cree RDS Read Replicas y dirija las consultas de BI al endpoint de la réplica. Read Replicas utiliza replicación asíncrona, por lo que una ligera latencia es aceptable para los análisis. Esto descarga el tráfico de lectura de la instancia principal de RDS, que queda reservada para las operaciones de escritura y las lecturas de la aplicación. Para cargas de trabajo con una intensidad de lectura extrema, añada una capa de ElastiCache delante de RDS para los datos a los que se accede con frecuencia.
# Create a Read Replica from the primary RDS instance
aws rds create-db-instance-read-replica \
--db-instance-identifier prod-mysql-replica \
--source-db-instance-identifier prod-mysql \
--db-instance-class db.t3.large \
--availability-zone us-east-1b
# Application code: use replica endpoint for reads
# Primary endpoint: prod-mysql.cluster.us-east-1.rds.amazonaws.com (writes)
# Replica endpoint: prod-mysql-replica.xyz.us-east-1.rds.amazonaws.com (reads)Escenario 3: Auto Scaling ante un pico de CPU
Escenario: Una API sin estado se ejecuta en EC2 detrás de un ALB. El uso de CPU alcanza el 90 % durante el horario laboral y desciende casi a cero por la noche. La empresa desea que la flota se escale automáticamente. Solución: Configure un Auto Scaling Group con una política de escalado Target Tracking cuyo objetivo sea una utilización media de CPU del 60 %. ASG añadirá instancias automáticamente cuando la CPU supere el 60 % y las eliminará cuando descienda por debajo del objetivo. Añada una acción de escalado programada para precalentar la capacidad mínima antes de que comience el horario laboral y evitar retrasos durante el aumento de tráfico matutino.
# Target tracking policy: scale to keep CPU at 60%
aws autoscaling put-scaling-policy \
--auto-scaling-group-name api-asg \
--policy-name cpu-tracking \
--policy-type TargetTrackingScaling \
--target-tracking-configuration '{
"PredefinedMetricSpecification": {"PredefinedMetricType": "ASGAverageCPUUtilization"},
"TargetValue": 60.0,
"DisableScaleIn": false
}'
# Scheduled action: pre-warm to 5 instances at 8 AM weekdays
aws autoscaling put-scheduled-update-group-action \
--auto-scaling-group-name api-asg \
--scheduled-action-name morning-scale-out \
--recurrence '0 8 * * MON-FRI' \
--min-size 5Escenario 4: Conmutación por error de Route 53 al sitio de DR
Escenario: Una empresa ejecuta una aplicación web principal en us-east-1 y desea conmutar por error a una página de mantenimiento estática alojada en S3 en us-west-2 si la principal deja de estar saludable. Solución: Cree una comprobación de estado de Route 53 que supervise el endpoint del ALB principal. Cree dos registros de Route 53 con una política de enrutamiento de conmutación por error: un registro principal que apunte al ALB (asociado a la comprobación de estado) y un registro secundario que apunte al sitio estático de S3. Si la comprobación de estado falla, Route 53 proporciona automáticamente la respuesta DNS del registro secundario.
# Create Route 53 health check for primary ALB
aws route53 create-health-check \
--caller-reference $(date +%s) \
--health-check-config '{
"Type": "HTTPS",
"FullyQualifiedDomainName": "app.example.com",
"Port": 443,
"RequestInterval": 30,
"FailureThreshold": 3
}'
# Primary failover record (associated with health check)
# Secondary failover record -> S3 static website endpoint
# Route 53 automatically switches if health check failsEscenario 5: Desacoplamiento con SQS para obtener resiliencia
Escenario: Un backend de procesamiento de pedidos escribe en una base de datos, pero esta deja de estar disponible ocasionalmente durante las ventanas de mantenimiento, lo que provoca la pérdida de pedidos. Solución: Coloque una cola de SQS entre el frontend (que acepta los pedidos) y el backend (que los procesa). Los pedidos se colocan inmediatamente en la cola, lo que proporciona al cliente una confirmación instantánea. Los procesos de trabajo en segundo plano extraen los pedidos de la cola y los procesan cuando la base de datos está disponible. Durante el mantenimiento, los pedidos se acumulan en la cola en lugar de descartarse, lo que proporciona resiliencia mediante el desacoplamiento asíncrono.
# SQS-based order decoupling pattern
# 1. Frontend: PUT order to SQS (returns 200 immediately to customer)
aws sqs send-message \
--queue-url https://sqs.us-east-1.amazonaws.com/123/orders \
--message-body '{"orderId": "ORD-123", "items": [...]}'
# 2. Backend worker: polls SQS when DB is available
aws sqs receive-message \
--queue-url https://sqs.us-east-1.amazonaws.com/123/orders \
--max-number-of-messages 10
# 3. On success: delete message from queue
# 4. On failure: visibility timeout expires -> message reappears for retry
# 5. After max retries: message goes to Dead Letter Queue (DLQ)Escenario 6: DR Pilot Light
Escenario: Una empresa necesita una solución de recuperación ante desastres con un RPO de 1 hora y un RTO de 4 horas, con un presupuesto moderado. Solución: Implemente una estrategia de DR Pilot Light. Mantenga la base de datos principal replicada en la Región de DR mediante RDS Cross-Region Read Replica. Los servidores de aplicaciones no se ejecutan en la Región de DR durante el funcionamiento normal; solo se mantiene activo el mínimo «núcleo» (la base de datos). En caso de desastre, convierta la Read Replica en independiente y lance los servidores de aplicaciones a partir de AMI previamente creadas mediante CloudFormation. El RTO es de horas, no de minutos, porque es necesario lanzar los servidores.
# Pilot Light: replicate database to DR Region
aws rds create-db-instance-read-replica \
--db-instance-identifier prod-mysql-dr \
--source-db-instance-identifier prod-mysql \
--db-instance-class db.t3.large \
--source-region us-east-1 \
--destination-region us-west-2
# During disaster: promote replica in us-west-2 to standalone
aws rds promote-read-replica \
--db-instance-identifier prod-mysql-dr \
--region us-west-2
# Then launch app servers from AMIs using CloudFormation in us-west-2Escenario 7: Dead-Letter Queue de SQS para mensajes fallidos
Escenario: El procesamiento de los mensajes de una cola de SQS falla repetidamente debido a un error en la Lambda consumidora. Los mensajes reaparecen continuamente y bloquean la cola. Solución: Configure una Dead-Letter Queue (DLQ) en la cola principal. Después de que un mensaje falle un número configurable de veces (maxReceiveCount), SQS lo mueve automáticamente a la DLQ en lugar de volver a entregarlo indefinidamente. Esto desbloquea la cola principal para los mensajes que funcionan correctamente. Configure una alarma de CloudWatch sobre la métrica ApproximateNumberOfMessagesVisible de la DLQ para avisar al equipo de ingeniería cuando se acumulen mensajes en ella.
# Set redrive policy to move failed messages to DLQ after 3 attempts
aws sqs set-queue-attributes \
--queue-url https://sqs.us-east-1.amazonaws.com/123/orders \
--attributes '{
"RedrivePolicy": "{\"deadLetterTargetArn\": \"arn:aws:sqs:us-east-1:123:orders-dlq\", \"maxReceiveCount\": \"3\"}"
}'
# CloudWatch alarm on DLQ depth
aws cloudwatch put-metric-alarm \
--alarm-name orders-dlq-depth \
--metric-name ApproximateNumberOfMessagesVisible \
--namespace AWS/SQS \
--dimensions Name=QueueName,Value=orders-dlq \
--threshold 1 --comparison-operator GreaterThanOrEqualToThreshold \
--evaluation-periods 1 --period 60 --statistic SumEscenario 8: Aurora Global Database
Escenario: Una empresa opera en Estados Unidos y Europa. Los usuarios de Europa experimentan una latencia de lectura de la base de datos elevada porque RDS se encuentra en us-east-1. Solución: Utilice Amazon Aurora Global Database. El clúster principal se encuentra en us-east-1 y se añade un clúster secundario de solo lectura en eu-west-1. Aurora replica los datos en la Región secundaria con una latencia habitual inferior a 1 segundo mediante replicación a nivel de almacenamiento. Los usuarios europeos leen del clúster secundario de eu-west-1. En caso de desastre regional, el secundario puede promoverse a principal en menos de 1 minuto (el mejor RTO entre las opciones de bases de datos multi-región de AWS).
# Add a secondary region to an Aurora Global Database
aws rds create-global-cluster \
--global-cluster-identifier prod-global \
--source-db-cluster-identifier arn:aws:rds:us-east-1:123:cluster:prod-aurora
# Add secondary Region cluster
aws rds create-db-cluster \
--db-cluster-identifier prod-aurora-eu \
--engine aurora-postgresql \
--global-cluster-identifier prod-global \
--region eu-west-1Escenario 9: Servicio de ECS con ALB y Auto Scaling
Escenario: Un servicio de API contenedorizado que se ejecuta en ECS Fargate necesita escalar en función de la utilización de CPU y sobrevivir a fallos de AZ. Solución: Registre el servicio de ECS en un grupo de destino de Application Load Balancer para distribuir el tráfico entre las tareas en ejecución. Distribuya las tareas entre varias AZ especificando varias subredes en la configuración del servicio. Configure ECS Service Auto Scaling con una política de seguimiento de objetivos sobre la utilización de CPU del servicio de ECS para aumentar y reducir automáticamente el número de tareas. Si falla una AZ, ECS reinicia las tareas fallidas en AZ saludables.
# Create ECS Fargate service with ALB and multi-AZ placement
aws ecs create-service \
--cluster prod-cluster \
--service-name api-service \
--task-definition api-task:5 \
--desired-count 3 \
--launch-type FARGATE \
--network-configuration '{
"awsvpcConfiguration": {
"subnets": ["subnet-1a", "subnet-1b", "subnet-1c"],
"securityGroups": ["sg-app"],
"assignPublicIp": "DISABLED"
}
}' \
--load-balancers '[{
"targetGroupArn": "arn:...:targetgroup/api-tg/abc",
"containerName": "api",
"containerPort": 8080
}]'Escenario 10: Conmutación por error mediante comprobaciones de estado con Route 53
Escenario: Una empresa ejecuta dos instancias EC2 en AZ diferentes que sirven el mismo dominio. Desea que Route 53 deje de enviar tráfico automáticamente a una instancia en mal estado. Solución: Utilice Weighted Routing de Route 53 con pesos iguales (50/50) y asocie una comprobación de estado del endpoint a cada registro. Cuando Route 53 detecta que un endpoint está en mal estado, elimina ese registro de las respuestas DNS y envía el 100 % del tráfico al endpoint saludable. Cuando la instancia se recupera y las comprobaciones de estado vuelven a superarse, Route 53 reequilibra automáticamente el tráfico, sin necesidad de cambios manuales en DNS.
# Route 53 weighted record with health check association
aws route53 change-resource-record-sets \
--hosted-zone-id Z1234567890 \
--change-batch '{
"Changes": [{
"Action": "UPSERT",
"ResourceRecordSet": {
"Name": "app.example.com",
"Type": "A",
"SetIdentifier": "instance-1a",
"Weight": 50,
"HealthCheckId": "hc-abc123",
"TTL": 30,
"ResourceRecords": [{"Value": "10.0.1.10"}]
}
}]
}'Escenario 11: DynamoDB Global Tables para HA multi-región
Escenario: Una aplicación de juegos para móviles necesita que los datos de los jugadores se puedan leer y escribir con baja latencia tanto desde us-east-1 como desde ap-southeast-1. Una tabla de DynamoDB en una sola Región provoca una latencia elevada para los usuarios asiáticos. Solución: Habilite DynamoDB Global Tables. Global Tables replica automáticamente los datos entre las Regiones especificadas mediante replicación multi-master; cualquier Región puede aceptar escrituras. Los usuarios asiáticos escriben y leen en la réplica de ap-southeast-1 con latencia local (~5 ms). Global Tables gestiona la resolución de conflictos mediante una estrategia de «last-writer-wins» basada en marcas de tiempo. El RTO ante un fallo regional completo es prácticamente cero: el tráfico se dirige simplemente a la Región que sigue operativa.
# Convert a DynamoDB table to a Global Table
# (table must exist in all target Regions first)
aws dynamodb create-global-table \
--global-table-name PlayerData \
--replication-group '[{"RegionName": "us-east-1"}, {"RegionName": "ap-southeast-1"}]'
# Add another Region to an existing Global Table
aws dynamodb update-global-table \
--global-table-name PlayerData \
--replica-updates '[{"Create": {"RegionName": "eu-west-1"}}]'Comprobación rápida
Compruebe su comprensión de los conceptos de AWS Solutions Architect (SAA-C03) de esta lección.
Resumen de la lección
En esta lección ha trabajado con escenarios que abarcan: ASG Multi-AZ y RDS para HA dentro de una Región, enrutamiento de conmutación por error de Route 53 para DR entre Regiones, SQS DLQ para aislar mensajes fallidos sin bloquear las colas y Aurora Global Database para escalar las lecturas entre Regiones y realizar una conmutación por error con un RTO inferior a un minuto. A continuación, abordaremos escenarios de arquitecturas de alto rendimiento y optimizadas en costes.
Preguntas frecuentes
¿La lección «Escenarios de arquitecturas resilientes y de alta disponibilidad» es gratis?
Sí — el texto completo de «Escenarios de arquitecturas resilientes y de alta disponibilidad» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de AWS Solutions Architect, actualiza a CoddyKit PRO. El curso de AWS Solutions Architect incluye 4 lecciones en total.
¿Qué aprenderé en «Escenarios de arquitecturas resilientes y de alta disponibilidad»?
Aborde escenarios de conmutación por error de bases de datos Multi-AZ, auto scaling ante tráfico en ráfagas y conmutación por error basada en comprobaciones de estado de Route 53 para afianzar los co… Practicas AWS Solutions Architect con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar AWS Solutions Architect?
No se requiere experiencia previa. AWS Solutions Architect en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.
¿Cuánto tiempo toma la lección «Escenarios de arquitecturas resilientes y de alta disponibilidad»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de AWS Solutions Architect?
Sí. Cada lección de AWS Solutions Architect incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Escenarios de arquitectura segura
- Escenarios de arquitecturas resilientes y de alta disponibilidad
- Escenarios de alto rendimiento y optimización de costes
- Mini examen completo de dominios combinados