我有一个 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/