如何消除 AWS 上按键分组的事件?

Tom*_*Tom 5 amazon-web-services amazon-dynamodb amazon-kinesis aws-lambda

我们的前端应用程序将用户操作发送到 API 网关后面的 lambda 函数,然后该函数将这些操作存储在 dynamodb 中。

然后,我们使用 dynamodb 流触发一个单独的 lambda 函数,该函数将解析 dynamodb 中的这些操作,并决定用户的操作是否应导致发送任何通知(我们将这些通知事件称为通知事件)。

例如,如果用户在我们的应用程序中发表评论,我们将在 dynamodb 中存储“CREATED_COMMENT”操作,然后该操作将通过 dynamodb 流触发新的 lambda。然后,新的 lambda 可能会创建一个“电子邮件通知事件”,我们可以将其发送给像 customer.io 这样的电子邮件提供商

然而,我们的用户告诉我们,他们收到电子邮件的频率太高,因此我们希望开始发送电子邮件摘要,将一段时间内的多个操作汇总到一封电子邮件中,而不是为每个操作发送一封电子邮件。

我们的想法是使用 AWS EventBridge、Kinesis、Step Functions 甚至 DynamoDB 流之类的工具来重新发送 dynamodb 流操作,然后将新流的事件配置为按电子邮件地址分组,并按例如 10 进行反跳分钟。如果用户随后执行新操作,则该用户的流将继续收集另外 10 分钟的操作,直到该用户在 10 分钟内没有执行任何新操作。一旦发生这种情况,流将“释放”所有收集的操作并调用 lambda 函数。然后,我们的 lambda 函数将生成电子邮件通知事件并将其发送到例如 customer.io。

但是,我们无法在上述任何 AWS 流服务中找到此类分组和去抖刷新配置。对于消化(或汇总)这样常见的事情,是否应该有一种无服务器方法来执行此操作,而无需编写我们自己的排队服务?

Gar*_*key 1

对我来说,答案似乎是使用 SQS 之类的工具。SQS 将允许您将消息累积到队列中,然后每隔 x 分钟您可以使用 Lambda 函数读取队列,以便在计划事件中执行此操作。您不需要由 SQS 触发 Lambda,并且仍然可以从 Lambda 中“手动”读取队列。