Из того, что я прочитал здесь Поставщики ресурсов ECS должны (как правило) предотвращать немедленный сбой задач из-за ограничений ресурсов, переводя их в состояние «Инициализация» и запуская новый экземпляр EC2.
Это означает, например, что если вы вызываете API RunTask, а задачи не размещаются на экземпляре из-за нехватки ресурсов (это означает, что ни один из активных экземпляров не имеет достаточно памяти, виртуальных ЦП, портов, ENI и/или графических процессоров для запуска задачи), вместо немедленного сбоя задача перейдет в состояние подготовки (обратите внимание, однако, что переход к подготовке происходит только в том случае, если вы включили управляемое масштабирование для поставщика емкости; в противном случае задачи, которые не могут найти емкость, немедленно завершатся с ошибкой, как это было раньше).
Я настроил кластер ECS с группой автоматического масштабирования и поставщиком емкости ECS в terraform. Группа автомасштабирования устанавливается с минимальный_размер = 1
и он сразу запускает один экземпляр... поэтому я уверен, что моя конфигурация запуска в порядке.
Однако, когда я неоднократно вызываю «RunTask» через API (задачи с память=128
), я получаю задачи, которые не запускаются сразу по причине РЕСУРС: ПАМЯТЬ
. Также не запускаются новые экземпляры.
Я не могу понять, что я неправильно настроил.
Все это было настроено в terraform:
ресурс "aws_ecs_cluster" "ecs_cluster" {
имя = local.cluster_name
параметр {
имя = "КонтейнерИнсайтс"
значение = "включено"
}
теги = переменные.теги
capacity_providers = [aws_ecs_capacity_provider.capacity_provider.name]
# Я добавил это, чтобы запустить новый экземпляр
default_capacity_provider_strategy {
capacity_provider = aws_ecs_capacity_provider.capacity_provider.name
}
}
ресурс "aws_ecs_capacity_provider" "capacity_provider" {
name = "${var.tags.PlatformName}-стек-${var.tags.Environment}"
auto_scaling_group_provider {
auto_scaling_group_arn = aws_autoscaling_group.autoscaling_group.arn
управляемая_терминация_защита = "ОТКЛЮЧЕНО"
управляемое_масштабирование {
максимальный_масштабирующий_шаг_размер = 4
минимальный_масштаб_шаг_размер = 1
статус = "ВКЛЮЧЕНО"
целевая_емкость = 100
}
}
теги = переменные.теги
}
#вычислить
ресурс "aws_autoscaling_group" "autoscaling_group" {
name = "${var.tags.PlatformName}-${var.tags.Environment}"
# Если мы не используем его, давайте не будем платить за него
минимальный_размер = "1"
max_size = var.ecs_max_size
launch_configuration = aws_launch_configuration.launch_config.name
health_check_grace_period = 60
default_cooldown = 30
termination_policies = ["Старейший экземпляр"]
vpc_zone_identifier = локальные.подсети
Protect_from_scale_in = ложь
тег {
ключ = "Имя"
значение = "${var.tags.PlatformName}-${var.tags.Environment}"
propagate_at_launch = истина
}
тег {
ключ = "AmazonECSManaged"
значение = ""
propagate_at_launch = истина
}
динамический "тег" {
for_each = переменные.теги
содержание {
ключ = тег.ключ
propagate_at_launch = истина
значение = тег.значение
}
}
enable_metrics = [
"Желаемая мощность группы",
"Групповые сервисные экземпляры",
«Максимальный размер группы»,
"ГруппаМин.Размер",
"Групповые ожидающие экземпляры",
«Групповые резервные экземпляры»,
"Групповые терминирующие экземпляры",
"Всего экземпляров группы",
]
}