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

При создании политики автомасштабирования ECS вместе с ней появляются два сигнала тревоги: один для увеличения масштаба ("out"), другой для уменьшения ("in").

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

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

Я могу настроить частоту выборки и необходимое количество точек данных через веб-интерфейс консоли 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? Требует ли это героических усилий?

0
задан 23 June 2021 в 13:47
1 ответ

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

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

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

Политики масштабирования для нашего ASG:
resource "aws_autoscaling_policy" "my-cpu-scale-up" {
  name = "my-cpu-scale-up"
  scaling_adjustment = 1
  adjustment_type = "ChangeInCapacity"
  cooldown = 60
  autoscaling_group_name = aws_autoscaling_group.[your-asg-resource].name
}

resource "aws_autoscaling_policy" "my-cpu-scale-down" {
  name = "my-cpu-scale-down"
  scaling_adjustment = -1
  adjustment_type = "ChangeInCapacity"
  cooldown = 300
  autoscaling_group_name = aws_autoscaling_group.[your-asg-resource].name
}
Аварийные сигналы CloudWatch, которые вызовут одну из наших политик.
resource "aws_cloudwatch_metric_alarm" "my-cpu-usage-high" {
  alarm_name = "my-cpu-usage-high"
  comparison_operator = "GreaterThanOrEqualToThreshold"
  evaluation_periods = "2"
  metric_name = "CPUUtilization"
  namespace = "AWS/EC2"
  period = "60" // in seconds
  statistic = "Average"
  threshold = "70" // in %
  alarm_description = "This metric monitors the cluster for high CPU usage"
  alarm_actions = [
    aws_autoscaling_policy.my-cpu-scale-up.arn
  ]
  dimensions ={
    AutoScalingGroupName= aws_autoscaling_group.[your-asg-resource].name
  }
}

resource "aws_cloudwatch_metric_alarm" "my-cpu-usage-low" {
  alarm_name = "my-cpu-usage-low"
  comparison_operator = "LessThanOrEqualToThreshold"
  evaluation_periods = "2"
  metric_name = "CPUUtilization"
  namespace = "AWS/EC2"
  period = "60"
  statistic = "Average"
  threshold = "20"
  alarm_description = "This metric monitors my cluster for low CPU usage"
  alarm_actions = [
    aws_autoscaling_policy.my-cpu-scale-down.arn
  ]
  dimensions ={
    AutoScalingGroupName= aws_autoscaling_group.[your-asg-resource].name
  }
}

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

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

1
ответ дан 28 July 2021 в 14:06

Теги

Похожие вопросы