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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 03:33:34