AWS Lambda中的Python请求超时

use*_*688 8 python amazon-web-services aws-lambda

我正在尝试从我的AWS Lambda发出http请求,但它超时了.

我的代码看起来与此类似:

import requests

def lambda_handler(event, context):
    print('Im making the request')
    request.get('http://www.google.com')
    print('I recieved the response')
Run Code Online (Sandbox Code Playgroud)

但是当我测试这个时,我会超时.

输出是

Im making the request
END RequestId: id
REPORT RequestId: id    Duration: 15003.25 ms   Billed Duration: 15000 ms   Memory Size: 128 MB Max Memory Used: 18 MB  
2016-04-08T20:33:49.951Z id Task timed out after 15.00 seconds
Run Code Online (Sandbox Code Playgroud)

所以我知道问题不是找不到请求包,而是运行我的python代码.我只想弄清楚为什么它会超时.

Jim*_*Jim 14

我遇到同样的超时问题,原因如下。

AWS 文件

当您将 VPC 配置添加到 Lambda 函数时,它只能访问该 VPC 中的资源。如果 Lambda 函数需要访问 VPC 资源和公共 Internet,则 VPC 需要在 VPC 内部有一个网络地址转换 (NAT) 实例。

设置 VPC 时可能会出现一些错误。我建议您可以关注此博客来构建 NAT。


pyB*_*omb 6

Lambda中的超时默认值为3秒= 3000微秒。转到高级设置,然后添加5分钟。如果超时恰好在3秒内发生,则这可能是唯一的问题。所有其他错误将花费更多或更少的代价。

  • 欢迎来到 StackOverflow,感谢您的帮助。您可能想通过添加一些解释来使您的答案更好。 (4认同)

Mar*_*k B 5

除非您将NAT网关添加到VPC,否则具有VPC访问权限的Lambda函数将无法访问Internet。您应该阅读Lambda VPC支持公告中的“须知”部分。

如果您为Lambda功能启用了VPC支持,但是您的VPC中没有NAT网关,则您的请求正在尝试访问Internet超时。

  • 向VPC添加了一个NAT网关,并通过该NAT为0.0.0.0添加了一条路由,但仍然丢失了一些内容。超时仍然发生。 (2认同)

小智 5

您可以通过执行以下操作来增加请求的超时时间:

response = requests.get(url, timeout=60)
Run Code Online (Sandbox Code Playgroud)

此外,您还需要增加 lambda 函数的超时时间。去做这个:

  • 在 AWS 中打开您的 lambda 函数
  • 选择“配置”,然后选择“高级设置”
  • 增加您的超时时间(最多 5 分钟)
  • 选择“保存”

另外,我相信“request.get”应该是“requests.get”。