Lambda Function无法连接S3报Request send failed错误求助
Lambda部署到VPC后无法连接S3,出现超时错误
错误日志
START RequestId: 800fb738-cd7f-4368-8757-46563c802cfd Version: $LATEST 2024/03/12 21:03:25 Processing request data for user Berkan with test_match.dem file. 2024/03/12 21:04:57 Error downloading file: operation error S3: GetObject, exceeded maximum number of attempts, 3, https response error StatusCode: 0, RequestID: , HostID: , request send failed, Get "https://csense-demos.s3.eu-central-1.amazonaws.com/test_match.dem?x-id=GetObject": dial tcp 52.219.47.148:443: i/o timeout 2024/03/12 21:04:57 unexpected EOF 2024/03/12 21:04:57 unexpected EOF RequestId: 800fb738-cd7f-4368-8757-46563c802cfd Error: Runtime exited with error: exit status 1 Runtime.ExitError END RequestId: 800fb738-cd7f-4368-8757-46563c802cfd REPORT RequestId: 800fb738-cd7f-4368-8757-46563c802cfd Duration: 91709.49 ms Billed Duration: 91710 ms Memory Size: 128 MB Max Memory Used: 48 MB Init Duration: 176.00 ms
排查背景
- Lambda通过API Gateway可正常触发执行,但访问S3时出现上述超时错误
- 本地使用AWS Toolkit测试同一Lambda代码,能正常连接目标S3并完成操作
- 已检查Lambda所在VPC的公有子网配置(如下截图),未发现明显配置错误:

- 相关代码:
- CDK Stack定义:DemoParserStack.java
- Lambda执行逻辑:Go语言的main.go
问题原因及解决方案
核心原因
Lambda部署到VPC的公有子网时,默认不会分配弹性公网IP,即便子网关联了互联网网关,Lambda也无法直接访问公网(包括S3的公网端点),导致TCP连接超时。
可选解决方案
方案1:为Lambda所在公有子网开启自动分配公网IP
- 进入AWS控制台的VPC服务,找到Lambda使用的公有子网
- 编辑子网设置,开启“自动分配公有IPv4地址”
- 确认子网的路由表中存在指向互联网网关(IGW)的路由条目
方案2:使用S3 VPC网关端点(推荐)
无需让Lambda访问公网,通过配置VPC网关端点直接在VPC内部访问S3,更安全且无网络延迟问题:
- 在VPC控制台中创建S3的网关型端点
- 将端点关联到Lambda所在的子网和路由表
- 确保Lambda的IAM权限包含S3访问权限(本地测试正常,权限应该已配置)
方案3:将Lambda移至私有子网并配置NAT网关
- 创建私有子网,并配置路由表指向NAT网关
- 将Lambda部署到该私有子网
- 确保NAT网关部署在公有子网,且有指向互联网网关的路由
内容的提问来源于stack exchange,提问作者Berkan Aslan
相关产品推荐
相关产品推荐

