AWS Lambda中的Python请求超时

时间:2016-04-08 20:41:40

标签: 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')

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

输出

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

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

7 个答案:

答案 0 :(得分:4)

除非您向VPC添加NAT网关,否则具有VPC访问权限的Lambda函数将无法访问Internet。您应该阅读Lambda VPC support announcement的“要知道的事情”部分。

如果您已为您的Lambda功能启用了VPC支持,但您的VPC中没有NAT网关,那么您的请求将在尝试访问互联网时超时。

答案 1 :(得分:3)

我遇到同样的timeout problem,原因如下。

AWS document

  

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

设置VPC时可能会出现一些错误。 我建议你可以按照blog来建立NAT。

答案 2 :(得分:3)

Lambda中超时的默认值是3秒= 3000微秒。 转到高级设置并添加5分钟。 如果超时恰好发生在3秒,这可能是唯一的问题。所有其他错误都会带来更多或更少的错误。

答案 3 :(得分:2)

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

response = requests.get(url, timeout=60)

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

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

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

答案 4 :(得分:0)

默认情况下,AWS Lambda有3秒的超时时间,因此如果您的代码运行时间超过3秒,它将自动超时,从而导致此错误。

您可以将lambda函数的超时时间增加到最多5分钟(300秒 - AWS可能会在未来增加此限制),这应该可以解决问题。

另外,您的代码应该反映requests.get而不是request.get

答案 5 :(得分:0)

我已经在 Lambda 功能中配置了VPC配置,还添加了 NAT 网关,将功能时间设置为5分钟。

问题Exception has occurred: ImportError failed to find libmagic 仍然存在。通过将context.callbackWaitsForEmptyEventLoop设置为false可以为我解决问题。

答案 6 :(得分:0)

我也遇到了这个问题。如果您在VPC之外运行lambda,请确保您位于支持SES的区域中。如果该区域不支持,则lambda函数总是会失败。