限制AWS Lambda每小时调用次数的最简单方法
限制AWS Lambda每小时调用次数的最简实现方案
方案1(优先推荐,适配你的API Gateway触发场景)
直接在API网关入口配置用量计划,无需修改现有业务代码,也不需要引入额外服务,超过配额的请求会直接在网关层被拦截,不会触发Lambda执行和后续短信费用:
- 进入API Gateway控制台,找到你对接短信Lambda的API,启用
API Key功能 - 新建用量计划,按需求填写每小时请求配额上限,也可同时配置每秒速率限制做瞬时流控
- 将用量计划与你的API部署阶段、对应API Key绑定即可
如果你不想让调用方感知API Key的存在,可以在API Gateway中配置请求头重写逻辑,内部自动注入合法API Key,调用侧无需做任何适配。
方案2(适配存在多触发源、需要直接限制Lambda调用量的场景)
如果除了API Gateway之外还有其他服务会调用该短信Lambda,可通过轻量的计数器逻辑实现:
- 新建一个DynamoDB表,仅需存储
小时窗口标识(如格式为2024052013的字符串,代表对应自然小时)、调用次数两个字段,配置TTL自动过期超过24小时的历史窗口数据,避免存储浪费 - 在现有短信Lambda的代码最开头增加计数逻辑:先查询当前自然小时的调用次数,若已达阈值直接返回终止执行;若未达阈值,调用DynamoDB的原子加方法
Increment更新计数后,再执行后续短信发送逻辑
该场景下DynamoDB的读写请求量极低,基本都在AWS免费使用额度覆盖范围内,额外成本可忽略。
内容的提问来源于stack exchange,提问作者maxime
相关产品推荐
相关产品推荐

