AWS SQS + SNS + Lambda

我想知道是否可以向SQS队列发送消息,并订阅SNS主题来触发发送电子邮件的lambda。

SQS→SNS→Lambda→SES

我知道SNS信息可以发送到SQS,但我很好奇,如果有其他的方法是可能的

我做的一件事是在SQS队列的ApproximateNumberOfMessagesVisible>= 1 for 5 minutes )上创build一个CloudWatch警报。 警报发布到触发lambda函数的SNS主题。 lambda函数循环直到清除队列。

从报警触发最多可能需要5分钟的时间,但对批处理计划任务来说,它却非常有效,无需轮询队列。 (活动队列的报警粒度为5分钟。)

你不能去SQS -> SNS ,只有SNS -> SQS

Lambda 现在支持调度,因此一种select是在Lambda函数中实现SQS轮询器并频繁运行。

另一个需要考虑的select是你是否真的需要一个队列。 Lambda支持asynchronous处理(通过事件调用模式),并且应该透明地水平伸缩以处理并行调用。 如果您的lambda函数不需要访问可能会限制并行执行的中央状态存储,那么您可能只需并行运行所有的调用。 我相信每个帐户有100个并发执行限制,所以你可能需要批量消息,以保持这个限制。

SQS队列可以订阅SNS主题,处理收到的SNS消息。 目前,如果没有额外的编码,则无法在其他方向上实现(参见例如Lambda FAQ )。

我会说有几个选项如何做,但不像使用更常见的事件驱动系统AWS event->SQS->Lambda那么优雅。 否则,您可能需要定制/实现代码如何处理SQS队列:

  1. 你可以实现你自己的事件源
  2. 您可以使用一些中间EC2实例来侦听SQS队列,然后在SQS事件上触发Lambda