Amazon web services 由SQS触发的AWS Lambda增加了SQS请求计数

Amazon web services 由SQS触发的AWS Lambda增加了SQS请求计数,amazon-web-services,aws-lambda,amazon-sqs,Amazon Web Services,Aws Lambda,Amazon Sqs,我有一个AWS Lambda函数,它是由SQS触发的。此函数每天大约触发100次,但SQS队列的请求计数每天大约为20.000次。我不明白为什么向SQS提出的请求数量太多。我的期望是,向SQS发出的请求数量应该与Lambda调用相同 我的帐户中只有一个Lambda函数和一个SQS队列 是否可以与SQS队列的轮询相关?我试图从队列配置更改SQS的轮询间隔,但没有任何更改。另一种可能是更改Lambda函数配置的轮询间隔。但是,我找不到任何相关参数 简而言之,我想减少SQS请求的数量,如何在使用SQS

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

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

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


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

当使用SQS作为AWS Lambda的事件源时,AWS Lambda会定期轮询配置的SQS队列以获取新消息。虽然官方文件对此并不清楚,但其中的细节如下:

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

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

这导致AWS Lambda功能每20秒向SQS发出五次请求,而没有显著负载,总计每天约21600次,接近您所经历的20000次


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

以下是我们最初在没有SQS触发器时的实现方式

使用SQS Cloudwatch度量创建SNS触发器

ApproximateEnumberOfMessagesVisible>0

从SNS触发Lambda,从SQS读取消息并将其发送给Lambda需要消息的任何人

或者,您可以使用运动将其传递给Lambda

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

您也可以直接使用动觉,但没有延迟交付


希望有帮助。

您所说的“更改SQS的轮询间隔”是什么意思?另外,您在哪里看到列出的20000个请求?轮询间隔实际上是“接收消息等待时间”。可以在账单页面查看请求。特别是在标题下:“按使用情况划分的所有免费服务”。感谢您的澄清。SNS不适合我的用例,因为我需要两个连续的Lambda调用之间的延迟,而SQS具有消息延迟特性。也许AWS会提供更多的设置来配置并行连接和轮询持续时间。谢谢分享文档。这在设计上是非常糟糕的。当一条消息到达基础设施时,它应该知道收到了一条消息,应该从那里实现一个触发器。这是AWS的一个短路径和快速实现。很高兴我们正在维护SNS路径。我将尝试您的建议,即使用SQS Cloudwatch指标触发SNS。我不知道。谢谢