如何使用 terraform 将负载均衡器添加到 ec2 实例

how to add a load balancer to an ec2 instance using terraform

我正在 ec2 实例 中进行开发,我刚刚将 负载均衡器 添加到 ec2 使用 terraform 但现在我在尝试访问 时在浏览器上收到 504 网关超时 错误消息负载均衡器 dns 地址 ,我还注意到 目标组 不健康,因此健康检查失败。

我有以下 load balancer 配置:

resource "aws_lb" "alb" {
  name               = "backend-lb"
  internal           = false
  load_balancer_type = "application"
  security_groups    = [aws_security_group.lb_sg.id]
  idle_timeout       = 60
  subnets            = [element(aws_subnet.public.*.id, 0), element(aws_subnet.public.*.id, 1)]
}

resource "aws_lb_target_group" "alb_target_group" {
  name        = "backend-tg"
  port        = 8000
  protocol    = "HTTP"
  target_type = "ip"
  vpc_id      = aws_vpc.main.id

  health_check {
    enabled = true
    path = "/"
    port = "8000"
    protocol = "HTTP"
    healthy_threshold = 3
    unhealthy_threshold = 2
    interval = 90
    timeout = 20
    matcher = "200"
  }

  depends_on = [aws_lb.alb]
}

resource "aws_lb_listener" "http" {
  load_balancer_arn = aws_lb.alb.arn
  port              = "80"
  protocol          = "HTTP"

  default_action {
    type             = "forward"
    target_group_arn = aws_lb_target_group.alb_target_group.arn

  }
}

resource "aws_lb_target_group_attachment" "one" {
  target_group_arn = aws_lb_target_group.alb_target_group.arn
  target_id        = aws_instance.ec2.private_ip
  port             = 8000
}

请注意 我在 aws_lb_target_group_attachment target_id 中使用了 .private_ip 因为我在尝试时遇到错误 Error: Error registering targets with target group: ValidationError: The IP address '....foo id or arn' is not a valid IPv4 address使用 .id.arn.

我在这里做错了什么吗,将 负载平衡器 添加到 ec2 实例 是否合适?

首先,您需要修复 aws_lb_target_group 中的 target_type。将其从 ip 更改为 instance。或者只是删除该设置,因为 instance 是默认设置。

那么目标ID应该是实例的ID,而不是IP地址。代码应该是:

target_id        = aws_instance.ec2.id

之后,如果它仍然不起作用,您需要验证 EC2 实例的安全组是否允许从负载均衡器进入端口 8000,EC2 实例上的软件实际上正在侦听端口 8000 上的 Web 请求,以及 EC2 实例 returns 端口 8000 上的 HTTP GET 请求状态代码 200.