一旦 SQS fifo 队列不为空,就触发 AWS Lambda
Trigger AWS Lambda once SQS fifo queue is not empty
我有一个 SQS FIFO 队列,我想知道是否有一种方法可以在队列不为空时触发 AWS lambda。
例如,如果我的队列为空并且一条新消息进入触发 lambda,但是如果队列已经包含至少一条消息并且一条新消息进入则不会触发 lambda。
可能吗?
有一个名为 ApproximateNumberOfMessagesVisible
的 Amazon CloudWatch 指标,它显示队列中的消息数。文档说“对于 FIFO 队列,结果是准确的。”
您可以创建一个 CloudWatch 警报,当消息数量下降到零 一段时间后触发。警报可以向 Amazon SNS 主题 发送消息。如果您将 AWS Lambda 函数订阅到该主题,它将在队列为空达到指定持续时间(例如超过 5 分钟)时触发。只有当闹钟进入'Alarm'状态时才会触发,直到闹钟退出状态并且再次进入状态。
重要:配置报警时,进入附加配置,设置缺失数据处理 到“将缺失数据视为不良数据(超出阈值)”。这是必需的,因为如果队列为空,SQS 队列将不会发送指标。 (很多队列是空的,所以这节省了大量的度量存储!)
不寻常的模式。
您或许可以将 Lambda 函数并发性设置为 1,这意味着只能同时发生一个调用,然后让您的 Lambda 函数启动您的工作流程,然后删除导致调用 Lambda 的实际 SQS 事件触发器首先。这应该可以防止进一步调用。完成后添加 SQS 事件触发器,为下一批消息做好准备。
您可以将并发执行限制设置为 1,以确保只有 1 个 lambda 实例读取队列。但我不确定这是你可能想要做的事情。 Lambda 一次执行最多可以读取 10 条消息,如果您的队列收到太多传入消息,那么您的消息消费过程可能会花费太多时间。
我有一个 SQS FIFO 队列,我想知道是否有一种方法可以在队列不为空时触发 AWS lambda。 例如,如果我的队列为空并且一条新消息进入触发 lambda,但是如果队列已经包含至少一条消息并且一条新消息进入则不会触发 lambda。 可能吗?
有一个名为 ApproximateNumberOfMessagesVisible
的 Amazon CloudWatch 指标,它显示队列中的消息数。文档说“对于 FIFO 队列,结果是准确的。”
您可以创建一个 CloudWatch 警报,当消息数量下降到零 一段时间后触发。警报可以向 Amazon SNS 主题 发送消息。如果您将 AWS Lambda 函数订阅到该主题,它将在队列为空达到指定持续时间(例如超过 5 分钟)时触发。只有当闹钟进入'Alarm'状态时才会触发,直到闹钟退出状态并且再次进入状态。
重要:配置报警时,进入附加配置,设置缺失数据处理 到“将缺失数据视为不良数据(超出阈值)”。这是必需的,因为如果队列为空,SQS 队列将不会发送指标。 (很多队列是空的,所以这节省了大量的度量存储!)
不寻常的模式。
您或许可以将 Lambda 函数并发性设置为 1,这意味着只能同时发生一个调用,然后让您的 Lambda 函数启动您的工作流程,然后删除导致调用 Lambda 的实际 SQS 事件触发器首先。这应该可以防止进一步调用。完成后添加 SQS 事件触发器,为下一批消息做好准备。
您可以将并发执行限制设置为 1,以确保只有 1 个 lambda 实例读取队列。但我不确定这是你可能想要做的事情。 Lambda 一次执行最多可以读取 10 条消息,如果您的队列收到太多传入消息,那么您的消息消费过程可能会花费太多时间。