仅在收集固定数量的数据后执行AWS Lambda(具有多个数据)

问题描述 投票:0回答:2

我想在收集固定数量的数据之后执行具有多个数据的lambda函数。例如,固定量将仅考虑特定量的消息或在特定时间范围内发送的消息。

我想用SQS来解决这个问题,在SQS上编写消息,并使用轮询来检查SQS状态。但是我不喜欢这个解决方案,因为我想在匹配条件时立即触发lambda(例如:从发送的第一条消息开始经过的时间,或者固定数量的消息)

理想情况是发送收集的所有消息,例如,在第一条消息到达后1分钟。

要明确:

  1. 第一条消息到达队列中
  2. 从现在开始计时器(例如1分钟)
  3. 计时器结束,它将触发lambda,收集到目前为止收集的所有消息

此外,我想基于不同的ID并行处理不同的队列

有一种优雅的方式吗?

我已经建立了一个与顺序lambda一起使用的系统,它处理每条消息的所有进程

amazon-web-services aws-lambda amazon-sqs aws-step-functions
2个回答
0
投票

不幸的是,在AWS Lambda上做这不是一件容易的事(我们有类似的用例)。

SQS或Kinesis数据流作为触发器可能会有所帮助,但有几个限制:

  • AWS Lambda将以极高的频率提取SQS。您将不得不为lambda添加并发限制,以使其由多个项目触发。最大批量大小只有10。
  • 每个碎片的base rate for Kinesis trigger是每秒一次,并且不能更改。

在不同调用之间聚合记录不是一个好主意,因为您永远不知道下一次调用是否会在另一个容器上启动,因此它们会丢失。

Kinesis Firehose可能会有所帮助,因为您可以配置发送新批次的最大批量大小和最大时间范围。您可以将其配置为写入S3存储桶并配置由新创建的文件触发的lambda。

确保如果使用Kinesis数据流作为Kinesis firehose的源,则数据流的每个分片中的数据将单独分批在Firehose中(AWS中未记录)。


-1
投票

你可以通过几种方式实现这一目标。我这样做:

  1. 让队列成为lambda函数的事件源
  2. lambda函数可以:触发状态机或不做任何事情。如果当前没有触发状态机,则触发状态机(意味着我们处于1分钟范围内)。

状态机具有以下步骤:

  1. 等一分钟
  2. 它正在处理吗?
© www.soinside.com 2019 - 2024. All rights reserved.