当前,我正在使用SQS队列来触发Lambda函数。 我的Lambda函数一次只能处理一个SQS记录,我想尽快耗尽SQS队列
所以我设置了
Delivery Delay: to 0 seconds,
Batch size: to 1
And set Lambda to use unreserved account concurrency 1000
假设情况为例:一条SQS消息被推送到Lambda,现在正在处理它。然后另一条消息到达SQS。我们确定要创建一个新的lambda来处理该消息吗?
答案 0 :(得分:3)
Lambda可以串行执行,但永远不会超过并发限制。
就像您的情况一样,您的SQS队列可能一次接收2000条消息。 Lambda将同时运行1000个函数,而其余1000个将仅在以前的执行完成之后运行。
因此,我认为最好的解决方案是快速编写队列,以编写lambda函数来一次处理多个消息并将批大小更改为10。
答案 1 :(得分:0)
Michael是正确的,正如AWS的文件所述
随着消息涌入队列的数量增加,AWS Lambda会自动扩大轮询活动,直到并发功能执行数达到1000,帐户并发限制或(可选)功能并发限制(以较低者为准)。 Amazon Simple Queue Service支持初始突发5次并发函数调用,并提高了每分钟60次并发调用的并发性。
例如,有1000条消息一次到达队列, 在第一分钟内将只处理5个。
第二分钟将同时运行65个lambda ...如此
这非常慢且引人注目,特别是在您的函数长时间运行的情况下