AWS Lambda部署函数报错:无法找到handler模块求助
问题描述
通过AWS Lambda界面部署函数,未使用serverless.yml或CLI工具,Handler设置为functions/fetchNest/handler.fetch,触发报错:
错误信息
"errorType": "Runtime.ImportModuleError", "errorMessage": "Error: Cannot find module 'handler'\nRequire stack:\n- /var/runtime/index.mjs", "stack": [ "Runtime.ImportModuleError: Error: Cannot find module 'handler'", "Require stack:", "- /var/runtime/index.mjs", " at _loadUserApp (file:///var/runtime/index.mjs:951:17)", " at async Object.UserFunction.js.module.exports.load (file:///var/runtime/index.mjs:976:21)", " at async start (file:///var/runtime/index.mjs:1137:23)", " at async file:///var/runtime/index.mjs:1143:1" ]
相关代码(handler.js)
module.exports.fetch = async event => { // Get SSM creds. }
文件夹结构

排查与解决步骤
修正Handler路径与打包层级匹配
AWS Lambda的Handler路径是基于部署包根目录的相对路径,格式为[文件路径不带.js后缀].[导出函数名]。错误核心是打包层级和Handler设置不匹配:- 如果你的部署包根目录直接包含
functions/fetchNest/handler.js,那functions/fetchNest/handler.fetch是正确的; - 如果打包时把
fetchNest文件夹里的内容作为根目录,那Handler要改成handler.fetch。
最常见的错误是打包时包含了多余的上层目录,比如本地是
项目根/functions/fetchNest/handler.js,却把项目根整个打包上传,导致Lambda找不到functions/fetchNest/handler(实际路径变成了项目根/functions/fetchNest/handler)。- 如果你的部署包根目录直接包含
检查部署包结构
本地解压你上传的ZIP包,确认从包的根目录能直接找到对应路径的handler.js。比如用functions/fetchNest/handler.fetch作为Handler的话,解压后必须能看到functions文件夹,里面嵌套fetchNest和handler.js。确认Runtime设置
确保Lambda函数的Runtime选择的是Node.js版本,你的代码用了CommonJS格式(module.exports),选其他Runtime(比如Python)必然会报错。快速修复方案
进入本地functions/fetchNest文件夹,把该文件夹下的所有文件打包成ZIP,上传到Lambda后将Handler设置为handler.fetch,这样Lambda能直接从根目录找到handler.js并加载fetch函数。
内容的提问来源于stack exchange,提问作者Lucas.Pheliny

