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

如何在Lambda中查询AWS API Gateway Usage Plan对应API Key的剩余请求配额

解决方案

AWS API Gateway 没有提供直接查询剩余配额的原生接口,你可以通过组合调用AWS官方API计算剩余额度,具体实现步骤如下:

1. 配置Lambda执行角色权限

首先需要为你的Lambda函数的执行IAM角色添加以下权限:

  • apigateway:getApiKey:用于通过API Key字符串查询对应的Key ID、关联的使用计划ID
  • apigateway:getUsagePlan:用于查询使用计划配置的总配额
  • apigateway:getUsage:用于查询指定时间段内API Key的已使用请求次数

2. 核心实现逻辑

整体计算逻辑为:剩余额度 = 使用计划月总配额 - 当前月已使用请求次数
具体流程:

  • 首先从API Gateway触发Lambda的事件参数中获取用户传入的API Key字符串,调用get_api_key接口获取该Key的ID以及关联的使用计划ID
  • 调用get_usage_plan接口,获取该使用计划配置的每月请求总配额
  • 调用get_usage接口,传入使用计划ID、API Key ID、当月的起止时间范围,获取该Key当月已使用的请求次数
  • 两者做差即可得到剩余请求额度

3. Python代码示例(基于boto3)

import boto3
from datetime import datetime
from calendar import monthrange

client = boto3.client('apigateway')

def get_remaining_quota(api_key_str):
    # 1. 获取API Key详情
    key_resp = client.get_api_key(
        apiKey=api_key_str,
        includeValue=False
    )
    key_id = key_resp['id']
    usage_plan_id = key_resp['stageKeys'][0]['usagePlanId'] # 可按实际关联的使用计划逻辑调整
    
    # 2. 获取使用计划总配额
    plan_resp = client.get_usage_plan(usagePlanId=usage_plan_id)
    monthly_quota = plan_resp['quota']['limit']
    
    # 3. 计算当月起止时间(UTC时间,可按需调整时区)
    now = datetime.utcnow()
    start_date = datetime(now.year, now.month, 1).strftime('%Y-%m-%d')
    end_date = datetime(now.year, now.month, monthrange(now.year, now.month)[1]).strftime('%Y-%m-%d')
    
    # 4. 获取当月已使用次数
    usage_resp = client.get_usage(
        usagePlanId=usage_plan_id,
        keyId=key_id,
        startDate=start_date,
        endDate=end_date
    )
    used_count = sum(usage_resp['items'][0])
    
    # 5. 返回剩余额度,避免出现负数
    return max(0, monthly_quota - used_count)

4. 注意事项

  • getUsage接口返回的调用数据存在2-5分钟的延迟,如果你需要近实时的配额统计,建议自行在DynamoDB中维护请求计数:每次API请求触发Lambda时,对应用户Key的计数原子加1,查询时直接读取DynamoDB中的数值即可
  • 如果你的使用计划配额是按天/周配置的,只需调整getUsage接口传入的时间范围即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:06:06