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

配置NAT Gateway后,使用Python Requests的Lambda Function仍超时求助

Lambda函数VPC内HTTP请求超时的排查方案

针对你遇到的Lambda在VPC内执行HTTP请求超时的问题,结合你的配置(NAT网关+公有子网、安全组全放开),可以按以下步骤排查:

1. 核心路由配置验证

  • 检查Lambda关联子网的路由表:必须存在0.0.0.0/0指向NAT网关的路由条目,而非互联网网关(IGW)。如果子网直接指向IGW,Lambda在VPC内无法直接访问公网,必须通过NAT网关中转。
  • 确认NAT网关状态为可用,且绑定了有效的弹性IP。

2. DNS解析检查

VPC内的Lambda依赖VPC的DNS服务解析域名,若配置不当会导致无法解析目标地址:

  • 检查VPC的enableDnsSupport和enableDnsHostnames是否都设置为true
  • 在Lambda中添加测试代码验证解析:
    import socket
    def lambda_handler(event, context):
        try:
            ip = socket.gethostbyname('google.com')
            print(f"Resolved IP: {ip}")
        except Exception as e:
            print(f"DNS resolve failed: {e}")
    

3. NAT网关的网络权限验证

  • 检查NAT网关所在子网的安全组:必须允许出站的443/80端口流量到任意地址(0.0.0.0/0)
  • 检查VPC的网络ACL:出站规则需允许443/80端口,入站规则需允许对应的响应流量(通常是1024-65535端口的TCP流量)

4. Lambda执行角色权限确认

Lambda在VPC内运行需要创建弹性网络接口,执行角色必须具备以下权限:

  • ec2:CreateNetworkInterface
  • ec2:DescribeNetworkInterfaces
  • ec2:DeleteNetworkInterface

额外测试建议

  • 临时将Lambda移出VPC测试,如果请求正常,说明问题确实出在VPC相关配置上
  • 尝试用底层的urllib3发起请求,排除requests库的潜在问题

附你提供的问题代码:

def lambda_handler(event, context):
    headers = {'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'}
    
    print('Testing requests')
    res = requests.get('https://google.com', headers=headers)
    print(res.status_code)
    print('Test complete')

错误信息:

[ERROR] ConnectionError: HTTPSConnectionPool(host='google.com', port=443): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7fcbb89d5b80>: Failed to establish a new connection: [Errno 110] Connection timed out'))
Traceback (most recent call last):
  File "/var/task/lambda_function.py", line 86, in lambda_handler
    posts_res = requests.get(page_url, headers=headers)
  File "/var/task/requests/api.py", line 73, in get
    return request("get", url, params=params, **kwargs)
  File "/var/task/requests/api.py", line 59, in request
    return session.request(method=method, url=url, **kwargs)
  File "/var/task/requests/sessions.py", line 587, in request
    resp = self.send(prep, **send_kwargs)
  File "/var/task/requests/sessions.py", line 701, in send
    r = adapter.send(request, **kwargs)
  File "/var/task/requests/adapters.py", line 565, in send
    raise ConnectionError(e, request=request)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 01:55:38