Zappa / Async AWS Lambda函数在30秒内超时

时间:2018-01-12 18:45:02

标签: python-3.x flask aws-lambda zappa

我使用Zappa将一个Python 3.6-Flask应用程序部署到AWS Lambda上,其中我有一个使用@Task定义的异步任务执行函数,如所讨论的here

但是,我发现函数调用仍然在30秒时超时,而AWS Lambda强制执行非API调用的5分钟超时。我甚至在Lambda设置中检查了超时,并将其设置为5分钟。

我发现这种情况的方式是lambda的调试输出在没有请求的情况下开始重复 - 因为lamba因错误或超时而被调用2次(根据AWS Lambda文档)

任何人都可以帮我解决这个问题吗?

[编辑:lambda函数也不是任何VPC的一部分,并且设置为可从互联网访问。]

以下是日志。基本上,倒计时是一个睡眠计时器,计数到20秒,接着是对application.reviv_assign_responder的@task调用,但正如我们所见,没有过去的过去' NEAREST RESPONDER'并且倒计时再次开始,表明该功能已经超时并且已被(AWS')设计再次调用。

Log output in Pastebin : https://pastebin.com/VEbdCALg

Second incident - https://pastebin.com/ScNhbMcn

正如我们在第二个日志中所看到的,它明确指出:

  

[1515842321866] wait_one_and_notify:30:26 [1515842322867]   wait_one_and_notify:30:27 [1515842323868] wait_one_and_notify:30   :28 [1515842324865] 2018-01-13T11:18:44.865Z   72a8d34a-f853-11e7-ac2f-dd12a3d35bcb任务在30.03之后超时   秒

2 个答案:

答案 0 :(得分:2)

您可以检查Zappa应用于所有lambda函数here的默认设置,您会看到默认情况下timeout_seconds设置为30秒,这将适用于默认的Lambda在AWS Console中设置,因为默认情况下这是3秒(您可以在AWS Lambda FAQ中检查此限制。

对于@Task,你必须在timeout_seconds文件中增加/设置zappa_settings.(json|yaml)并重新部署,你可以放5分钟(5 * 60 == 300秒)但这个增加将用于使用zappa部署的virtualenv中定义的所有功能。

您可以查看更多详细信息in this issue in Zappa repo

答案 1 :(得分:1)

Zappa中的timeout_seconds参数具有误导性。也就是说,它确实限制了Lambda函数的超时,但是请求通过具有default timeout of 30 seconds的CloudFront进行服务。要验证这一点,请尝试降低timeout_seconds降为20-它会在20秒内正确超时。但是,由于CloudFront的限制,过去30无效。

  

默认超时为30秒。您可以将值更改为4到60秒。如果您需要超出该范围的超时值,请请求更改该限制。

换句话说,Zappa或Lambda都无法解决此问题,因为问题出在其他地方(CloudFront)。

我自己还没有尝试过,但是您似乎可以通过在Lambda前面创建cloudfront分布来达到极限,尽管看起来您仍然受到max的限制。 60年代(除非您通过the previous link中的说明通过AWS支持提出更多要求)。