Обновление: мне удалось настроить целевую группу с помощью Terraform, но пока не нашел эту опцию на консоли AWS.
resource "aws_ecs_service" "multiple_target_example" {
name = "multiple_target_example1"
cluster = "${aws_ecs_cluster.main.id}"
task_definition = "${aws_ecs_task_definition.with_lb_changes.arn}"
desired_count = 1
iam_role = "${aws_iam_role.ecs_service.name}"
load_balancer {
target_group_arn = "${aws_lb_target_group.target2.id}"
container_name = "ghost"
container_port = "3000"
}
load_balancer {
target_group_arn = "${aws_lb_target_group.target2.id}"
container_name = "ghost"
container_port = "3001"
}
depends_on = [
"aws_iam_role_policy.ecs_service",
]
}
Примечание к версии: поддержка нескольких блоков конфигурации load_balancer была добавлена в Terraform AWS Provider версии 2.22.0.
ecs_service_terraform
Я не могу сказать, что это будет хороший обходной путь, но я работал над проектом, в котором мне нужно было запустить Ejabberd с помощью AWS ECS, но та же проблема возникла, когда пришло время привязать порт службы к балансировщику нагрузки.
Я работал с terraform, и из-за этого ограничения AWS ECS мы соглашаемся запускать один контейнер для каждого экземпляра, чтобы решить проблему с портом, поскольку мы должны были открыть два порта.
Если вы не хотите назначать динамический порт своему контейнеру и хотите запускать один контейнер на экземпляр, решение определенно сработает.
Создайте целевую группу и укажите второй порт контейнера.
Перейдите в AutoScalingGroups вашего кластера ECS.
Отредактируйте и добавьте вновь созданную целевую группу в группу Autoscaling кластера ECS.
Таким образом, если вы масштабируете до двух контейнеров, это означает, что будет два экземпляра, поэтому новый запускаемый экземпляр будет регистрироваться во второй целевой группе, а группа автомасштабирования позаботится об этом. В моем случае этот подход работает нормально, но нужно учитывать несколько моментов.
Не привязывайте основной порт к цели, лучше привязать основной порт к службе ALB. Основным преимуществом этого подхода будет то, что если ваш контейнер не ответил на проверку работоспособности AWS, контейнер будет перезапущен автоматически. Поскольку проверка работоспособности целевой группы не будет воссоздавать ваш контейнер.
Этот подход не будет работать, если в контейнере Docker есть динамический порт.
AWS следует обновить свой агент ECS для обработки такого сценария.
person
Adiii
schedule
29.08.2019