Jac*_*ell 7 python python-requests aws-lambda aws-api-gateway
我有一个在 API Gateway 和 Lambda 函数上运行的 Flask API,其中我的 Lambda 函数被配置为在我的 VPC 中运行。
我的 Lambda 函数的正常持续时间应该是大约 3 秒,但有时它会飙升至 130 秒或更长,这会导致我的 API 网关返回 504。
Lambda 函数使用requests库发出 GET 请求:
url = base_url + endpoint
req = requests.get(url, headers=headers)
response = json.loads(req.content.decode('utf-8'))
Run Code Online (Sandbox Code Playgroud)
CloudWatch 在超时请求上显示以下错误:
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='host', port=port): Max retries exceeded with url: /foo/bar (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at foo>: Failed to establish a new connection: [Errno 110] Connection timed out'))
Run Code Online (Sandbox Code Playgroud)
我读过的大部分帖子都提到了在私有子网中运行的错误配置的 Lambda 函数,但我知道这不是我的问题,因为我的函数可以访问互联网。
我的另一个理论是会话正在函数的底层容器上重用,这导致超时。
提前感谢您的帮助!
由于您已将 Lambda 设置为在 VPC 中运行,因此网络 ACL 很可能不允许该流量。
您所描述的行为与被阻止的临时端口一致。这会导致流量最终超时,导致 lambda 运行时间出现随机峰值,并因看似未知的原因而失败。
我什至不确定从 VPC 流日志中是否可以看出发生了什么,因为被阻止的是临时端口,而不是保留端口,但我必须仔细检查这一点。
AWS 使用临时端口 1024 - 65535。我会查看网络 ACL 并仔细检查这些端口是否被允许。
| 归档时间: |
|
| 查看次数: |
489 次 |
| 最近记录: |