我使用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之后超时 秒
答案 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支持提出更多要求)。