同VPC下Node.js Lambda调用SQS SendMessage超时原因排查求助
结合你的场景(同VPC、已配置端点、权限正常、其他账号运行正常),以下是几个容易被忽略的排查方向:
VPC端点安全组规则限制
检查SQS VPC端点的安全组入站规则,是否允许Lambda所在安全组的TCP 443端口访问。同时确认Lambda的安全组出站规则,是否允许向SQS端点的IP/安全组发起443端口请求。如果端点安全组拒绝入站,请求会因无法建立连接而超时,且不会返回明确错误。VPC端点附加策略限制
即使Lambda角色拥有SendMessage权限,VPC端点自身的附加策略可能限制了访问范围。比如策略仅允许特定账号、角色或SQS队列访问,当前Lambda角色不在允许列表内时,端点会静默拦截请求,导致超时。可以在VPC端点的配置中检查附加策略是否包含当前Lambda角色的访问权限。子网路由表配置错误
确认Lambda所在子网的路由表中,是否存在针对SQS服务前缀(如com.amazonaws.<region>.sqs)的路由条目,且下一跳指向SQS VPC端点。如果路由表仍将SQS流量导向互联网网关,而Lambda无公网访问权限,请求会因无法到达SQS而超时。SQS队列的KMS加密权限缺失
如果目标SQS队列启用了KMS加密,Lambda角色需要额外拥有KMS的kms:GenerateDataKey和kms:Decrypt权限,同时KMS密钥的策略需允许该角色访问。缺失这些权限时,SendMessage操作会因加密/解密失败而超时,而非返回权限错误。Lambda执行超时时间设置过短
虽然代码在其他账号正常,但当前账号的Lambda超时时间可能设置得过于严苛。比如网络延迟略高时,SendMessage操作耗时超过Lambda的超时阈值,导致函数整体超时。可以尝试临时调高超时时间(如从3秒调整到10秒)进行测试。VPC DNS配置问题
检查VPC是否启用了enableDnsSupport和enableDnsHostnames属性。如果未启用,Lambda可能无法正确解析SQS域名到VPC端点的IP,导致请求无法送达而超时。可以在VPC控制台查看这些属性的状态。
内容的提问来源于stack exchange,提问作者Wawa

