AWS应用负载均衡器(ALB)无法转发请求至Lambda的求助
ALB触发Lambda无响应问题排查方案
验证ALB端点基础可达性
- 用
nslookup <ALB-DNS名称>或dig <ALB-DNS名称>检查DNS解析,确认能获取到公网IP。如果解析失败,要么是ALB刚创建未完成DNS同步(等待5-10分钟),要么是VPC的DNS配置异常(检查VPC设置里的DNS服务器是否为Amazon默认DNS)。 - 执行
curl -v http://<ALB-DNS名称>:80测试TCP连接,若连接超时,重点检查ALB安全组是否放行客户端IP的80/443端口流量(ACL放行不代表安全组也放行)。
- 用
核对监听器规则配置
- 确认监听器的转发规则已正确关联Lambda目标组,且规则的匹配条件(路径、主机头等)与你的请求完全匹配。如果规则匹配条件过于严格(比如指定了未命中的路径前缀),会导致请求被直接丢弃。
- 检查是否配置了默认规则:若无匹配规则,ALB默认返回404,但你当前是无响应状态,需确认默认规则是否存在且动作设置正确。
检查Lambda目标组核心配置
- 确认目标组的协议版本为HTTP/1.1或HTTP/2,这是ALB触发Lambda的必要条件。
- 核对目标组的Invocation type设置:若为
Event(异步调用),ALB不会等待响应,但至少应生成Lambda日志;优先确认是否设置为RequestResponse(同步调用)。
排查ALB访问日志未生成问题
- ALB日志存在5-15分钟延迟,先确认是否已等待足够时间。若超时仍无日志,检查存储桶权限:需确保存储桶政策允许ELB服务写入日志,示例政策如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "elasticloadbalancing.amazonaws.com" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::<你的存储桶名称>/AWSLogs/<你的账户ID>/*" } ] } - 确认存储桶区域与ALB区域一致,跨区域无法写入日志。
- ALB日志存在5-15分钟延迟,先确认是否已等待足够时间。若超时仍无日志,检查存储桶权限:需确保存储桶政策允许ELB服务写入日志,示例政策如下:
验证Lambda权限配置
- 检查Lambda执行角色的资源政策,是否允许ALB作为触发器调用函数,示例配置如下:
{ "Version": "2012-10-17", "Id": "default", "Statement": [ { "Sid": "AllowALBInvoke", "Effect": "Allow", "Principal": { "Service": "elasticloadbalancing.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:<区域>:<账户ID>:function:<你的Lambda函数名>", "Condition": { "ArnLike": { "AWS:SourceArn": "arn:aws:elasticloadbalancing:<区域>:<账户ID>:loadbalancer/app/<你的ALB名称>/*" } } } ] } - 虽然健康检查能触发Lambda,但需确认该权限政策是否覆盖了ALB的所有调用场景。
- 检查Lambda执行角色的资源政策,是否允许ALB作为触发器调用函数,示例配置如下:
复查VPC与子网配置
- 确认ALB关联的子网为公网子网:即使路由表指向IGW,也要检查子网的
Map public IP on launch是否开启,否则ALB的ENI无法获取公网IP,导致外部无法访问。 - 确认VPC网络ACL的出站规则是否放行ALB的流量:ALB调用Lambda时需要出站权限(若Lambda在VPC内需访问ENI,公网Lambda需访问互联网),确保出站规则允许所有必要流量。
- 确认ALB关联的子网为公网子网:即使路由表指向IGW,也要检查子网的
内容的提问来源于stack exchange,提问作者KarloSpacapan
相关产品推荐
相关产品推荐

