python - 尽管有 Nat 网关,但使用 Python 的 Lambda 函数请求仍超时

标签 python aws-lambda python-requests

我有一个 lambda 函数,它在处理程序中运行基本请求。即使向 google 运行测试请求,请求调用也会超时(这包括我将 lambda 函数的超时时间延长到 5 分钟)

只是一个基本请求,但这是代码。我正在使用打印语句来确认它是根据请求专门卡住的。向请求本身添加超时只会缩短我需要等待失败的时间。

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')

安全组上的导出设置:所有协议(protocol)的所有端口上的所有 CIDR 范围 入口设置:与导出相同

子网类型:通过nat网关公开运行

函数正在 VPC 内运行。

该函数通过 SQS 队列发送到该函数的消息来工作。这部分功能似乎没有问题,因此我可以通过本地运行的代码对其进行测试。

错误消息:

[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)

有人有什么想法吗?

**请注意,多个 URL 都会发生这种情况。

最佳答案

请检查此blog post关于如何在 VPC 中配置 lambda。我从您的描述中看到的明显问题是您正在公共(public)子网中部署 lambda 并尝试从中调用 NAT 网关。您只能从私有(private)子网调用 NAT 网关。

关于python - 尽管有 Nat 网关,但使用 Python 的 Lambda 函数请求仍超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75930895/

相关文章:

python - 当 FLASK_ENV=development 时,Werkzeug 不记录 HTTP 请求

Python:使用 win32com 打开 excel 工作簿时出错

python - python中多个泛型协议(protocol)的输入输出如何使用TypeVar?

node.js - 如何使用 Amazon Lambda 对在 S3 中创建的文件设置打开/下载权限?

amazon-web-services - 如何在堆栈中存储和重用来自 CloudFormation 自定义资源 Lambda 函数的响应数据?

.net - 使用 IronPython 强制 SSL 协议(protocol) TLSv1.2

python - 在 Python 中抓取第二页会产生与浏览到第二页不同的数据

python - 请求工具带上传一个巨大的文件

node.js - 向 Amazon SNS 发送有关 AWS DMS 任务进度的通知

python - 在python请求中,SSLError : [SSL] PEM lib (_ssl. c :2600) mean?是什么意思