You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Terraform创建AWS网络负载均衡器时请求挂起问题排查

问题排查:NLB及后端EC2无法响应GET请求

核心判断:大概率是配置问题,而非Terraform Bug

从「直接访问EC2公网IP也挂起」这个现象来看,问题根源不在NLB,而是后端EC2实例本身或基础网络配置存在问题,Terraform Bug的可能性极低。以下是具体排查步骤:


1. 先解决EC2实例的基础可用性问题

NLB的流量最终会转发到EC2,EC2自身不可用的话,NLB必然无法正常工作:

  • 验证实例内服务状态:通过SSH登录EC2,执行curl localhost:80,确认HTTP服务(如Nginx、Apache)是否正常监听80端口并返回响应。如果没有响应,检查服务是否启动(比如systemctl status nginx),排查启动失败日志。
  • 检查实例网络连通性:
    • 确认EC2已分配弹性公网IP或在启动时开启了「自动分配公网IP」;
    • 查看实例所属子网的路由表,确认存在指向互联网网关(IGW)的路由条目;
    • 在实例内执行ping 8.8.8.8,验证是否能正常出网。
  • 复核安全组规则:
    • 入站规则:确保80端口的源是0.0.0.0/0(或你的测试客户端IP),而非仅限内网CIDR;
    • 出站规则:至少允许TCP/80、TCP/443的回包流量(推荐直接允许所有出站流量,后续再精细化配置)。

2. 验证NLB及目标组配置

当EC2自身可用后,再检查NLB的转发逻辑:

  • 目标组健康检查状态:在AWS控制台查看目标组,确认EC2实例的健康检查状态为「健康」。如果是「不健康」,检查健康检查路径(如/)是否能在实例上返回200状态码,调整健康检查的超时、阈值参数。
  • NLB监听配置:确认NLB的80端口监听已关联到正确的目标组,且监听协议为HTTP(或TCP,对应后端服务的协议)。
  • 安全组关联确认:用AWS CLI执行aws elbv2 describe-load-balancers --load-balancer-arns <你的NLB_ARN>,确认返回的SecurityGroups字段包含正确的安全组ID,且该安全组入站规则允许80端口流量。

3. Terraform代码可能存在的疏漏

如果以上排查都没问题,再检查Terraform代码的细节:

  • EC2 user_data配置:确认user_data脚本正确安装并启动了HTTP服务,比如是否有遗漏的依赖安装命令,或脚本执行失败的情况(可通过EC2系统日志查看)。
  • 目标组健康检查参数:检查Terraform中aws_lb_target_group的health_check块,确保path、port、protocol与后端服务匹配,healthy_threshold设置合理(比如默认2次)。
  • 安全组规则定义:确认aws_security_group的ingress规则中,from_port和to_port都是80,cidr_blocks包含允许访问的IP范围。

之前出现的AWS控制台与CLI显示安全组不一致的情况,大概率是AWS控制台的缓存延迟问题,并非Terraform的Bug。

内容的提问来源于stack exchange,提问作者Dean Schulze

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 06:10:57