Автоматическое масштабирование при недостаточном количестве данных

#amazon-web-services #autoscaling

#amazon-веб-службы #автоматическое масштабирование

Вопрос:

У нас есть службы ECS с настроенным автоматическим масштабированием. Рабочий процесс автоматического масштабирования должен быть таким:

  • если за 1 минуту мы получаем более 10 значений, нам нужно увеличить масштаб
  • подождите 10 минут
  • если нет значений, нам нужно уменьшить масштаб

Увеличение работает идеально, но уменьшение не работает вообще. Мы получаем это:

 Failed to execute action arn:aws:autoscaling:eu-central-1:BLA-BLA-BLA-fargate-scale-down. Received error: ""
  

Вероятно, это связано с тем, что в terraform для resource "aws_appautoscaling_policy" "down" у нас есть следующее:

     step_adjustment {
      metric_interval_lower_bound = ""
      metric_interval_upper_bound = 0
      scaling_adjustment          = -100
    }
  

и он ожидает «0» вместо «нет данных».

В resource "aws_cloudwatch_metric_alarm" "cloudwatch_metric_alarm_down" :

   treat_missing_data = "breaching"

  insufficient_data_actions = [aws_appautoscaling_policy.down.arn]
  

Есть ли какое-либо решение для этого? За исключением того, что один раз в минуту вручную отправляется «0».

Комментарии:

1. Это именно то, что я тоже пытаюсь сделать — вы нашли решение для этого?

2. Пока нет. Я задал тот же вопрос на форуме AWS, но также не получил никакого ответа.

3. Это все? Похоже, на него был дан ответ forums.aws.amazon.com/thread.jspa?messageID=956586amp;#956586

4. ДА. Итак, на этот вопрос был дан ответ. Вы пробовали это?

Ответ №1:

Решение заключается:

 resource "aws_cloudwatch_metric_alarm" "cloudwatch_metric_alarm_down" {
  alarm_name          = "${local.name}-ecs-alarm-down"
  comparison_operator = "LessThanOrEqualToThreshold"
  evaluation_periods  = var.evaluation_periods_down
  threshold           = var.downscale_threshold

  metric_query {
    id          = "e1"
    expression  = "FILL(m1, 0)"
    label       = "0 if NoData"
    return_data = "true"
  }

  metric_query {
    id = "m1"
    metric {
      metric_name = var.metric_name
      namespace   = var.env_name
      period      = "60"
      stat        = var.metric_statistic
    }
  }

  alarm_actions = [aws_appautoscaling_policy.down.arn]

  depends_on = [aws_appautoscaling_policy.down]
}
  

Подробнее о FILL() здесь https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/using-metric-math.html#metric-math-syntax-functions-list