AWS SQS + SNS + Lambda

Chi*_*ida 11 amazon-web-services amazon-ses amazon-lambda

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

SQS -> SNS -> (Lambda) -> SES

我知道 SNS 消息可以发送到 SQS,但我很好奇是否可以采用相反的方式

squ*_*les 11

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

从警报触发最多可能需要 5 分钟,但它非常适合批量调度任务,而无需轮询队列。(活动队列的警报粒度为 5 分钟。)


the*_*cre 7

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

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

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

  • 对 lambda 使用传统的队列轮询器技巧也没有错:例如,如果 lambda 在执行期间使消息出队,则在最后重新触发该函数;否则让它按计划执行下一步 (3认同)

dsm*_*k80 1

SQS队列可以订阅SNS主题,从而处理接收到的SNS消息。目前,如果没有额外的编码,它就无法在其他方向上实现(参见常见Lambda问题解答)。

我想说有几个选择如何做到这一点,但它不如使用更常见的事件驱动系统那么优雅AWS event->SQS->LambdaSQS否则,您可能需要自定义/实现如何处理队列的代码:

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