Cambiar capacidad con una política de escalado

AWSBeginner
Practicar Ahora

Introducción

Una aplicación puede necesitar más servidores y luego menos. Definirás dos políticas, ampliarás la flota de dos a tres y volverás a dos. Verificarás respuestas HTTP reales y cómo los límites impiden seguir aumentando o reduciendo.

Debes conocer plantillas, grupos Auto Scaling y comprobaciones ALB. Este entorno nuevo proporciona un grupo saludable independiente application-fleet de dos instancias, plantilla, red y balanceador. No reutiliza recursos anteriores.

Relación con certificaciones

Ofrece práctica introductoria de SAA-C03 Domain 2 y SOA-C03 Domain 2: capacidad Auto Scaling, acciones de escalado e integración del balanceador.

Definir políticas de escalado

Inspeccionarás la flota y crearás políticas sin cambiar capacidad.

Entra en el directorio y consulta la capacidad inicial:

cd /home/labex/project

aws autoscaling \
  describe-auto-scaling-groups \
  --auto-scaling-group-names application-fleet \
  --query 'AutoScalingGroups[].{Min:MinSize,Desired:DesiredCapacity,Max:MaxSize,Instances:Instances[].InstanceId}'

TG_ARN=$(aws elbv2 \
  describe-target-groups \
  --names application-targets \
  --query 'TargetGroups[0].TargetGroupArn' \
  --output text)

LB_DNS=$(aws elbv2 \
  describe-load-balancers \
  --names application-alb \
  --query 'LoadBalancers[0].DNSName' \
  --output text)

aws elbv2 \
  wait target-in-service \
  --target-group-arn "$TG_ARN"

Espera mínimo 2, deseado 2, máximo 3 y dos destinos saludables en AWS View. Una política de escalado define el ajuste. ChangeInCapacity cambia una cantidad absoluta: 1 añade un servidor; -1 quita uno.

Crea dos políticas SimpleScaling. El tiempo de espera normalmente permite estabilizar una acción antes de otra activada por alarma. Guarda 30 segundos:

aws autoscaling \
  put-scaling-policy \
  --auto-scaling-group-name application-fleet \
  --policy-name add-one-server \
  --policy-type SimpleScaling \
  --adjustment-type ChangeInCapacity \
  --scaling-adjustment 1 \
  --cooldown 30

aws autoscaling \
  put-scaling-policy \
  --auto-scaling-group-name application-fleet \
  --policy-name remove-one-server \
  --policy-type SimpleScaling \
  --adjustment-type ChangeInCapacity \
  --scaling-adjustment -1 \
  --cooldown 30

aws autoscaling \
  describe-policies \
  --auto-scaling-group-name application-fleet \
  --query 'ScalingPolicies[].{Name:PolicyName,Type:PolicyType,Adjustment:ScalingAdjustment,Cooldown:Cooldown}'

Crear políticas no las ejecuta. Aquí se invocan con --no-honor-cooldown para observar cambios controlados. No demuestra el cumplimiento temporal del cooldown ni alarmas CloudWatch. En producción, las políticas por métricas usan alarmas; target tracking sigue un valor objetivo. Aquí no se prueba retroalimentación automática ni carga CPU.

Ampliar a tres servidores

Ejecutarás la política positiva y verificarás que el servidor adicional atiende solicitudes reales.

Scale-out añade instancias. Ejecuta la política y espera la disponibilidad ALB:

aws autoscaling \
  execute-policy \
  --auto-scaling-group-name application-fleet \
  --policy-name add-one-server \
  --no-honor-cooldown

aws elbv2 \
  wait target-in-service \
  --target-group-arn "$TG_ARN"

aws autoscaling \
  describe-auto-scaling-groups \
  --auto-scaling-group-names application-fleet \
  --query 'AutoScalingGroups[].{Desired:DesiredCapacity,Max:MaxSize,Instances:Instances[].InstanceId}'

Espera capacidad 3 y tres IDs actuales. El grupo utiliza su plantilla para el nuevo servidor y lo registra automáticamente.

Ejecuta de nuevo la política en el máximo y consulta capacidad:

aws autoscaling \
  execute-policy \
  --auto-scaling-group-name application-fleet \
  --policy-name add-one-server \
  --no-honor-cooldown

aws autoscaling \
  describe-auto-scaling-groups \
  --auto-scaling-group-names application-fleet \
  --query 'AutoScalingGroups[].{Desired:DesiredCapacity,Max:MaxSize,Instances:Instances[].InstanceId}'

La capacidad sigue 3; el ajuste no supera el máximo del grupo. El límite controla servidores, no solicitudes por servidor.

Envía nueve solicitudes y compara los IDs con los tres servidores actuales:

for request in 1 2 3 4 5 6 7 8 9; do
  curl --config client.conf -sS "http://$LB_DNS/health"
  echo
done

Abre AWS View. Confirma deseado 3, tres destinos saludables y respuestas reales 200 de todos con Send request. Un recurso añadido en la API no demuestra que atienda tráfico.

Tres instancias atendiendo

Ejemplo: capacidad deseada tres y el servidor adicional devuelve HTTP 200. Tus IDs serán distintos.

Reducir y conservar el mínimo

Reducirás capacidad y confirmarás que dos servidores siguen disponibles.

Scale-in elimina instancias. Ejecuta la política negativa y espera destinos saludables:

aws autoscaling \
  execute-policy \
  --auto-scaling-group-name application-fleet \
  --policy-name remove-one-server \
  --no-honor-cooldown

aws elbv2 \
  wait target-in-service \
  --target-group-arn "$TG_ARN"

aws autoscaling \
  describe-auto-scaling-groups \
  --auto-scaling-group-names application-fleet \
  --query 'AutoScalingGroups[].{Min:MinSize,Desired:DesiredCapacity,Instances:Instances[].InstanceId}'

aws ec2 \
  describe-instances \
  --filters "Name=tag:aws:autoscaling:groupName,Values=application-fleet" \
  --query 'Reservations[].Instances[].{Instance:InstanceId,State:State.Name}'

Espera dos IDs actuales y una instancia terminated. El grupo elige cuál quitar; no supongas que siempre elimina la más reciente. La eliminada no debe formar parte de los destinos activos.

Ejecuta de nuevo la política negativa en el mínimo y consulta capacidad:

aws autoscaling \
  execute-policy \
  --auto-scaling-group-name application-fleet \
  --policy-name remove-one-server \
  --no-honor-cooldown

aws autoscaling \
  describe-auto-scaling-groups \
  --auto-scaling-group-names application-fleet \
  --query 'AutoScalingGroups[].{Min:MinSize,Desired:DesiredCapacity,Instances:Instances[].InstanceId}'

El deseado sigue 2; la política no reduce por debajo del mínimo. Envía seis solicitudes para probar la flota restante:

for request in 1 2 3 4 5 6; do
  curl --config client.conf -sS "http://$LB_DNS/health"
  echo
done

En AWS View, confirma dos destinos saludables y respuestas 200 de ambos IDs actuales. El ID terminado no debe aparecer en nuevas respuestas. Se comprueba ciclo de vida y rutas, no tiempos de drenaje ni conservación de sesiones.

Eliminar políticas y conservar la flota

Eliminarás las políticas tras devolver la flota proporcionada a dos servidores.

Elimina ambas políticas y consulta el inventario restante:

aws autoscaling \
  delete-policy \
  --auto-scaling-group-name application-fleet \
  --policy-name add-one-server

aws autoscaling \
  delete-policy \
  --auto-scaling-group-name application-fleet \
  --policy-name remove-one-server

aws autoscaling \
  describe-policies \
  --auto-scaling-group-name application-fleet \
  --query 'ScalingPolicies[].PolicyName'

aws autoscaling \
  describe-auto-scaling-groups \
  --auto-scaling-group-names application-fleet \
  --query 'AutoScalingGroups[].{Min:MinSize,Desired:DesiredCapacity,Max:MaxSize}'

La lista debe ser [] y el grupo debe conservar mínimo 2, deseado 2, máximo 3. Eliminar políticas no termina la flota existente. Conserva grupo, plantilla, balanceador y red; AWS View debe mostrar dos servidores saludables.

Resumen

Definiste políticas simples positivas y negativas, observaste ampliación real de dos a tres y reducción a dos, y probaste ambos límites. Verificaste HTTP real y terminación nativa, luego eliminaste políticas conservando la flota restaurada.

Ya puedes distinguir configuración, ejecución explícita y activación por métricas. El desafío aplica diagnóstico de rutas y salud a un servidor nuevo que no recibe tráfico.