AWS Lambda与SQS的集成

3
AWS Lambda是否支持监听SQS队列?我发现有一些例子表明可以这样做,但我不确定AWS Lambda是否明确提供了支持。当我创建Lambda函数时,我发现有一个用于SQS的蓝图。因此,
4个回答

3

好消息,这个功能昨天发布了!

2018年6月28日:AWS Lambda增加了对Amazon Simple Queue Service的支持事件源

在此处阅读公告博客文章:https://aws.amazon.com/blogs/aws/aws-lambda-adds-amazon-simple-queue-service-to-supported-event-sources/

AWS Serverless Model 支持以下新的事件源:

Type: SQS
 PropertiesProperties:
  QueueQueue: arn:aws:sqs:us-west-2:012345678901:my-queue arn:aws:sqs:us-west-2:0123456789 # NOTE: FIFO SQS Queues are not yet supported
  BatchSize: 10

以下是关于如何从AWS控制台UI进行配置的说明:

您可以从AWS控制台UI中进行以下配置:

lambda sqs event source


3

我在你的其他帖子中提供了链接 - 这些是支持的事件源。请注意,Cloudwatch事件是可能的事件类型之一。例如,您可以设置Lambda每分钟运行并轮询SQS队列。您不能直接从SQS队列触发Lambda。


谢谢。是的,一种方法是轮询。您所说的Cloudwatch事件是什么意思?您是否指的是从我的SQS发送事件到Cloudwatch,在其中可以在Lambda中触发? - hatellla
不是从 Cloudwatch 直接发送事件到 SQS 队列,而是先发送到 Lambda,再由 Lambda 读取该队列。 - stdunbar
2
是的,因为从 SQS 获取消息的唯一方法是轮询。您无法在没有轮询的情况下收到新消息的通知。SNS 是一种事件驱动模型。 - stdunbar
当消息数量超过1时,您无法让SQS触发CloudWatch事件,然后使您的Lambda函数订阅该事件吗? - idbehold
@idbehold - 这样做是可行的,但现在你将在几乎每个消息上运行Lambda,并没有充分利用Lambda排放或删除大量消息的能力。这将导致你比需要更频繁地运行Lambda。 - stdunbar

1
你可以使用SQS API让lambda函数轮询队列。你可以使用SNS触发Lambda函数。

你是在说有两种方法可以做到这一点吗?一种是使用 SQS,另一种是使用 SNS 而不是 SQS,对吗? - hatellla
1
不,你需要将它们全部配置为解决方案的一部分来协同工作。 - David Findlay
好的。非常感谢。 - hatellla

1

更新:现在可以从Amazon SQS队列触发AWS Lambda。


旧答案:

不要让AWS Lambda轮询Amazon SQS队列,而是应该直接调用发送消息到SQS队列的应用程序。有几种方法可以实现这一点:

  • 通过AWS API调用进行直接调用
  • 向Lambda函数订阅的Amazon SNS主题发送消息
  • 通过AWS API Gateway调用函数,随后可以触发Lambda函数

将消息放入SQS队列的额外步骤是不必要的。


“将消息放入 SQS 队列的额外步骤是不必要的。” 只是出于好奇,由于 Lambda 并发性,将 Lambda 调用与 SQS 绑定是否有意义。我看过一些 AWS 文章也是这样说的。 - Praveen Sripati
我的回复是在Lambda从SQS触发之前写的。Lambda并发包括等待,以防并发限制已达到,因此您不需要使用SQS。请参见:管理Lambda函数的并发-AWS LambdaAWS Lambda函数扩展-AWS Lambda - John Rotenstein
酷!谢谢约翰!我正在寻找与Lambda相关的东西,然后发现了这个。如果你有时间,请修改一下回复。 - Praveen Sripati

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接