Lab 7: Limpieza
Lab 7: Limpieza de Recursos (Destroy)
Eliminá todos los recursos creados durante el workshop para evitar cargos innecesarios en tu cuenta AWS.
Aviso
Ejecutá este laboratorio al finalizar el taller. Los recursos en AWS generan costos mientras sigan activos en tu cuenta.
Cargar variables de entorno
source ~/global.envOpción A: Limpieza con CloudFormation (Base)
Los stacks de CloudFormation tienen dependencias vía exports. Se eliminan en orden inverso al de creación:
1. route53-arc-automation (SNS + Lambda + SSM)
2. route53-arc-routing (ARC Cluster + Health Checks + DNS)
3. route53-arc-secondary (Amplify o S3+CloudFront)
4. route53-arc-primary (EC2 + ALB + VPC)
5. Buckets S3 temporales (Lambda code bucket)Script de Eliminación CloudFormation
echo "=== Eliminando Stacks CloudFormation ==="
# 1. Si usaste Amplify (opción default del Lab 2), el stack no tiene recursos S3 que vaciar.
# Si usaste CloudFront+S3, vaciamos el bucket primero.
CF_BUCKET="route53-arc-fallback-${AWS_ACCOUNT_ID}"
# Vaciar bucket S3 solo si existe (solo aplica si usaste CloudFront+S3 en Lab 2)
if aws s3 ls s3://$CF_BUCKET --region $AWS_REGION > /dev/null 2>&1; then
echo "▶ Vaciando bucket $CF_BUCKET..."
aws s3 rm s3://$CF_BUCKET --recursive --region $AWS_REGION
else
echo "ℹ️ Bucket $CF_BUCKET no existe (usaste Amplify en Lab 2 — ok)"
fi
# 2. Eliminar stacks en orden
STACKS=(
"route53-arc-automation"
"route53-arc-routing"
"route53-arc-secondary"
"route53-arc-primary"
)
for STACK in "${STACKS[@]}"; do
echo "▶ Eliminando stack: $STACK..."
aws cloudformation delete-stack --stack-name $STACK --region $AWS_REGION 2>/dev/null || true
aws cloudformation wait stack-delete-complete --stack-name $STACK --region $AWS_REGION 2>/dev/null \
&& echo " ✅ Stack $STACK eliminado" \
|| echo " ℹ️ Stack $STACK ya no existe o tardó más de lo esperado"
done
# 3. Eliminar bucket S3 del código Lambda (creado manualmente en el Lab 4)
LAMBDA_BUCKET="route53-arc-lambda-${AWS_ACCOUNT_ID}"
aws s3 rm s3://$LAMBDA_BUCKET --recursive --region $AWS_REGION 2>/dev/null || true
aws s3 rb s3://$LAMBDA_BUCKET --region $AWS_REGION 2>/dev/null || true
echo "✅ Limpieza de CloudFormation completada"Aviso
⏱️ El stack route53-arc-routing puede tardar 5-10 minutos en eliminarse. AWS desaprovisiona los endpoints globales del ARC Cluster durante ese tiempo. El script espera automáticamente — no lo interrumpas.
Opción B: Limpieza con Terraform (Segunda Opción)
En Terraform ejecutamos terraform destroy en cada módulo en orden inverso:
04_automation → 03_arc → 02_secondary → 01_primaryecho "=== Eliminando Módulos Terraform ==="
# 1. Destroy Lab 4 (Automation)
if [ -d ~/route53-arc-tf/04_automation ]; then
cd ~/route53-arc-tf/04_automation
terraform destroy -var="notification_email=$NOTIFICATION_EMAIL" -auto-approve
echo "✅ Lab 4 destruido"
fi
# 2. Destroy Lab 3 (ARC) — puede tardar 5-10 minutos por el ARC Cluster
if [ -d ~/route53-arc-tf/03_arc ]; then
echo "⏳ Destruyendo ARC Cluster (5-10 min)..."
cd ~/route53-arc-tf/03_arc
terraform destroy -auto-approve
echo "✅ Lab 3 destruido"
fi
# 3. Destroy Lab 2 (Secondary — Amplify o CloudFront+S3)
if [ -d ~/route53-arc-tf/02_secondary ]; then
cd ~/route53-arc-tf/02_secondary
terraform destroy -auto-approve
echo "✅ Lab 2 destruido"
fi
# 4. Destroy Lab 1 (Primary)
if [ -d ~/route53-arc-tf/01_primary ]; then
cd ~/route53-arc-tf/01_primary
terraform destroy -var="vpc_mode=${VPC_MODE}" -var="instance_type=t4g.micro" -auto-approve
echo "✅ Lab 1 destruido"
fi
echo "✅ Limpieza de Terraform completada"✅ 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 EC2 — eliminá manualmente desde la consola"
# 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 Load Balancers 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"
# ARC Cluster
ARC_CLUSTERS=$(aws route53-recovery-control-config list-clusters \
--region $AWS_REGION \
--query "length(Clusters[?contains(Name,'route53-arc')])" \
--output text 2>/dev/null)
[ "${ARC_CLUSTERS:-0}" = "0" ] \
&& echo "✅ Sin ARC Clusters activos" \
|| echo "⚠️ Quedan $ARC_CLUSTERS ARC Clusters — puede estar aún eliminándose"
# Amplify
AMPLIFY_COUNT=$(aws amplify list-apps --region $AWS_REGION \
--query "length(apps[?name=='route53-arc-fallback'])" \
--output text 2>/dev/null)
[ "${AMPLIFY_COUNT:-0}" = "0" ] \
&& echo "✅ Sin apps Amplify activas" \
|| echo "⚠️ App Amplify 'route53-arc-fallback' aún existe"
echo ""
echo "🎉 ¡Limpieza completa! Gracias por realizar el AWS Route 53 ARC Workshop de roLearning."Información
Si querés repetir el workshop: esperá al menos 5 minutos después de que todos los recursos estén eliminados antes de volver a deployar. Algunos recursos como el ARC Cluster tienen nombres fijos (route53-arc-workshop-cluster) y AWS puede tardar en liberar el nombre después del delete.
roLearning – ReadOnly Friday Learning Days