Рейтинг:0

Как минимизировать время реакции автомасштабирования ecs от terraform?

флаг us

Когда вы создаете политику автоматического масштабирования ECS, вместе с ней помечаются два сигнала тревоги: один для увеличения масштаба («исход»), а другой для уменьшения масштаба («вход»).

Масштабируемые, которые я вижу, создаются, по-видимому, отбирают загрузку ЦП (или интересующую метрику) каждую минуту и ​​запускают автоматическое масштабирование только тогда, когда три последовательных точки данных превышают пороговое значение.

Это означает, что если я увижу всплеск трафика, пройдет три минуты, прежде чем произойдет горизонтальное масштабирование. (На самом деле, в среднем нарушение порога происходит в середине интервала выборки, поэтому задержка составляет три с половиной минуты.)

Я могу настроить частоту дискретизации и необходимое количество точек данных через веб-интерфейс консоли AWS.

Однако я хотел бы управлять своей инфраструктурой через Terraform.

Как я могу использовать Terraform, но без ручного клика, чтобы сократить время между (а) первым нарушением порога; и (б) момент времени, когда я начинаю масштабирование? (Также: глупо ли это пытаться? Я собираюсь сделать это с помощью awk-basscards?)

Насколько я могу судить, это похоже на катание на коньках в гору: создание политик автомасштабирования (что я могу сделать через Terraform) автоматически создает два аларма и возвращает им дескрипторы (см. https://docs.aws.amazon.com/autoscaling/application/APIReference/API_PutScalingPolicy.html), но Terraform не предоставляет эти дескрипторы (см. https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/appautoscaling_policy#attributes-reference). Это все еще возможно в Terraform? Требует ли это героических усилий?

Рейтинг:1
флаг au

Вы определенно можете добиться этого с помощью Terraform. Есть несколько способов добиться этого, но я сосредоточусь на том, который дает вам больше гибкости.

Допустим, у вас уже есть aws_autoscaling_group определен ресурс, после чего вам необходимо определить политики масштабирования для вашего ASG и CloudWatch сигналы тревоги, которые их вызывают. Обычно я отслеживаю 3 разных показателя автомасштабирования: MemoryReservation, CPUReservation и CPUUtilization.

Пример настройки автомасштабирования на основе CPUUtilization.

Политики масштабирования для нашего ASG:
ресурс "aws_autoscaling_policy" "масштабирование моего процессора" {
  имя = "мой-процессор-расширение"
  масштабирование_настройка = 1
  Adjustment_type = "ChangeInCapacity"
  время восстановления = 60
  autoscaling_group_name = aws_autoscaling_group.[ваш-asg-ресурс].name
}

ресурс "aws_autoscaling_policy" "масштабирование моего процессора" {
  name = "мой-процессор-уменьшение масштаба"
  масштабирование_настройка = -1
  Adjustment_type = "ChangeInCapacity"
  время восстановления = 300
  autoscaling_group_name = aws_autoscaling_group.[ваш-asg-ресурс].name
}
Оповещения CloudWatch, которые активируют одну из наших политик.
ресурс "aws_cloudwatch_metric_alarm" "мой-процессор-высокий" {
  alarm_name = "мой-процессор-высокий"
  compare_operator = "БольшеЧемОрравноПорогу"
  оценка_периодов = "2"
  metric_name = "Утилизация ЦП"
  пространство имен = "AWS/EC2"
  период = "60" // в секундах
  статистика = "Среднее"
  порог = "70" // в %
  alarm_description = "Эта метрика отслеживает высокую загрузку ЦП в кластере"
  тревога_действия = [
    aws_autoscaling_policy.my-cpu-scale-up.arn
  ]
  размеры = {
    AutoScalingGroupName= aws_autoscaling_group.[your-asg-resource].name
  }
}

ресурс "aws_cloudwatch_metric_alarm" "мой-процессор-низкий" {
  alarm_name = "мой-процессор-низкий"
  compare_operator = "МеньшеЧемОрравноПорогу"
  оценка_периодов = "2"
  metric_name = "Утилизация ЦП"
  пространство имен = "AWS/EC2"
  период = "60"
  статистика = "Среднее"
  порог = "20"
  alarm_description = "Эта метрика отслеживает низкий уровень использования ЦП в моем кластере"
  тревога_действия = [
    aws_autoscaling_policy.my-cpu-scale-down.arn
  ]
  размеры = {
    AutoScalingGroupName= aws_autoscaling_group.[your-asg-resource].name
  }
}

Как видно из этого примера, мы можем экспериментировать с конфигурацией сигналов тревоги, пока не достигнем желаемого результата.

Надеюсь, это поможет!

Jonas Kölker avatar
флаг us
Это пошаговое масштабирование, да, а не отслеживание цели? Наше собственное исследование показывает, что решения без пошагового масштабирования не будут соответствовать тому, чего мы хотим достичь, поэтому приятно слышать, что решения с пошаговым масштабированием будут (или, по крайней мере, могут; я даже не знаю всех требований, поэтому я только с учетом известных релевантных).
Vitalii Strimbanu avatar
флаг au
@JonasKölker да, это подход ступенчатого масштабирования. Как пошаговое масштабирование, так и отслеживание целей имеют свое применение, поэтому вам придется выбирать в зависимости от ваших требований. Например, я использую отслеживание целей для некоторых сервисов ECS, чтобы поддерживать в среднем 1К запросов в минуту для каждой задачи.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.