一旦SQS fifo队列不为空,则触发AWS Lambda

时间:2020-10-07 09:21:07

标签: amazon-web-services aws-lambda amazon-sqs

我有一个SQS FIFO队列,我想知道一旦队列不为空,是否有一种方法可以触发AWS Lambda。 例如,如果我的队列为空,并且有新消息输入触发器lambda,但是如果队列中已经包含至少一条消息并且有新消息输入,则不会触发lambda。 有可能吗?

3 个答案:

答案 0 :(得分:0)

有一个名为ApproximateNumberOfMessagesVisible的Amazon CloudWatch指标,它显示队列中的消息数。该文档说:“对于FIFO队列,结果是准确的。”

您可以创建一个CloudWatch警报,该警报在一段时间内消息数量降至零时触发。警报可以将消息发送到 Amazon SNS主题。如果您将AWS Lambda函数预订为该主题,则当队列在指定的持续时间内(例如5分钟内)为空时,将触发该函数。仅当警报进入状态为“ Alarm”时才会触发,直到警报退出状态并且进入状态时才会再次触发。再次声明。

重要:配置警报时,请转到其他配置,然后将缺少数据处理设置为“将丢失的数据视为不良(违反阈)”。这是必需的,因为如果队列为空,则SQS队列将发送度量。 (许多队列为空,因此节省了大量度量存储!)

答案 1 :(得分:0)

异常模式。

您也许可以将Lambda函数的并发性设置为1,这意味着只能同时执行一次调用,然后让Lambda函数启动您的工作流程,然后删除实际的SQS事件触发器,该触发器导致Lambda在第一名。那应该防止进一步的调用。完成操作后,请重新添加SQS事件触发器,以准备下一批消息。

答案 2 :(得分:0)

您可以将并发执行限制设置为1,以确保只有1个lambda实例读取队列。但是我不确定这是您可能想要做的事情。 Lambda一次执行最多可读取10条消息,如果您的队列收到太多传入消息,那么消息使用过程可能会花费太多时间。