Я начал с этого учебного руководства, которое послужило основой для создания среды AWS: http://blog.shippable.com/setup-a-container-cluster-on-aws-with-terraform-part-2-provision-a-cluster
В настоящее время у меня есть 2 службы, запускающие 2 контейнера каждый на 2 экземплярах EC2 за 2 балансировщиками нагрузки (по 1 на каждую службу). Я пытаюсь добавить вторую зарегистрированную цель с другим портом к целевой группе и указать ее на один из моих контейнеров. Слушателя было легко добавить в ALB, но я не могу понять, как добавить вторую цель, чтобы динамически указывать на экземпляр, выполняющий мой сервис.
В пользовательском интерфейсе я могу только вручную указать его на экземпляр AWS, а не динамически указывать на тот экземпляр, на котором запущен мой сервис.
Следующее выглядит так, как будто оно должно работать, но поскольку мои контейнеры создаются внутри задач, у меня нет доступа к идентификатору контейнера, на который можно указать target_ip, и он не может быть указан для службы.
resource "aws_alb_target_group_attachment" "test" {
target_group_arn = "${aws_alb_target_group.ecs-target-group.arn}"
target_id = "${aws_ecs_task_definition.test.id}"
port = 5000
}
Вот еще несколько терраформ кода для контекста:
resource "aws_alb" "ecs-load-balancer" {
name = "ecs-load-balancer"
security_groups = ["${aws_security_group.test_public_sg.id}"]
subnets = ["${aws_subnet.test_public_sn_01.id}", "${aws_subnet.test_public_sn_02.id}"]
tags {
Name = "ecs-load-balancer"
}
}
resource "aws_alb_target_group" "ecs-target-group" {
name = "ecs-target-group"
port = "80"
protocol = "HTTP"
vpc_id = "${aws_vpc.test_vpc.id}"
health_check {
healthy_threshold = "5"
unhealthy_threshold = "2"
interval = "30"
matcher = "200"
path = "/"
port = "traffic-port"
protocol = "HTTP"
timeout = "5"
}
tags {
Name = "ecs-target-group"
}
}
resource "aws_alb_listener" "alb-listener" {
load_balancer_arn = "${aws_alb.ecs-load-balancer.arn}"
port = "80"
protocol = "HTTP"
default_action {
target_group_arn = "${aws_alb_target_group.ecs-target-group.arn}"
type = "forward"
}
}
resource "aws_alb_listener" "alb-listener-vemcoio" {
load_balancer_arn = "${aws_alb.ecs-load-balancer.arn}"
port = "5000"
protocol = "HTTP"
default_action {
target_group_arn = "${aws_alb_target_group.ecs-target-group.arn}"
type = "forward"
}
}
resource "aws_ecs_task_definition" "test" {
family = "test"
container_definitions = "${data.template_file.test.rendered}"
}
data "template_file" "test" {
depends_on = ["aws_instance.mongodb_one"]
template = "${file("task-definitions/test.json")}"
vars {
mongo_ip = "${aws_instance.mongodb_one.private_ip}"
}
}