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

AWS Lambda获取apiKeyId遇KeyError:'requestContext'缺失问题咨询

AWS Lambda获取apiKeyId时requestContext缺失的问题及解决办法

一、字段缺失的原因

  • 控制台测试事件是自定义模拟结构:前辈的代码是针对API Gateway触发Lambda的场景编写的,而AWS控制台默认生成的测试事件是极简模板,不会包含requestContext这类由API Gateway注入的上下文信息。只有当Lambda被API Gateway(REST API/HTTP API)实际调用时,才会自动填充这些字段。
  • API Gateway配置不完整:即使是API Gateway触发,如果没启用API Key认证、或者未配置将API Key信息传递给Lambda,requestContext.identity.apiKeyId也不会出现。比如REST API需要确保集成请求的映射模板包含上下文变量,HTTP API需要在集成设置里选择包含上下文数据的payload格式。

二、获取apiKeyId的其他方式

1. 正确通过API Gateway触发并配置传递

  • REST API场景:确保API启用了API Key认证,在集成请求的「映射模板」中,添加对requestContext.identity.apiKeyId的传递(比如使用VTL模板{"apiKeyId": "$context.identity.apiKeyId"}),这样Lambda的event中就能拿到该字段。
  • HTTP API场景:HTTP API的上下文字段路径不同,需要从event['requestContext']['http']['apiKeyId']获取,同时要确保在HTTP API的集成设置中,将「Payload格式版本」设为2.0(只有2.0版本会包含完整的上下文信息)。

2. 手动构造测试事件模拟

如果需要在控制台测试,可以手动修改测试事件,添加requestContext结构,比如:

{
  "httpMethod": "GET",
  "queryStringParameters": {"q": "toto"},
  "requestContext": {
    "identity": {
      "apiKeyId": "your-test-api-key-id"
    }
  }
}

3. 通过请求头获取并查询API Key ID

如果客户端请求中直接携带了x-api-key请求头(API Key的值),可以先从event中拿到该值:

api_key_value = event['headers'].get('x-api-key')

然后使用boto3调用API Gateway的get_api_key接口,通过API Key的值查询对应的ID(需要Lambda有apigateway:GetApiKey权限):

import boto3

client = boto3.client('apigateway')
response = client.get_api_key(
    value=api_key_value,
    includeValue=False
)
api_key_id = response['id']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 19:49:52