Изменение мощности политикой масштабирования

AWSBeginner
Практиковаться сейчас

Введение

Приложению иногда нужно больше серверов, а позже меньше. Вы определите две политики, увеличите группу с двух до трёх и вернётесь к двум. Проверите HTTP-ответы и ограничение дальнейших изменений границами группы.

Нужно знать шаблоны, группы Auto Scaling и проверки ALB. Новая среда предоставляет независимую исправную группу application-fleet из двух экземпляров, шаблон, сеть и ALB. Старые ресурсы не используются.

Связь с сертификацией

Начальная практика для SAA-C03 Domain 2 и SOA-C03 Domain 2: мощность Auto Scaling, действия масштабирования и интеграция ALB.

Определение политик

Изучите группу и создайте политики без изменения мощности.

Перейдите в рабочую папку и проверьте начальную мощность:

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"

Ожидайте минимум 2, желаемое 2, максимум 3 и две исправные цели в AWS View. Политика масштабирования определяет изменение. ChangeInCapacity меняет абсолютное количество: 1 добавляет сервер, -1 удаляет один.

Создайте две политики SimpleScaling. Период охлаждения обычно позволяет действию стабилизироваться до следующего срабатывания сигнализации. Сохраните 30 секунд:

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}'

Создание не выполняет политику. Здесь явный вызов с --no-honor-cooldown показывает управляемые переходы. Временное соблюдение cooldown и сигнализация CloudWatch не демонстрируются. В рабочей системе политики по метрикам используют сигнализацию, а target tracking следует целевому значению. Автоматическая обратная связь и нагрузка CPU не проверяются.

Увеличение до трёх серверов

Выполните положительную политику и подтвердите реальные ответы дополнительного сервера.

Scale-out добавляет экземпляры. Выполните политику и дождитесь 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}'

Ожидайте мощность 3 и три текущих ID. Группа запускает новый сервер по шаблону и автоматически регистрирует его.

Повторно выполните политику на максимуме и проверьте мощность:

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}'

Мощность остаётся 3; изменение не превышает максимум группы. Ограничивается число серверов, не запросы на сервер.

Отправьте девять запросов и сравните IDs с тремя текущими экземплярами:

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

В AWS View подтвердите желаемое 3, три исправные цели и реальные ответы 200 всех IDs через Send request. Новая запись API не доказывает обслуживание трафика.

Три обслуживающих экземпляра

Пример: желаемая мощность три, дополнительный сервер отвечает HTTP 200. Ваши IDs будут другими.

Сокращение с сохранением минимума

Уменьшите мощность и подтвердите доступность двух серверов.

Scale-in удаляет экземпляры. Выполните отрицательную политику и дождитесь исправных текущих целей:

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}'

Ожидайте два текущих ID и один экземпляр terminated. Удаляемый сервер выбирает группа; это не всегда самый новый. Удалённый экземпляр не должен оставаться в активных целях.

Повторно выполните отрицательную политику на минимуме и проверьте мощность:

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}'

Желаемое остаётся 2; политика не опускает группу ниже минимума. Отправьте шесть запросов оставшимся серверам:

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

В AWS View подтвердите две исправные цели и ответы 200 обоих текущих IDs. Завершённый ID не появляется в новых ответах. Проверяются жизненный цикл и маршрутизация, а не время дренирования или сохранение сеансов.

Удаление политик с сохранением группы

Удалите свои политики после возвращения предоставленной группы к двум серверам.

Удалите обе политики и проверьте оставшийся список:

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}'

Список должен быть [], группа — минимум 2, желаемое 2, максимум 3. Удаление политик не завершает существующие экземпляры. Сохраните группу, шаблон, ALB и сеть; AWS View должен показывать два исправных сервера.

Итоги

Вы определили положительную и отрицательную простые политики, наблюдали реальное увеличение с двух до трёх и сокращение до двух, проверили границы. HTTP-ответы и нативное завершение подтвердили результат. Затем политики удалены, восстановленная группа сохранена.

Вы различаете настройку, явное выполнение и запуск по метрике. Задание применяет диагностику маршрутов и состояния к новому серверу без трафика.