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.env

Paso 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_state local
  • ✅ 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