AWS S3 ObjectCreated延迟触发lambda

时间:2018-11-30 15:45:51

标签: amazon-s3 aws-lambda amazon-vpc

我为 lambda 配置了简单的触发器,该触发器在到达 S3 时会处理图像。 通常, lambda 会以最小的延迟触发,在 S3 收到图像的同一秒内会发生多次。 但是,有时候,大约有7%的情况是收到的图片 ObjectCreated 事件之间存在延迟,该延迟可能长达 19秒! >(平均9-10秒)。

有什么办法避免这种延迟吗?

这种延迟使我无法将 S3-> Lambda 触发器用于高性能实时应用。

2 个答案:

答案 0 :(得分:2)

过一会儿,尝试进行调查和谷歌搜索。

在同时询问AWS支持此案的同时,我终于从AWS那里得到了答案:

-

  

.. Lambda在我们收到后立即调用了该函数   事件,但是您共享的特定请求ID是用于调用   必须进行冷启动,这增加了近 10秒的额外延迟。

     

该功能位于 VPC 中,在这种情况下,冷启动通常需要很少的时间   更长的时间。 冷启动不能消除,但要大批量生产   功能一旦定标,冷启动的发生率应降低   以及更多的容器可供重用。

从答案中可能会看到,如果您要制作高性能/高流量实时应用程序,则S3-> Lambda将不符合您的要求。

我的下一个问题是,如果我直接从上传图像的脚本中触发lambda,这会有所帮助吗? 还是我应该避免在此类应用程序上完全使用lambda并将其仅留给后台数据处理?

希望这个答案对其他人有帮助。

答案 1 :(得分:1)

2019年11月28日之后,由于AWS Lambda服务的改进,VPC内部的Lambda的冷启动不再造成那么多的延迟。您可以在此处找到有关它的更多信息:

https://aws.amazon.com/blogs/compute/announcing-improved-vpc-networking-for-aws-lambda-functions/

还有很多其他方法可以减少Lambda中的冷启动,但主要取决于用例。最常见的是减小Lambda的代码大小或使用其他运行时,例如Node或Python。