AWS AddCourse Lambda异常返回Index Lambda的Hello World响应问题排查
问题根因
- 镜像构建上下文配置冲突:你两个Lambda函数的
PackageType都设为Image,且Metadata中的DockerContext统一指定为./src、共用src目录下的同一个Dockerfile。默认Dockerfile会将src作为工作目录,使用根目录下的app.js作为执行入口,所以最终构建出的两个Lambda镜像运行的都是Index函数的代码。 - 镜像模式下Handler参数不生效:当Lambda使用镜像包类型部署时,执行入口由Dockerfile中的
ENTRYPOINT/CMD指令定义,你为AddCourse配置的Handler: index.lambdaHandler不会被读取,自然不会加载src/api/course下的代码。 - CodeUri配置未匹配镜像构建逻辑:镜像模式下
CodeUri指向的是Dockerfile所在的目录,你给AddCourse设置的CodeUri和实际DockerContext路径不一致,该配置不会生效。
你现有的应用目录结构本身没有本质错误,只是部署配置和目录结构没有对应上导致的问题。
修复方案
方案1:切换为Zip包部署(轻量项目更推荐)
Zip模式下Handler参数会生效,修改template.yml配置即可:
- 删掉两个函数配置中的
PackageType: Image字段,SAM默认使用Zip包部署 - 保留Index函数现有配置即可正常运行
- 确认AddCourse的
CodeUri指向src/api/course/Course-POST-CreateNewCourse目录,Handler: index.lambdaHandler配置对应你代码的导出方法即可。
方案2:继续使用镜像部署
需要修正镜像构建配置,二选一即可:
- 给每个Lambda单独准备Dockerfile,放在对应函数的CodeUri目录下,每个Dockerfile单独指定对应代码文件作为执行入口
- 共用同一个Dockerfile的话,在Dockerfile中通过构建参数接收入口路径,两个函数的
Metadata块中添加DockerBuildArgs参数传入各自的入口文件路径。
内容的提问来源于stack exchange,提问作者Esteban
相关产品推荐
相关产品推荐

