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

如何本地测试关联AWS Lambda的容器化FastAPI应用

本地测试容器化FastAPI+Lambda的解决方案

1. 修正Lambda调用的请求格式

你当前的请求格式不符合Lambda事件规范,核心问题有两个:

  • Lambda事件里的body字段必须是JSON字符串(不能直接放JSON对象)
  • Lambda原生事件结构没有files字段,文件上传需要把内容转成base64编码后放到body中

正确的请求示例如下:

{
  "resource": "/upload/",
  "path": "/upload/",
  "httpMethod": "POST",
  "requestContext": {},
  "multiValueQueryStringParameters": null,
  "headers": {
    "Accept": "application/json",
    "Content-Type": "application/json"
  },
  "body": "{\"filename\": \"image.jpg\", \"file_content\": \"base64编码的图片内容\"}",
  "isBase64Encoded": false
}

如果是二进制文件,把isBase64Encoded设为true,同时body填文件的base64字符串即可。

2. 修复FastAPI代码的错误

你代码里返回request.json()时没有加await,这会导致返回协程对象而非实际JSON数据,修改后的代码:

from fastapi import FastAPI, Request
from mangum import Mangum

app = FastAPI()

@app.post("/upload/")
async def upload_image(request: Request):
    print(request)
    request_body = await request.json()
    print(request_body)
    raw_body = await request.body()
    print(raw_body)
    
    return {"received_request_body": request_body}

handler = Mangum(app)

3. 本地测试的正确流程

  • 先确保Docker镜像构建完成,启动容器(假设镜像名为fastapi-lambda):
    docker run -p 9000:8080 fastapi-lambda
    
  • 用curl或Postman发送POST请求到localhost:9000/2015-03-31/functions/function/invocations,请求体用上面修正后的JSON格式
  • 查看容器日志调试:
    docker logs <容器ID>
    

额外提示

  • Mangum会自动把Lambda事件转换成FastAPI能识别的Request对象,所以你写接口逻辑和普通FastAPI应用一致,不用额外适配Lambda事件
  • 建议先在本地直接运行FastAPI(不套容器和Lambda)调试通接口,再用Mangum和Docker容器测试,更容易定位问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 15:30:21