由SQS触发的AWS Lambda增加了SQS请求数量

时间:2018-10-20 10:26:36

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

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

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

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

简而言之,我想减少SQS请求的数量,同时使用SQS调用Lmabda函数时该怎么做?

2 个答案:

答案 0 :(得分:9)

使用SQS作为AWS Lambda的事件源时,AWS Lambda会定期轮询已配置的SQS队列以获取新消息。尽管官方文档尚不清楚,但是blog post announcing that feature进入了详细信息:

  

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

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

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

虽然增加长轮询持续时间似乎是减少请求数量的简便方法,但这是不可能的,因为默认情况下AWS Lambda使用的20秒已经是maximum possible duration for an SQS queue。将它用作AWS Lambda的事件源时,恐怕没有简单的方法来减少对SQS的请求。取而代之的是值得评估是否另一个事件源(例如SNS)也适合您的用例。

答案 1 :(得分:2)

这是我们最初在没有SQS触发器的情况下实现的方式。

使用SQS Cloudwatch指标创建SNS触发器

  

roximateNumberOfMessagesVisible> 0

从SNS触发Lambda,从SQS读取消息并将其传递给需要消息的Lambda。

或者,您可以使用 Kinesis 将其交付给Lambda。

  

SQS-> Cloudwatch(触发Lambda)-> Lambda(读取消息)->   Kinesis(设置批次大小)-> Lambda(处理实际消息)

您也可以直接使用Kinesis,但不会延迟交付。

希望有帮助。