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

如何在Dockerfile的CMD中指定AWS Lambda非根目录handler路径

解决SAM本地调用找不到子目录下FastAPI模块的问题

1. 修正SAM模板的Handler配置

SAM的handler路径遵循Python模块导入规则,用.分隔目录层级,而非文件路径的/。把template.yaml中函数的Handler字段改成子目录对应的模块路径:

Resources:
  MyFastAPIFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: src.dir1.app.lambda_handler
      # 其他配置(Runtime、CodeUri等)保持不变

这里src.dir1.app对应src/dir1/app.py文件,lambda_handler是你在app.py中定义的Lambda入口函数。

2. 配置Python路径(关键)

SAM默认从项目根目录加载模块,需要把src目录加入Python搜索路径,有两种规范方式:

方式一:在SAM模板中设置环境变量

在函数的Properties里添加Environment配置:

Properties:
  # 其他配置
  Environment:
    Variables:
      PYTHONPATH: ./src

方式二:在Dockerfile中设置环境变量(自定义镜像场景)

如果用Docker镜像部署,在Dockerfile里添加:

ENV PYTHONPATH=/var/task/src

Lambda默认工作目录是/var/task,这里把src目录加到Python路径中。

3. 修正Dockerfile的CMD指令(自定义镜像场景)

不要用相对路径格式的CMD,必须使用Python模块路径格式:

# 替换原来的CMD,禁止使用["src/dir1/app.py", "lambda_handler"]这类格式
CMD ["src.dir1.app", "lambda_handler"]

4. 本地测试验证

先确认目录结构正确:

项目根目录/
├─ template.yaml
├─ src/
│  └─ dir1/
│     └─ app.py
└─ 其他文件(如requirements.txt、Dockerfile)

执行本地调用命令:

sam local invoke MyFastAPIFunction

常见注意事项

  • 目录和文件名不要包含空格或特殊字符,避免模块导入失败
  • 确保app.py中正确导出了lambda_handler函数(比如用mangum包包装FastAPI应用的场景)
  • 本地测试时如果使用虚拟环境,确保激活对应环境再执行SAM命令

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 00:50:21