仅在处理同一主题的 SQS 订阅后调用 AWS Lambda SNS 事件

Invoke AWS Lambda SNS event only after SQS subscription on same topic has been processed

我想实现一个 Amazon SNS 主题,该主题首先将消息传送到作为主题订阅者的 SQS 队列,然后执行也是同一主题订阅者的 AWS Lambda 函数。然后,Lambda 函数可以从 SQS 队列中读取消息并并行处理其中的几条消息(数百条)。

我的问题是是否有任何方法可以保证发送到 SNS 主题的消息首先传递到 SQS 队列,然后才传递到 Lambda 函数?

这样做的目的是扩展到大量消息,而不必为每条消息单独执行 Lambda 函数。

您正在寻找的内容目前无法通过一个 SNS Topic 实现。如果您将 Lambda 订阅到 SNS Topic,则每次 SNS Topic 收到一条消息时,特定的 Lambda 都会并行执行。

解决方案可能是有两个 SNS Topics 并向第一个发布消息并让您的 SQS 订阅它。向第一个主题成功提交消息后,您可以向第二个 SNS Topic 发送消息以执行您的 Lambda 以处理第一个 SNS Topic 存储到 SQS 的消息。

另一种可能的解决方案可能是上述方法,您可以向 运行 订阅的 Lambda 的第二个主题发送一些定期消息。这将允许您扩展 Lambda SQS Workers.

为此,如果从云监视警报中使用,触发 lambda 可能会更好、更高效。将云监视警报设置为 SQS 上的缓冲区限制,这可能会触发 lambda 以启动并处理整个队列。

为 SNS 主题订阅 SQS 队列和 Lambda 函数是让 Lambda 函数以低延迟处理 SNS 消息的好方法。我刚刚测试了这个过程。每次尝试都会在插入 SQS 消息后调用 lambda 函数。我不希望情况总是如此,但它解决了我愿意衡量的最佳延迟问题。不能保证,您将需要 CloudWatch 计划的事件来接收任何错过的消息。