仅在收集到固定数量的数据后才执行 AWS Lambda(具有多个数据)
Perform AWS Lambda (with multiple data) only after a fixed amount of data is gathered
我想执行一个包含多个数据的 lambda 函数,只有在收集到固定数量的数据后。例如,固定数量将仅考虑特定数量的消息,或在特定时间范围内发送的消息。
我想使用 SQS 来解决这个问题,我在上面写消息,并使用轮询来检查 SQS 状态。但我不喜欢这个解决方案,因为我想在条件匹配时立即触发 lambda(例如:从发送第一条消息起经过的时间,或固定数量的消息)
理想的情况是发送所有收集到的消息,例如,在第一条消息到达后 1 分钟后发送。
要明确:
- 第一条消息到达队列
- 从现在开始计时(例如 1 分钟)
- 计时器结束,它将触发 lambda 并收集到现在为止的所有消息
此外,我想根据不同的 id 并行处理不同的队列
有什么优雅的方法吗?
我已经建立了一个使用顺序 lambda 的系统,它处理每条消息的所有进程
您可以通过几种方式做到这一点。我会这样做:
- 让队列成为 lambda 函数的事件源
- lambda 函数可以:触发状态机或不做任何事情。如果当前没有触发状态机(意味着我们在 1 分钟范围内),它会触发状态机。
状态机有以下步骤:
- 1 分钟等待
- 是否正在处理
不幸的是,这在 AWS Lambda 上不是一件容易的事(我们有类似的用例)。
SQS 或 Kinesis 数据流作为触发器可能会有帮助,但有一些限制:
SQS会被AWS Lambda以非常高的频率拉取。您必须为 lambda 添加并发限制,以使其被多个项目触发。并且最大批量大小仅为 10。
base rate for Kinesis trigger每个分片每秒1个,不可更改
在不同的调用之间聚合记录不是一个好主意,因为您永远不知道下一次调用是否会在不同的容器上启动,因此它们会丢失。
Kinesis Firehose 很有用,因为您可以配置最大批处理大小和发送新批处理的最大时间范围。您可以将其配置为写入 S3 存储桶并将 lambda 配置为由新创建的文件触发。
确保如果您使用 Kinesis 数据流作为 Kinesis firehose 的源,来自数据流的每个分片的数据在 Firehose 中单独批处理(这是 不是 记录在 AWS 中)。
我想执行一个包含多个数据的 lambda 函数,只有在收集到固定数量的数据后。例如,固定数量将仅考虑特定数量的消息,或在特定时间范围内发送的消息。
我想使用 SQS 来解决这个问题,我在上面写消息,并使用轮询来检查 SQS 状态。但我不喜欢这个解决方案,因为我想在条件匹配时立即触发 lambda(例如:从发送第一条消息起经过的时间,或固定数量的消息)
理想的情况是发送所有收集到的消息,例如,在第一条消息到达后 1 分钟后发送。
要明确:
- 第一条消息到达队列
- 从现在开始计时(例如 1 分钟)
- 计时器结束,它将触发 lambda 并收集到现在为止的所有消息
此外,我想根据不同的 id 并行处理不同的队列
有什么优雅的方法吗?
我已经建立了一个使用顺序 lambda 的系统,它处理每条消息的所有进程
您可以通过几种方式做到这一点。我会这样做:
- 让队列成为 lambda 函数的事件源
- lambda 函数可以:触发状态机或不做任何事情。如果当前没有触发状态机(意味着我们在 1 分钟范围内),它会触发状态机。
状态机有以下步骤:
- 1 分钟等待
- 是否正在处理
不幸的是,这在 AWS Lambda 上不是一件容易的事(我们有类似的用例)。
SQS 或 Kinesis 数据流作为触发器可能会有帮助,但有一些限制:
SQS会被AWS Lambda以非常高的频率拉取。您必须为 lambda 添加并发限制,以使其被多个项目触发。并且最大批量大小仅为 10。
base rate for Kinesis trigger每个分片每秒1个,不可更改
在不同的调用之间聚合记录不是一个好主意,因为您永远不知道下一次调用是否会在不同的容器上启动,因此它们会丢失。
Kinesis Firehose 很有用,因为您可以配置最大批处理大小和发送新批处理的最大时间范围。您可以将其配置为写入 S3 存储桶并将 lambda 配置为由新创建的文件触发。
确保如果您使用 Kinesis 数据流作为 Kinesis firehose 的源,来自数据流的每个分片的数据在 Firehose 中单独批处理(这是 不是 记录在 AWS 中)。