Terraform 不会将 alb 目标组附加到负载均衡器

for*_*orJ 3 amazon-web-services amazon-ecs terraform

我有负载均衡器、目标组、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
  }
}
Run Code Online (Sandbox Code Playgroud)

当我创建正在运行的基础设施时,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控制台时,目标组确实没有与任何负载均衡器关联。为了将目标组与负载均衡器关联,我还必须指定其他内容吗?

小智 5

我认为您想将“转发”指定为操作类型。

在“重定向”的情况下,您不需要目标组。

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"
  }
}
Run Code Online (Sandbox Code Playgroud)