VPC中Lambda函数无法访问CloudWatch触发超时问题
问题场景
- Lambda函数业务逻辑:从外部服务器采集监控指标后上报至CloudWatch
- 异常现象:Lambda未关联VPC时全流程运行正常;配置VPC后,外部服务器指标采集环节可正常执行,但运行到指标上报代码段
cw.put_metric_data(...)时会立即抛出Timeout超时错误
故障根因
核心问题是Lambda关联VPC后网络链路耗时显著上升,原有超时阈值设置过短,无法覆盖VPC环境下的实际请求耗时:
- 未关联VPC时,Lambda运行在AWS托管的公共服务网络平面,访问同区域CloudWatch服务走AWS内部低延迟专线,
cw.put_metric_data接口请求通常几十到上百毫秒即可完成响应,短超时配置下也能正常执行。 - 关联VPC后,Lambda会通过挂载的VPC弹性网卡(ENI)转发所有网络流量,所有请求都要经过VPC网络栈处理。你可以正常采集外部服务器指标,说明VPC公网出口、路由配置、安全组规则的连通性是正常的,不存在网络不通的问题。但此时访问CloudWatch的流量无论经NAT网关走公网链路、还是经VPC端点走私网链路,都比默认环境多了数跳转发,基础延迟明显升高;如果单次上报的指标数据量较大,叠加VPC网络下偶发的ENI转发抖动、TCP连接建立重试的额外开销,原有短超时配置(多数用户初始会设置为3秒/10秒)不足以支撑请求完成全流程,就会触发超时报错。
这类问题排查时很容易先入为主认为是VPC没有配置到CloudWatch的路由,但从实际现象和修复结果看,连通性没有问题,问题本质是超时阈值和实际网络环境不匹配。
已验证解决方案
- 将Lambda函数的超时等待时间上调至3分钟,调整后全流程运行正常,无超时报错。
内容的提问来源于stack exchange,提问作者Alonso Valdivia
相关产品推荐
相关产品推荐

