Lab 7: Destroy
Lab 7: Destroy – Eliminar todos los recursos
Con Terraform la limpieza es directa y limpia: ejecutamos terraform destroy en cada módulo en orden inverso.
Aviso
Ejecutá este lab al finalizar el taller. Los recursos en AWS generan costos mientras sigan activos.
Orden de destroy
Los módulos tienen dependencias vía terraform_remote_state local. El orden de eliminación es inverso al de creación:
4 (SNS + Lambda + 1-Click Failback) → 3 (ARC + DNS) → 2 (Amplify) → 1 (Primary EC2 + ALB)Paso 1: Cargar variables de entorno
source ~/route53-arc-tf/global.envPaso 2: Destroy Lab 4 – SNS + Lambda Automation
cd ~/route53-arc-tf/04_automation
# Verificar que NOTIFICATION_EMAIL está disponible (necesario para el destroy del Lab 4)
echo "📧 NOTIFICATION_EMAIL: $NOTIFICATION_EMAIL"
[ -z "$NOTIFICATION_EMAIL" ] \
&& echo "⚠️ NOTIFICATION_EMAIL no definido. Exportalo manualmente:" \
&& echo " export NOTIFICATION_EMAIL=\"tu-email@ejemplo.com\"" \
|| echo "✅ Variable lista"
terraform destroy \
-var="notification_email=$NOTIFICATION_EMAIL" \
-auto-approve
echo "✅ Lab 4 destruido"Paso 3: Destroy Lab 3 – ARC + Route 53 DNS
cd ~/route53-arc-tf/03_arc
terraform destroy -auto-approve
echo "✅ Lab 3 destruido"Información
El destroy del ARC Cluster puede tardar 3-5 minutos — AWS desaprovisiona los endpoints del cluster en múltiples regiones.
Paso 4: Destroy Lab 2 – AWS Amplify (o CloudFront + S3)
cd ~/route53-arc-tf/02_secondary
terraform destroy -auto-approve
echo "✅ Lab 2 destruido"Paso 5: Destroy Lab 1 – EC2 + ALB + ACM SSL Certificate
cd ~/route53-arc-tf/01_primary
terraform destroy \
-var="vpc_mode=${VPC_MODE}" \
-var="instance_type=t4g.micro" \
-auto-approve
echo "✅ Lab 1 destruido"✅ Verificación de Limpieza Final
echo "=== Verificación Final de Recursos AWS ==="
# EC2
EC2_COUNT=$(aws ec2 describe-instances \
--filters "Name=tag:Workshop,Values=route53-arc" \
"Name=instance-state-name,Values=running,stopped,stopping" \
--region $AWS_REGION \
--query 'length(Reservations[])' --output text 2>/dev/null)
[ "${EC2_COUNT:-0}" = "0" ] \
&& echo "✅ Sin instancias EC2 activas" \
|| echo "⚠️ Quedan $EC2_COUNT instancias"
# ALB
ALB_COUNT=$(aws elbv2 describe-load-balancers \
--region $AWS_REGION \
--query "length(LoadBalancers[?contains(LoadBalancerName,'route53-arc')])" \
--output text 2>/dev/null)
[ "${ALB_COUNT:-0}" = "0" ] \
&& echo "✅ Sin ALBs activos" || echo "⚠️ Quedan $ALB_COUNT ALBs"
# Lambdas
aws lambda get-function --function-name route53-arc-failover-handler --region $AWS_REGION > /dev/null 2>&1 \
&& echo "⚠️ Lambda Failover aún existe" \
|| echo "✅ Lambda Failover eliminada"
aws lambda get-function --function-name route53-arc-failback-handler --region $AWS_REGION > /dev/null 2>&1 \
&& echo "⚠️ Lambda Failback aún existe" \
|| echo "✅ Lambda Failback eliminada"
echo ""
echo "🎉 ¡Limpieza completa finalizada! Gracias por realizar el AWS Route 53 ARC Workshop."Paso 6: Limpiar el usuario IAM del workshop (opcional pero recomendado)
Consejo
🔐 Buena práctica de seguridad: Eliminá el usuario IAM y la política del workshop cuando terminés. Son credenciales que ya no necesitás.
# Opción A: Desde la consola
# IAM → Users → workshop-route53-arc → Delete
# IAM → Policies → WorkshopRoute53ARC → Delete
# Opción B: Desde la CLI (con un usuario administrador)
POLICY_ARN=$(aws iam list-policies \
--query "Policies[?PolicyName=='WorkshopRoute53ARC'].Arn" \
--output text 2>/dev/null)
if [ -n "$POLICY_ARN" ]; then
aws iam detach-user-policy \
--user-name workshop-route53-arc \
--policy-arn $POLICY_ARN 2>/dev/null
aws iam delete-policy --policy-arn $POLICY_ARN
echo "✅ Política WorkshopRoute53ARC eliminada"
fi
# Eliminar access keys antes de borrar el usuario
aws iam list-access-keys --user-name workshop-route53-arc \
--query 'AccessKeyMetadata[].AccessKeyId' \
--output text 2>/dev/null | tr '\t' '\n' | while read KEY_ID; do
aws iam delete-access-key --user-name workshop-route53-arc --access-key-id $KEY_ID
echo "🗑️ Access key $KEY_ID eliminada"
done
aws iam delete-user --user-name workshop-route53-arc 2>/dev/null \
&& echo "✅ Usuario workshop-route53-arc eliminado" \
|| echo "ℹ️ El usuario ya no existe o requiere permisos de administrador"🎓 Resumen del Workshop
Aprendiste a implementar AWS Route 53 ARC con Terraform:
- ✅ Estado local por módulo (workshop volátil y efímero)
- ✅ Módulos independientes conectados vía
terraform_remote_statelocal - ✅ Certificado SSL en ACM con validación DNS y listener HTTPS 443 + HTTP 80 301 Redirect
- ✅ ARC Cluster, Routing Controls, Safety Rules y CNAME Failover DNS
- ✅ Dominio de aplicación personalizado en AWS Amplify y Route 53
- ✅ Failover automático vía Lambda + CloudWatch Alarm + SNS
- ✅ Detección de recuperación (
OK) y Failback 1-Click (Email Function URL / SSM Automation) - ✅ Política IAM granular respetando el Principio de Menor Privilegio (Least Privilege)
AWS Route 53 ARC Workshop