Terraform не присоединяет целевую группу alb к балансировщику нагрузки - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть балансировщик нагрузки, целевая группа, прослушиватель alb и службы aws ecs, как показано ниже

resource "aws_alb" "django_alb" {
  name = "fpstory-django-alb"
  subnets = aws_subnet.public_subnet.*.id
  security_groups = [aws_security_group.django_lb.id]

  tags = {
    Project = "fpstory"
    Stage = terraform.workspace
  }
}

resource "aws_alb_target_group" "django_tg" {
  name = "fpstory-django-alb-target-group"
  port = 80
  protocol = "HTTP"
  vpc_id = aws_vpc.main.id
  target_type = "ip"

  depends_on = [
    aws_alb.django_alb
  ]

  health_check {
    healthy_threshold = "3"
    interval = "30"
    protocol = "HTTP"
    matcher = "200"
    port = var.django_port
    timeout = "5"
    path = var.health_check_path
    unhealthy_threshold = "3"
  }

  tags = {
    project = "fpstory"
    stage = terraform.workspace
  }
}

resource "aws_alb_listener" "django" {
  load_balancer_arn = aws_alb.django_alb.arn
  port = "80"
  protocol = "HTTP"
//  certificate_arn = var.certificate_arn

  default_action {
    target_group_arn = aws_alb_target_group.django_tg.id
    type = "redirect"

    redirect {
      status_code = "HTTP_301"
      protocol = "HTTP"
      port = var.django_port
    }
  }

}

resource "aws_ecs_service" "django" {
  name = "${terraform.workspace}-fpstory-django-service"
  cluster = aws_ecs_cluster.main.id
  task_definition = aws_ecs_task_definition.django.arn
  desired_count = var.django_count
  launch_type = "FARGATE"

  depends_on = [
    aws_alb_target_group.django_tg,
    aws_iam_role_policy_attachment.ecs_task_execution_role
  ]

  network_configuration {
    security_groups = [
      aws_security_group.django_ecs_tasks.id
    ]
    subnets = aws_subnet.public_subnet.*.id

    assign_public_ip = true
  }

  load_balancer {
    target_group_arn = aws_alb_target_group.django_tg.arn
    container_name = var.django_container_name
    container_port = var.django_port
  }

  tags = {
    Project = "fpstory"
    Stage = terraform.workspace
  }
}

Когда я создаю инфру, работающую terraform apply, я получаю следующую ошибку.

InvalidParameterException: The target group with targetGroupArn arn:aws:elasticloadbalancing:ap-northeast-2:985371652497:targetgroup/fpstory-django-alb-target-group/537aa9c2afb0c38a does not have an associated load balancer. "stag-fpstory-django-service"

Когда я смотрю на консоль AWS, целевые группы действительно не связаны с каким-либо балансировщиком нагрузки. Есть ли что-то еще, что я должен указать, чтобы связать целевую группу с балансировщиком нагрузки?

1 Ответ

2 голосов
/ 14 апреля 2020

Я думаю, вы хотели бы указать «forward» в качестве типа действия.

В случае «redirect» вам не нужна целевая группа.

resource "aws_alb_listener" "django" {
  load_balancer_arn = aws_alb.django_alb.arn
  port = "80"
  protocol = "HTTP"
//  certificate_arn = var.certificate_arn

  default_action {
    target_group_arn = aws_alb_target_group.django_tg.id
    type             = "forward"
  }
}
...