如何使用 terraform 将负载均衡器添加到 ec2 实例
Posted
技术标签:
【中文标题】如何使用 terraform 将负载均衡器添加到 ec2 实例【英文标题】:how to add a load balancer to an ec2 instance using terraform 【发布时间】:2021-10-31 22:57:55 【问题描述】:我正在 ec2 实例 中进行开发,我刚刚使用 terraform 将 负载均衡器 添加到 ec2 但是现在,当我尝试访问 负载平衡器 dns 地址时,我在浏览器上收到 504 Gateway Time-out 错误消息,我还注意到 目标组 不健康,因此运行状况检查失败。
我有以下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
,因为我在尝试使用.id
或.arn
时遇到了错误Error: Error registering targets with target group: ValidationError: The IP address '....foo id or arn' is not a valid IPv4 address
。
我在这里做错了什么,将 负载均衡器 添加到 ec2 实例 是否合适?
【问题讨论】:
【参考方案1】:首先您需要修复aws_lb_target_group
中的target_type
。将其从 ip
更改为 instance
。或者只是删除该设置,因为 instance
是默认设置。
那么目标 ID 应该是实例的 ID,而不是 IP 地址。代码应该是:
target_id = aws_instance.ec2.id
之后,如果仍然无法正常工作,您需要验证 EC2 实例的安全组是否允许负载均衡器在端口 8000
上进入,EC2 实例上的该软件实际上正在侦听端口上的 Web 请求8000
,并且 EC2 实例的端口 8000
上的 HTTP GET
请求返回状态码 200
。
【讨论】:
嘿,马克 B,也许你对它为什么不工作有更好的了解,当我在浏览器上检查负载均衡器的dns
时,确实安全组正在监听端口 8000一个Not Found: The requested resource was not found on this server
,当我将所有值8000
更改为80
时,我得到一个502 error
。您上面提到的所有步骤都在我的代码中进行了更新。我可以使用端口8000
上的 ec2 公共 IPv4 地址,ec2 工作正常,但负载均衡器和运行状况检查不能。有什么想法吗?
您需要将这些目标组和健康检查设置更改回端口8000
。未找到错误听起来像是您在 EC2 服务器上运行的软件未将请求正确路由到您的网站,因为它不知道如何处理 DNS 名称。
是的,你是对的,我只是忘记访问正确的 url loadbalancerDNS/api/
...唯一的问题实际上是健康检查失败...必须与路径有关谢谢以上是关于如何使用 terraform 将负载均衡器添加到 ec2 实例的主要内容,如果未能解决你的问题,请参考以下文章
使用 Terraform 关闭/打开 Elastic Beanstalk 负载均衡器?
如何在不停机的情况下更新和 ECS 服务添加一个额外的负载平衡服务与之对话?
如何在 terraform 中由 AKS 群集资源创建的虚拟机规模集或负载均衡器上启用诊断日志?