使用AWS SAM部署Lambda时遭遇handlerNotFound错误求助
解决AWS SAM部署Lambda后出现handlerNotFound错误的问题
针对你遇到的handlerNotFound错误,结合你的SAM配置和代码,整理以下排查和解决步骤:
1. 检查esbuild打包产物的正确性
执行sam build后,前往.aws-sam/build/CreateUser目录:
- 确认存在
app.js文件; - 打开该文件,检查是否存在
createUser函数的导出(比如exports.createUser或export const createUser)。
如果文件不存在或导出缺失,说明esbuild构建过程有问题,可尝试删除.aws-sam目录后重新执行sam build。
2. 关闭Minify或保留导出函数名
你开启了Minify: true,可能导致导出的函数名被混淆。可按以下方式验证和解决:
- 暂时关闭压缩,修改SAM配置:
Metadata: BuildMethod: esbuild BuildProperties: Minify: false Target: es2020 Sourcemap: true EntryPoints: - app.ts
重新构建部署后若错误消失,说明是压缩导致的问题,此时添加KeepNames: true保留函数名即可:
Metadata: BuildMethod: esbuild BuildProperties: Minify: true KeepNames: true Target: es2020 Sourcemap: true EntryPoints: - app.ts
3. 确保Node.js模块格式兼容
Lambda的Node.js 18.x运行时默认使用CommonJS模块,若你的代码用ES模块写法(export const),需在项目根目录或src目录的package.json中添加:
{ "type": "module" }
或者将导出方式改为CommonJS:
exports.createUser = async (event: any, context: any, callback: any) => { const { input } = event.arguments; console.log(input); try { return await UserService.createUser(input); } catch (error) { callback(error); } };
4. 核对项目结构与CodeUri配置
确认你的项目结构符合以下形式:
项目根目录 ├── template.yaml └── src ├── app.ts └── UserService.ts
确保app.ts确实位于src目录下,与CodeUri: src/的配置一致。
5. 检查构建后的部署包完整性
查看.aws-sam/build/CreateUser目录,确认所有依赖文件(比如UserService相关编译文件)都已被esbuild正确打包到部署包中,避免因依赖缺失间接导致handler无法被识别。
内容的提问来源于stack exchange,提问作者PerunLob
相关产品推荐
相关产品推荐

