如何从外部 SQS 队列触发 AWS Lambda 函数 Activity

How to Trigger an AWS Lambda Function from External SQS Queue Activity

我正在尝试配置一个 lambda 函数以从我已获得读取和删除权限的 SQS 队列中使用,但我没有 own/have 配置。有没有办法对我的 AWS 账户中不存在的队列使用 lambda 的 SQS 触发器功能?

如果不是,有哪些替代方法不包括检查预定事件的队列。

如果 SQS 队列的所有者授予您必要的权限(有关这些权限的内容,请参阅 the setup docs),您可以执行此操作。但是,你不应该

订阅别人的 SQS 队列是一种反模式。这是因为队列代表工作的积压,隐含的功能是所有进入的东西最终都会到来出去。队列所做的只是将输入流与输出流分开(数据流入的速度可能比流出的速度快也可能慢)。

然而,这种流程的概念意味着当某样东西出来时,它不再在队列中。 (这里警告:有解决方法,但它们通常不是首选)。然而,消费者的目标始终是 处理队列中的所有内容 。这可能是由多个线程在一个消费者的控制下完成的,但最终的结果仍然是一切都被处理了。如果有多个消费者,那么他们必然会相互竞争,并且 none 他们会处理队列中的所有内容。

我们如何确保没有多个消费者? 简单: 消费者拥有队列。没有其他消费者被授予读取权限。很可能是消费者以外的其他人控制了队列的填充(接收写入权限)——而 AWS 对此有完美的解决方案:

SNS 主题: An SNS topic is a source of data. It is, in effect, a publisher. When someone else wants you to have access to their data, they allow you to become a subscriber to their topic. When a new message is published to the SNS topic, everyone who is subscribed to the topic gets a copy. What happens to that copy is decided by the subscriber: it may be acted upon directly, stored for later action, or acted on indirectly, e.g. by being placed in a queue. This is the Pub-Sub model。它将一个实体(发布者)创建消息并将它们发送给许多其他实体的细节与每个接收者(订阅者)关于如何使用这些消息的个人决定分开。


TL;DR:让当前拥有队列的人改为发布到 SNS 主题,然后设置订阅该主题的队列(或您喜欢的任何内容)。