You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS免费层SQS配额将耗尽,Lambda空接收请求优化咨询

解决SQS空接收导致免费层请求超限的问题

核心原因

你遇到的情况确实是Lambda服务轮询SQS队列导致的。当用SQS作为Lambda触发源时,Lambda会自动维持长连接轮询队列,哪怕队列里没有消息,也会定期发起请求检查,这些空接收的请求都会被计入SQS的请求次数配额。

不关注性能前提下的优化方案

1. 延长SQS长轮询等待时间

在CDK中配置SQS队列时,设置最长的receiveMessageWaitTime(最大20秒),让Lambda每次轮询时等待更久再返回空结果,直接减少单位时间内的请求次数:

// CDK TypeScript示例
const testQueue = new sqs.Queue(this, 'TestQueue', {
  receiveMessageWaitTime: cdk.Duration.seconds(20),
});

new lambda.EventSourceMapping(this, 'QueueEventSource', {
  target: testLambda,
  eventSourceArn: testQueue.queueArn,
});

2. 限制Lambda轮询并发数

默认Lambda会针对单个SQS队列启动多个并发轮询进程,通过maxConcurrency将并发数限制为1,大幅降低同时发起的请求量:

new lambda.EventSourceMapping(this, 'QueueEventSource', {
  target: testLambda,
  eventSourceArn: testQueue.queueArn,
  maxConcurrency: 1,
});

3. 临时禁用闲置队列的触发

如果部分队列暂时不需要测试,直接在CDK中注释掉对应的EventSourceMapping,或者在AWS控制台暂停Lambda的SQS触发源,彻底停止空轮询请求。

4. 改用手动触发(仅测试场景)

完全关闭Lambda的自动轮询机制,只有当你主动向SQS发送测试消息后,再通过控制台、CLI手动触发Lambda拉取消息,从根源上避免空轮询产生的请求。

验证优化效果

调整后可以在CloudWatch监控中查看SQS的NumberOfEmptyReceives指标,确认请求次数是否下降,避免超出免费层100万次的限额。

内容的提问来源于stack exchange,提问作者fudo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 19:52:06