我想知道是否可以向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队列:
SQS队列,然后在SQS事件上触发Lambda