我从这个可发布的教程开始,作为创建我的亚马逊网络服务环境的基础:http://blog.shippable.com/setup-a-container-cluster-on-aws-with-terraform-part-2-provision-a-cluster
现在,我有2个服务,每个服务在2个负载均衡器后面的2个EC2实例上运行2个容器(每个服务1个)。我正在尝试将具有不同端口的第二个注册目标添加到目标组,并将其指向我的一个容器。侦听器很容易添加到ALB中,但是我似乎不知道如何添加第二个目标来动态地指向运行我的服务的实例。
在UI中,我只能手动将其指向AWS实例,而不能让其动态指向正在运行我的服务的任何实例。
下面的代码看起来应该可以工作,但是因为我的容器是在任务中创建的,所以我似乎无法访问容器id来指向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
}下面是上下文的更多terraform代码:
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}"
}
}发布于 2019-01-22 03:35:51
您不需要使用资源"aws_alb_target_group_attachment"将目标组与容器或任务或实例相关联。
你可以使用下面的代码。它将自动处理ecs任务的动态端口。
检查下面代码的最后四行。
resource "aws_lb_target_group" "rc" {
name = "rc"
port = 80
protocol = "HTTP"
vpc_id = "${var.vpc_id}"
}
resource "aws_lb_listener_rule" "rc" {
listener_arn = "${var.listener_arn}"
priority = 100
action {
type = "forward"
target_group_arn = "${aws_lb_target_group.rc.arn}"
}
condition {
field = "host-header"
values = ["www.domain.com"]
}
}
resource "aws_ecs_service" "rc" {
name = "${var.name}"
cluster = "${var.cluster}"
task_definition = "${aws_ecs_task_definition.rc.arn}"
desired_count = "${var.desired_count}"
health_check_grace_period_seconds = "${var.health_grace_period}"
deployment_maximum_percent = "${var.deployment_maximum_percent}"
deployment_minimum_healthy_percent = "${var.deployment_minimum_healthy_percent}"
load_balancer {
target_group_arn = "${aws_lb_target_group.rc.arn}"
container_name = "test"
container_port = 5000
}
}https://stackoverflow.com/questions/54292140
复制相似问题