我有一个SQS FIFO队列,我想知道一旦队列不为空,是否有一种方法可以触发AWS Lambda。 例如,如果我的队列为空,并且有新消息输入触发器lambda,但是如果队列中已经包含至少一条消息并且有新消息输入,则不会触发lambda。 有可能吗?
答案 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条消息,如果您的队列收到太多传入消息,那么消息使用过程可能会花费太多时间。