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

如何在FastAPI中获取AWS Lambda的请求ID、请求时间戳等元数据?

在FastAPI+AWS Lambda架构中获取Lambda元数据的方案

当你用FastAPI搭配AWS API Gateway和Lambda时,FastAPI自带的request对象不会包含Lambda的上下文元数据,得通过以下方式把这些数据注入到FastAPI的请求流程里:

方案1:通过自定义Mangum适配器传递Lambda上下文

FastAPI部署到Lambda一般用Mangum做适配器,你可以自定义适配器逻辑,把Lambda的context对象存到FastAPI的请求状态中:

  1. 确保安装了Mangum:
pip install mangum
  1. 修改应用代码:
from fastapi import FastAPI, Request
from mangum import Mangum

app = FastAPI()

class CustomMangum(Mangum):
    def __call__(self, event, context):
        # 把Lambda上下文存入FastAPI请求状态
        self.scope["state"]["lambda_context"] = context
        return super().__call__(event, context)

@app.put("/users/{user_id}")
async def update_user(user_id: str, request: Request):
    # 从请求状态取出Lambda上下文
    lambda_ctx = request.state.lambda_context
    
    # 提取所需元数据
    request_id = lambda_ctx.aws_request_id
    # Lambda启动时间(可作为请求触发时间参考)
    invoke_time = lambda_ctx.invoke_time
    
    # 你的用户更新逻辑
    # ...
    
    # 日志记录
    print(f"Request ID: {request_id}, Invoke Time: {invoke_time}, Updated User: {user_id}")
    return {"status": "success", "request_id": request_id}

handler = CustomMangum(app)

方案2:从API Gateway事件中提取元数据

如果是API Gateway触发的Lambda,请求事件event里也包含请求相关的元数据,同样可以通过自定义Mangum注入到请求状态:

class CustomMangum(Mangum):
    def __call__(self, event, context):
        self.scope["state"]["lambda_event"] = event
        self.scope["state"]["lambda_context"] = context
        return super().__call__(event, context)

@app.put("/users/{user_id}")
async def update_user(user_id: str, request: Request):
    lambda_event = request.state.lambda_event
    # 注意:API Gateway V1和V2的事件结构有差异,以下是V2示例
    request_id = lambda_event["requestContext"]["requestId"]
    request_time = lambda_event["requestContext"]["requestTime"]
    
    # 业务逻辑...
    print(f"API Gateway Request ID: {request_id}, Request Time: {request_time}, User ID: {user_id}")
    return {"status": "success"}

关键说明

  • Lambda的aws_request_id是Lambda服务生成的请求标识,和API Gateway的requestId不是同一个值,按需选择即可。
  • 若使用API Gateway V1,事件中的元数据路径是event['requestContext']['requestId']、event['requestContext']['requestTime'],和V2略有不同。
  • 自定义Mangum时不要修改原有请求流程,仅添加元数据注入逻辑,避免影响FastAPI的正常功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 12:48:09