Сбой автоматического масштабирования AWS ECS иногда из-за тревоги, созданной terraform

#amazon-web-services #alarm #autoscaling #amazon-cloudwatch-metrics #amazon-cloudwatch

#amazon-веб-сервисы #тревога #автоматическое масштабирование #amazon-cloudwatch-метрики #amazon-cloudwatch

Вопрос:

Я определил аварийный сигнал CloudWatch для масштабирования AWS ECS при уменьшении масштаба.

Обычно это работает нормально. но иногда это приводит к сбою с приведенной ниже ошибкой. 500 — это пороговое значение для масштабирования. Время измерения — каждые 5 минут. и точка данных масштабирования равна 1 из 2 (означает, что одно значение превышает пороговое значение за 10 минут):

«ошибка»: «Не найдена корректировка шага для значения показателя [437.08774491907025, 516.9558339660845] и порога нарушения 500.0»

Настройка шага определяется следующим образом:

  step_adjustment {
      metric_interval_lower_bound = 0
      scaling_adjustment          = 1
    }
  

Конфигурация аварийного сигнала:

 datapoints_to_alarm         = "1"
  evaluation_periods        = "2"
  threshold                 = "500"
  

Код Terraform для создания тревоги

 resource "aws_appautoscaling_policy" "task_count_up" {
  name               = "appScalingPolicy_${aws_ecs_service.sqs_to_kinesis.name}_ScaleUp"
  service_namespace  = "ecs"
  resource_id        = "service/${aws_ecs_cluster.shared-elb-access-logs-processor.name}/${aws_ecs_service.sqs_to_kinesis.name}"
  scalable_dimension = "ecs:service:DesiredCount"

  step_scaling_policy_configuration {
    adjustment_type         = "ChangeInCapacity"
    cooldown                = "${var.scale_up_cooldown_seconds}"
    metric_aggregation_type = "Maximum"

    step_adjustment {
      metric_interval_lower_bound = 0
      scaling_adjustment          = 1
    }

  }

  depends_on = [
    "aws_appautoscaling_target.main",
  ]
}

resource "aws_appautoscaling_policy" "task_count_down" {
  name               = "appScalingPolicy_${aws_ecs_service.sqs_to_kinesis.name}_ScaleDown"
  service_namespace  = "ecs"
  resource_id        = "service/${aws_ecs_cluster.shared-elb-access-logs-processor.name}/${aws_ecs_service.sqs_to_kinesis.name}"
  scalable_dimension = "ecs:service:DesiredCount"

  step_scaling_policy_configuration {
    adjustment_type         = "ChangeInCapacity"
    cooldown                = "${var.scale_down_cooldown_seconds}"
    metric_aggregation_type = "Minimum"

    step_adjustment {
      metric_interval_upper_bound = 0
      scaling_adjustment          = -1
    }

  }

  depends_on = [
    "aws_appautoscaling_target.main",
  ]
}
  

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

1. Если у вас есть только одно определение масштабирования, вам следует рассмотреть возможность использования «простого» масштабирования вместо «пошагового» масштабирования. Пошаговое масштабирование способно ускорить масштабирование при превышении пороговых значений с более высоким значением. Смотрите: Динамическое масштабирование для автоматического масштабирования Amazon EC2 — Автоматическое масштабирование Amazon EC2

2. Мне нужно использовать «aws_appautoscaling_policy» в terraform для масштабирования кластера ECS Fargate. В этом случае policy_type = «SimpleScaling» не поддерживается.

3. Вы не упомянули ни Terraform, ни ECS в своем вопросе. Пожалуйста, отредактируйте его, чтобы предоставить полную информацию.

4. готово, добавлен код terraform для создания тревоги