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

FastAPI部署在AWS Lambda上无法提供静态资源(返回404错误)

FastAPI部署在AWS Lambda上无法提供静态资源(返回404错误)

看起来你遇到的问题很典型——FastAPI本地运行正常,但部署到Lambda+API Gateway后静态资源返回404,大概率是路径解析的问题,结合你的配置,我来帮你梳理一下原因和解决方案:

核心问题:静态资源挂载路径与Mangum的base_path重复

你在挂载静态目录的时候,把路径设成了f"{settings.formatted_api_stage}/static"(比如/dev/static),同时又给Mangum设置了api_gateway_base_path=settings.formatted_api_stage(也就是/dev)。这会导致路径解析冲突:

当用户请求https://xxx/dev/static/css/style.css时,API Gateway会把请求转发给Lambda,Mangum会自动去掉base_path/dev,所以FastAPI实际收到的请求路径是/static/css/style.css。但你的静态目录挂载的是/dev/static,自然匹配不到这个路径,返回404。

解决方案:调整静态目录的挂载路径

把静态挂载的路径改成纯"/static",去掉前面的stage前缀,修改代码如下:

application.mount(
    "/static",
    StaticFiles(directory=static_directory, check_dir=True),
    name="static",
)

这样,当Mangum处理完base_path后,FastAPI收到的/static/css/style.css请求就能正确匹配到挂载的静态目录,返回对应的资源。

验证模板中的URL生成

因为你已经给Mangum设置了api_gateway_base_path,FastAPI会自动把这个值作为root_path,所以模板里的{{ url_for('static', path='/css/style.css') }}会自动生成带stage前缀的正确路径(比如/dev/static/css/style.css),不需要手动修改模板代码。

额外排查建议

如果调整后还是有问题,可以做以下排查:

  • 检查Mangum版本:确保使用的是最新版Mangum,旧版本可能在base_path处理上有bug,可以通过pip install --upgrade mangum升级。
  • 添加请求日志:在FastAPI中加入一个中间件,打印实际收到的请求路径,确认路径是否符合预期:
    from fastapi import Request
    import logging
    
    logger = logging.getLogger(__name__)
    
    @application.middleware("http")
    async def log_request_path(request: Request, call_next):
        logger.info(f"Received request path: {request.url.path}")
        response = await call_next(request)
        return response
    
    然后去CloudWatch查看Lambda的日志,确认请求静态资源时的路径是否是/static/css/style.css。
  • 确认静态文件打包路径:虽然你说静态文件夹在Lambda bundle中,但可以通过Lambda控制台的“代码”标签查看目录结构,确认static文件夹确实和main.py在同一层级,且里面的文件都存在。

备注:内容来源于stack exchange,提问作者Sergii Gryshkevych

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 19:34:51