Terraform 如何将第二个注册的目标(具有不同的端口)添加到指向任务定义的alb目标组

Terraform 如何将第二个注册的目标(具有不同的端口)添加到指向任务定义的alb目标组,terraform,amazon-ecs,Terraform,Amazon Ecs,我从本可交付教程开始,作为创建AWS环境的基础: 现在,我有两个服务在2个负载平衡器(每个服务1个)后面的2个EC2实例上运行2个容器。我正在尝试向目标组添加具有不同端口的第二个注册目标,并将其指向我的一个容器。侦听器很容易添加到ALB,但我似乎不知道如何添加第二个目标来动态指向运行我的服务的实例 在UI中,我只能手动将其指向AWS实例,而不能让它动态指向运行我的服务的任何实例 以下内容看起来应该可以工作,但由于我的容器是在任务中创建的,因此我似乎无法访问容器id来指向目标ip,也无法将其指向服

我从本可交付教程开始,作为创建AWS环境的基础:

现在,我有两个服务在2个负载平衡器(每个服务1个)后面的2个EC2实例上运行2个容器。我正在尝试向目标组添加具有不同端口的第二个注册目标,并将其指向我的一个容器。侦听器很容易添加到ALB,但我似乎不知道如何添加第二个目标来动态指向运行我的服务的实例

在UI中,我只能手动将其指向AWS实例,而不能让它动态指向运行我的服务的任何实例

以下内容看起来应该可以工作,但由于我的容器是在任务中创建的,因此我似乎无法访问容器id来指向目标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}"
  }
}

无需使用资源“aws\u alb\u target\u group\u 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
  }
}

我已经有了,但是它指向80端口,我也需要它。有没有办法在那里添加第二个端口?不会有问题。这是负载平衡器将流量路由到此目标组中的目标时使用的端口。默认情况下,负载平衡器使用您在创建目标组时指定的协议和端口号将请求路由到其目标。或者,您可以在向目标组注册时覆盖用于将流量路由到目标的端口。我不太明白这将如何帮助侦听/转发到2个不同的端口。这不会转发到2个不同的端口,而是5000(在您的情况下)因为您正在覆盖在创建目标组时创建的上一个端口80。此外,在这种特殊情况下,您必须使用基于主机的路由。我已经更新了我的答案。我的问题是转发到两个不同的端口。