当我的 AWS Lambda 函数尝试访问下游 AWS 服务或外部端点时,我收到了 ETIMEDOUT 错误。
解决方法
由于主机在一段时间后未响应而导致连接失败时,您将收到 ETIMEDOUT 错误。网络配置问题会导致 Lambda 函数和主机之间的网络路径无效。此无效路径会导致连接超时错误。要对 ETIMEDOUT 错误进行故障排除,请根据您的主机配置验证您的联网配置。
对于可通过公共互联网访问的主机
如果您为函数配置了 Amazon Virtual Private Cloud (Amazon VPC),请确保该函数可以访问公共互联网。如果您收到间歇性超时错误,请验证为该函数配置的所有子网是否均为私有子网,以及是否具有指向 NAT 网关的默认路由。对于指向 AWS Transit Gateway 中转网关的默认路由,请验证该中转网关是否允许该函数访问公共互联网。
**注意:**默认情况下,未配置 VPC 的函数可以访问公共互联网。
对于只能在 VPC 内访问的主机
如果主机只能在 VPC 内部访问,请先在 VPC 中配置 Lambda 函数,然后验证以下配置:
- 路由表中是否存在指向主机的有效路由路径。如果主机端点与 Lambda 函数位于同一 VPC 中,请检查是否有本地路由。如果主机端点位于不同的 VPC 中,请确保路由表中包含针对 VPC 对等连接的路由。
- Lambda 函数和主机中的子网网络访问控制列表(网络 ACL)规则均允许入站和出站规则。
- Lambda 函数的安全组规则允许出站流量通过所需端口传输到目标主机。
- 主机的安全组规则允许来自 Lambda 函数的入站流量通过所需端口传输。
- 主机支持使用 HTTP 或 HTTPS 协议和连接请求中指定的端口的请求。
要分析网络路径配置问题,请使用 VPC Reachability Analyzer。
如果超时错误发生在 NAT 网关的 350 秒超时时间内,则请重置空闲超时时间。
对于使用设置了自定义 DHCP 选项的 VPC 的主机
如果 VPC 设置了自定义动态主机配置协议 (DHCP) 选项,则请使用 Amazon Route 53 Resolver 查询日志查看 DNS 查询响应。主机的 IP 地址必须能够连接到端口。此外,主机必须使用与函数位于同一子网和安全组中的私有 Amazon Elastic Compute Cloud (Amazon EC2) 实例。
要识别主机的 IP 地址,请使用 EC2 实例运行以下命令:
nslookup amazon.com
**注意:**请将 amazon.com 替换为您的主机名。
要验证 IP 地址是否可以连接到请求的端口,请运行以下命令:
telnet host-name-IP-address 443
**注意:**请将 host-name-IP-address 替换为您的主机名或 IP 地址,将 443 替换为您的端口。
有关故障排除信息,请参阅如何对 AWS Lambda 中与 DNS 相关的持续性和间歇性错误进行故障排除?
验证主机配置
验证下游服务或外部端点是否正在接收请求。使用主机的可用指标、日志或网络跟踪。如果您使用 VPC,请使用 VPC 流日志来验证出站流量是否正在离开 Lambda 函数。如果您使用弹性网络接口,则要查找其 IP 地址,请使用 GitHub 网站上的 Lambda ENI Finder。有关如何使用 Lambda ENI Finder Bash 脚本的详细信息,请参阅为什么我无法分离或删除 Lambda 创建的弹性网络接口?
如果传入流量大导致主机受阻,使其无法在配置的套接字超时时间内做出响应,则请使用使用退避模式重试。