Я использую Terraform для развертываний AWS, и в настоящее время я пытаюсь связать функцию Lambda с масштабируемым поведением кластера ECS. Это работает в целом, но сроки вещей недопустимы. В моей последней попытке кластер растет в 13:11, 13:14, 13:17 и в 13:20, но функция Lambda запускается в 13:11, 13:36, 13:38 и 13:56. 1001 *
Я ищу решение, где лямбда-функция запускается (примерно) при масштабировании кластера, то есть порождает дополнительные экземпляры EC2).
Мой подход работает так:
- Кластер ECS состоит из одного
aws_autoscaling_group
и одного ELB.
- Для группы автоматического масштабирования я создал
aws_autoscaling_policy
с
adjustment_type = "ChangeInCapacity"
и
scaling_adjustment = "5"
- Для масштабирования этого кластера выделено
aws_sns_topic
- Я запускаю группу автоматического масштабирования и публикую в теме SNS в том же
aws_cloudwatch_metric_alarm
:
resource "aws_cloudwatch_metric_alarm" "ecs_grow" {
[...]
comparison_operator = "GreaterThanOrEqualToThreshold"
namespace = "AWS/ECS"
metric_name = "CPUUtilization"
threshold = "16"
statistic = "Average"
period = "60"
evaluation_periods = "1"
alarm_actions = [
"${aws_autoscaling_policy.grow_policy.arn}",
"${aws_sns_topic.scaling_topic.arn}"
]
}
Функция Lambda в настоящее время только записывает событие в журнал.
С этой настройкой я генерирую нагрузку на свой кластер, чтобы он масштабировался каждые 3 минуты. Я могу подтвердить, что это работает, посмотрев метрики Cloudwatch GroupDesiredCapacity
GroupTotalInstances
и, конечно, EC2 показывает, что консоль AWS показывает мне. Действительно, кластер растет каждые 3 минуты на 5 раз.
Я начал с 5 экземпляров и позволил кластеру масштабироваться 4 раза. Это означает, что в конце у меня был кластер с 25 экземплярами. В моих показателях Cloudwatch я вижу, как график GroupDesiredCapacity
поднимается на 5 в 13:11, 13:14, 13:17 и в 13:20, как и ожидалось, и в соответствии с тем, что я вижу на консоли AWS.
Моя проблема в том, что лямбда-функция срабатывает только в конце концов. Я получаю записи в журнале в 13:11, 13:36, 13:38 и 13:56.
Что меня действительно смущает, так это то, что StateChangeTime
, о которых сообщают аварийные сигналы, - это 13:11, 13:36, 13:38 и 13:56. Таким образом, может показаться, что функция Lambda действительно запускается, как только сообщения публикуются.
Откуда происходит это несоответствие между срабатыванием политики автомасштабирования и публикацией сообщений? Что еще более важно, как я выровняю два?