【发布时间】:2019-11-16 09:58:34
【问题描述】:
我有一个处理来自 S3 的事件的 AWS Lambda 函数。我想在处理之前聚合它们并让 lambda 处理批处理。
理想情况下,我希望能够指定批处理大小和超时时间(比如说单个偶数,然后 5 秒内什么都没有,我想发送一个 1 事件批处理)。
是否有使用 Lambda 或其他 AWS 服务的惯用方法?
【问题讨论】:
标签: amazon-web-services aws-lambda
我有一个处理来自 S3 的事件的 AWS Lambda 函数。我想在处理之前聚合它们并让 lambda 处理批处理。
理想情况下,我希望能够指定批处理大小和超时时间(比如说单个偶数,然后 5 秒内什么都没有,我想发送一个 1 事件批处理)。
是否有使用 Lambda 或其他 AWS 服务的惯用方法?
【问题讨论】:
标签: amazon-web-services aws-lambda
你可以做一些事情:
让发布者负责发布,并让发布者为每组要处理的对象提供一个事件。如果发布者已经在批量工作,这很有效。
如果您的每个事件的处理步骤远比仅处理事件的成本高,则此方法效果很好。通常,这可以采用 {aggregating lambda} -> {processing batch job} 的形式,因为 Lambda 不适用于非常昂贵的处理。
如果处理成本相当低,并且您希望最大限度地减少 Lambda 调用次数,则此方法效果很好。触发计划(您在两次调用之间等待多长时间)是通过权衡您愿意等待多长时间来处理一个事件与您愿意支付多少次调用来确定的。需要注意的事情:1. 如果您根本没有收到任何事件,您仍然会调用您的 Lambda,并且 2. 如果您收到的事件比处理它们的速度更快,您的队列将越来越多,您的处理将下降越来越落后。
【讨论】:
我认为您可以通过将 SQS 队列设置为 S3 通知的目的地来实现批处理操作。假设您要指定批量大小为 20,您的所有 S3 事件都将发送到 SQS。当您的 SQS 有 20 个项目时,您将创建一个 CloudWatch 规则来触发 Lambda。您的 Lambda 将轮询 SQS 以获取这批 20 个项目并处理它们。
You can also set SQS triggers 但它的最大批量大小限制为 10。
【讨论】: