当消息存在于 SQS 队列中时触发 AWS 中的 Lambda 函数

Posted

技术标签:

【中文标题】当消息存在于 SQS 队列中时触发 AWS 中的 Lambda 函数【英文标题】:Trigger Lambda Function in AWS when the message is present in SQS Queue 【发布时间】:2017-04-29 11:33:12 【问题描述】:

我正在使用 AWS Lambda 函数来处理队列中的消息,它工作正常。但是当消息可用或添加到 SQS 队列中时,我需要执行此 Lambda 函数。

是否可以基于 SQS 队列触发 Lambda 函数。请建议一种方法来实现此目标。

【问题讨论】:

【参考方案1】:

不直接支持从 SQS 队列调用 Lambda 函数。您可以在此处查看可用触发器的列表:http://docs.aws.amazon.com/lambda/latest/dg/invoking-lambda-function.html

可能的解决方案:

    将 SQS 队列替换为 Kinesis 或 DynamoDB。两者都可以在更新时触发 Lambda 函数。 在 SQS 之前注入 SNS。 SNS 可以向 SQS 添加项目触发 Lambda 函数。

如果您不需要近乎实时的处理,这两个选项也是有效的:

    创建将每 N 分钟(例如每分钟)触发 Lambda 函数的 CloudWatch 事件规则。 为您的 SQS 队列创建 CloudWatch 警报监视 ApproximateNumberOfMessagesVisible 参数。此警报应发布到 SNS 主题,然后触发 Lambda 函数。

【讨论】:

能否请您详细解释一下这个方法:“在SQS之前注入SNS。SNS可以向SQS添加项目并触发Lambda函数” 您可以通过 SNS API 发布到 SNS 主题。 SNS 会将消息扇出到多个端点。 我在这个 AWS 中不太好,因为我只是这里的初学者。你能帮我详细说明一下吗 请参阅docs.aws.amazon.com/sns/latest/dg/SendMessageToSQS.html 了解更多信息。基本上,您更改了将消息推送到 SQS 队列的系统;它应该将消息发布到 SNS 主题,然后如果您将队列设置为订阅者,该主题将散布到您的 SQS 队列。 在SQS之前注入SNS时,如何保证消息加入SQS后触发lambda函数?【参考方案2】:

Lambda 现在支持将 SQS 作为本机事件源

https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html

【讨论】:

以上是关于当消息存在于 SQS 队列中时触发 AWS 中的 Lambda 函数的主要内容,如果未能解决你的问题,请参考以下文章

AWS SQS:当消费者发生错误时移动到死信队列

消息发布到 SQS 时如何触发 lambda?

无服务器中的 SQS 触发 lambda 存在延迟

Spring Cloud - SQS - 此wsdl版本的指定队列不存在

AWS SAM 模板 - 定义由 API Gateway 触发的 SQS 队列

AWS SQS JMS确认