Как добавить вторую зарегистрированную цель (с другим портом) в целевую группу alb, указывающую на определение задачи - PullRequest
0 голосов
/ 21 января 2019

Я начал с этого учебного руководства, которое послужило основой для создания среды 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}"
  }
}

1 Ответ

0 голосов
/ 21 января 2019

Вам не нужно использовать ресурс "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
  }
}
...