降低 aws 中的 lambda 执行速度

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

我们有 SQS --> aws lambda --> 步骤函数设置。对于队列中的每条消息,lambda 都会被触发,最终开始执行步骤函数。

目前对于每条消息,lambda 都会触发阶跃函数,我们想要控制这种限制。有没有一种方法可以一次只处理一条消息,一旦处理完成,那么只有 lambda 应该轮询新消息并调用步骤函数。

我们将批处理项设置为 1,将批处理窗口设置为 30 秒。 lambda aws 的保留并发设置为 1。通过此配置,还可以观察到多个消息的并行步骤函数执行。

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

您的模式将 Lambda 限制为一个并发执行,但这并不将您的 Step Function 限制为一个并发执行。为什么不?因为 StartExecution API 是异步的。正如 @MarkB 所说,您的 Lambda 启动 SM 执行并退出,无需等待其完成。上一个函数调用已经退出,即使 SM 执行可能仍在运行,Lambda 也可以启动另一个函数调用。

那么如何限制 Step Function 呢?

关键是使用 ListExecutions API 检查正在进行的执行,并过滤

RUNNING
状态。如果响应的
executions
数组的长度为 0,则可以开始新的执行。

将此逻辑添加到您的 Lambda,仅在没有正在运行的执行时调用

StartExecution
。否则,通过抛出错误将消息返回到队列。

© www.soinside.com 2019 - 2024. All rights reserved.