Lab 6: Failback
Lab 6: Failback – Restablecimiento 1-Click sin Error Humano
El failback en este workshop se realiza mediante un proceso controlado y seguro que elimina el riesgo de error humano y errores de tipeo en la CLI.
Una vez que el sitio primario vuelve a estar en verde, la solución detecta la recuperación y notifica al operador. El operador puede elegir cualquiera de las siguientes 3 opciones “Zero-Command / 1-Click” para devolver el tráfico al primario.
Paso 0: Verificar que el sitio primario está recuperado
Aviso
⚠️ No ejecutes el failback si el sitio primario sigue caído. Devolver el tráfico al primario mientras está fuera de servicio resultaría en una interrupción total para los usuarios. Verificá el estado antes de continuar.
source ~/route53-arc-tf/global.env
# 1. Si apagaste la EC2 en el Lab 5 Método 1.A, volvé a encenderla primero:
# aws ec2 start-instances --instance-ids $EC2_ID --region $AWS_REGION
# aws ec2 wait instance-running --instance-ids $EC2_ID --region $AWS_REGION
# 2. Verificar que el ALB responde correctamente antes del failback
cd ~/route53-arc-tf/01_primary
PRIMARY_ALB_DNS=$(terraform output -raw alb_dns_name)
for i in $(seq 1 6); do
HTTP=$(curl -s -o /dev/null -w "%{http_code}" --connect-timeout 3 --max-time 5 "http://$PRIMARY_ALB_DNS/health" 2>/dev/null || echo "000")
HEALTH=$(curl -s --connect-timeout 3 --max-time 5 "http://$PRIMARY_ALB_DNS/health" 2>/dev/null | tr -d '[:space:]')
echo "[$(date '+%H:%M:%S')] ALB Health: HTTP $HTTP | Body: '$HEALTH'"
[ "$HEALTH" = "OK" ] && echo "✅ Sitio primario SALUDABLE — podés continuar con el failback" && break
[ "$i" -lt 6 ] && sleep 20
doneOpción A (Recomendada): 1-Click desde el Email de Notificación (SNS)
- Revisa tu correo electrónico. Al recuperar el sitio primario, habrás recibido un email de SNS con el asunto:
🟢 [SITIO PRIMARIO RECUPERADO] Listo para Failback (1-Click) - Hace clic en el enlace incluido dentro del correo:
https://<lambda-function-url>.lambda-url.us-east-1.on.aws/ - Se abrirá una pestaña en tu navegador confirmando la ejecución exitosa con un mensaje similar a:
✅ Failback Exitoso
[SITIO PRIMARIO ONLINE]
El tráfico ha sido devuelto exitosamente al Sitio Primario en AWS (EC2 + ALB).
Routing Controls:
• Primario: ON
• Secundario: OFFOpción B: 1-Click desde la Consola de AWS Systems Manager (SSM Automation)
- Ingresá a la consola de AWS Systems Manager → Automation.
- En la lista de documentos, buscá el documento
route53-arc-failback-ssm. - Hacé clic en Execute automation.
- La automatización invocará la función Lambda de Failback y restablecerá los controles de ARC a
Primario=ON|Secundario=OFFen 2 segundos.
Consejo
💡 Extensión Enterprise / ChatOps:
Además de los mecanismos de Failback 1-Click descritos (Email Link, SSM Automation y CLI), en entornos de producción Enterprise se puede implementar una integración por Webhook de Slack, Microsoft Teams o AWS Chatbot con mecanismos interactivos de aprobación (Interactive Buttons).
Al detectar la recuperación del sitio primario, la Lambda publica una tarjeta interactiva (Adaptive Card / Block Kit) en el canal de operaciones con botones [Aprobar Failback] y [Rechazar]. El ingeniero de guardia aprueba la conmutación directamente desde su chat de preferencia sin ingresar a la consola ni ejecutar comandos.
Opción C: Invocación por AWS CLI o Consola de AWS Lambda
Vía AWS CLI:
source ~/route53-arc-tf/global.env
cd ~/route53-arc-tf/04_automation
FAILBACK_LAMBDA=$(terraform output -raw failback_lambda_name)
aws lambda invoke \
--function-name $FAILBACK_LAMBDA \
--region $AWS_REGION /tmp/failback-result.json
cat /tmp/failback-result.jsonVía Consola de AWS Lambda:
- Ingresá a la consola de AWS Lambda → seleccioná
route53-arc-failback-handler. - Pestaña Test → hacé clic en Test.
- Verificá la respuesta
200 OKcon el HTML de confirmación.
✅ Verificación del Lab 6
source ~/route53-arc-tf/global.env
cd ~/route53-arc-tf/03_arc
export PRIMARY_RC_ARN=$(terraform output -raw primary_rc_arn)
export SECONDARY_RC_ARN=$(terraform output -raw secondary_rc_arn)
CLUSTER_ENDPOINT=$(terraform output -json arc_cluster_endpoints | python3 -c "
import json, sys
eps = json.load(sys.stdin)
target = next((e for e in eps if e['region'] == 'us-east-1'), eps[0])
print(target['endpoint'])
")
ENDPOINT_REGION="us-east-1"
echo "=== Verificación Lab 6: Failback ==="
P=$(aws route53-recovery-cluster get-routing-control-state \
--routing-control-arn $PRIMARY_RC_ARN \
--endpoint-url $CLUSTER_ENDPOINT --region $ENDPOINT_REGION \
--query 'RoutingControlState' --output text 2>/dev/null)
S=$(aws route53-recovery-cluster get-routing-control-state \
--routing-control-arn $SECONDARY_RC_ARN \
--endpoint-url $CLUSTER_ENDPOINT --region $ENDPOINT_REGION \
--query 'RoutingControlState' --output text 2>/dev/null)
[ "$P" = "On" ] && echo "✅ Routing Control Primario: $P" || echo "❌ Primario: $P"
[ "$S" = "Off" ] && echo "✅ Routing Control Secundario: $S" || echo "❌ Secundario: $S"
HTTP=$(curl -k -s -o /dev/null -w "%{http_code}" "https://$APP_SUBDOMAIN.$DOMAIN_NAME/" 2>/dev/null)
[ "$HTTP" = "200" ] && echo "✅ Dominio de Aplicación: HTTPS $HTTP OK" || echo "⚠️ HTTPS $HTTP"
echo ""
echo "🎉 Ciclo completo completado: Caída → Detección → SNS → Failover Automático → Notificación → Reparación → Failback 1-Click"Siguiente paso → Lab 7: Limpieza de Recursos (Destroy)