#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