You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Lambda函数无法连接S3桶且超时,请求技术排查协助

Lambda访问S3超时问题排查与解决

核心原因

你的Lambda部署在VPC子网内,默认情况下没有公网访问能力。S3虽是AWS全局服务,但调用其公网端点需要出站公网连接,而VPC内的Lambda仅拥有私有IP,无法直接发起公网请求,导致请求一直阻塞直到超时。

解决方案

方案1:配置S3 VPC网关端点(推荐)

这是最安全且成本更低的方式,无需依赖NAT网关:

  • 在你的Terraform配置中添加S3网关型VPC端点:
resource "aws_vpc_endpoint" "s3_gateway" {
  vpc_id       = aws_vpc.default.id # 替换为你的默认VPC ID
  service_name = "com.amazonaws.${var.aws_region}.s3"
  vpc_endpoint_type = "Gateway"

  route_table_ids = [aws_route_table.private_subnet.id] # 替换为Lambda所在子网的路由表ID
}
  • 确认路由表中自动添加了指向S3前缀列表(pl-xxxx)的路由,目标为该网关端点
  • 网关端点不依赖安全组控制流量,无需额外配置

方案2:配置NAT网关(适用于需访问多公网服务的场景)

如果你的Lambda还需要访问其他公网服务,可给私有子网配置NAT网关:

  • 在VPC的公有子网中创建NAT网关并绑定弹性公网IP(EIP)
  • 修改Lambda所在私有子网的路由表,将0.0.0.0/0的路由指向NAT网关
  • 确保NAT网关所在安全组允许出站到S3的HTTPS(443端口)流量

额外检查项

  1. Lambda IAM权限:确认执行角色拥有s3:ListBuckets等所需权限,示例IAM策略片段:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:ListBuckets",
      "Resource": "*"
    }
  ]
}
  1. 代码优化:你的Lambda代码中重复导入了json模块,可删除其中一个(此问题不导致超时)。

内容的提问来源于stack exchange,提问作者Boris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 00:32:34