首页 > 解决方案 > 由 SQS 触发的 AWS Lambda 增加了 SQS 请求计数

问题描述

我有一个由 SQS 触发的 AWS Lambda 函数。此函数每天大约触发 100 次,但 SQS 队列的请求计数每天大约为 20.000 次。我不明白为什么向 SQS 发出的请求数量太高。我的期望是向 SQS 发出的请求数应该与 Lambda 调用相同。

我的账户中只有一个 Lambda 函数和一个 SQS 队列。

可以和SQS队列的轮询有关吗?我试图从队列配置中更改 SQS 的轮询间隔,但没有任何改变。另一种可能性是从 Lambda 函数配置更改轮询间隔。但是,我找不到任何相关参数。

简而言之,我想减少 SQS 请求的数量,如何在使用 SQS 调用 Lmabda 函数时做到这一点?

标签: amazon-web-servicesaws-lambdaamazon-sqs

解决方案


将 SQS 用作 AWS Lambda 的事件源时,AWS Lambda 会定期轮询配置的 SQS 队列以获取新消息。虽然官方文档并不清楚这一点,但宣布该功能的博客文章详细介绍了这一点:

当最初创建并启用 SQS 事件源映射时,或者当消息在一段时间没有流量后首次出现时,Lambda 服务将开始使用五个并行长轮询连接轮询 SQS 队列。

根据AWS 文档,从 AWS Lambda 到 SQS 的长轮询的默认持续时间是 20 秒。

这会导致 AWS Lambda 函数每 20 秒向 SQS 发出 5 次请求,而没有显着负载,总计每天约 21600 次,接近您遇到的 20000 次。

虽然增加长轮询持续时间似乎是减少请求数量的一种简单方法,但这是不可能的,因为 AWS Lambda 默认使用的 20 秒已经是 SQS 队列的最大可能持续时间。当将 SQS 用作 AWS Lambda 的事件源时,恐怕没有简单的方法可以减少对 SQS 的请求。相反,如果另一个事件源(如 SNS)也适合您的用例,则可能值得评估。


推荐阅读