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

时间:2015-05-26 13:14:48

标签: amazon-web-services amazon-sqs amazon-sns aws-lambda

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

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

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

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

目前一个SNS Topic无法找到您要查找的内容。如果您Lambda订阅SNS Topic每次Lambda收到消息时,SNS Topic特定SNS Topics将被执行。

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

另一种可能的解决方案可能是上面的,您可以向第二个主题发送一些定期消息来运行订阅的Lambda SQS Workers。这样您就可以扩展VVC_SQL_STMT := 'SELECT COLUMN1 ' || ' FROM( ' || ' SELECT * ' || ' FROM ' || VVC_TABLE_NAME || ' WHERE column2 = :1 ' || ' ORDER BY DBMS_RANDOM.VALUE) ' || ' WHERE ROWNUM = 1'; EXECUTE IMMEDIATE VVC_SQL_STMT INTO VNM_RAND_NUMBER USING i;

答案 2 :(得分:0)

将SQS队列和Lambda函数预订到SNS主题是让Lambda函数以低延迟处理SNS消息的好方法。我刚刚测试过这个过程。每次尝试都会在插入SQS消息后调用lambda函数。我不会期望这种情况总是如此,但它确定了我愿意衡量的最佳延迟问题。它无法保证,您需要一个CloudWatch预定活动来接收任何错过的消息。