我试图从我的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代码。我只想弄清楚为什么它要求超时。
答案 0 :(得分:4)
除非您向VPC添加NAT网关,否则具有VPC访问权限的Lambda函数将无法访问Internet。您应该阅读Lambda VPC support announcement的“要知道的事情”部分。
如果您已为您的Lambda功能启用了VPC支持,但您的VPC中没有NAT网关,那么您的请求将在尝试访问互联网时超时。
答案 1 :(得分:3)
我遇到同样的timeout problem,原因如下。
将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函数的超时时间。要做到这一点:
另外,我相信' 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函数总是会失败。