AWS Lambda Layer导入jsonwebtoken报Cannot find module错误如何解决
AWS Lambda Layer 模块无法加载解决方案
核心根因:压缩层级错误
你使用的zip -r LambdaLayer.zip LambdaLayer/命令会将LambdaLayer/作为根目录打包进压缩包,导致最终Layer解压后的路径为/opt/LambdaLayer/nodejs/node_modules,而Node.js 14.x 运行时默认只会从/opt/nodejs/node_modules路径加载Layer中的依赖,因此找不到模块。
正确操作步骤
- 进入存放
nodejs/目录的外层文件夹,直接压缩nodejs/目录本身,不要包含额外的父级目录:
cd LambdaLayer/ zip -r ../LambdaLayer.zip nodejs/
- 验证压缩包结构是否符合要求,执行以下命令查看压缩包内的文件层级:
unzip -l LambdaLayer.zip
输出结果中nodejs/必须直接处于压缩包根目录,示例如下:
Archive: LambdaLayer.zip Length Date Time Name --------- ---------- ----- ---- 0 2024-01-01 10:00 nodejs/ 0 2024-01-01 10:00 nodejs/package.json 0 2024-01-01 10:00 nodejs/package-lock.json 0 2024-01-01 10:00 nodejs/node_modules/ 0 2024-01-01 10:00 nodejs/node_modules/jsonwebtoken/
其他校验项
- 你尝试的
nodejs/node14/node_modules结构为多运行时版本兼容的自定义配置,官方标准Node.js 14.x运行时不需要额外增加node14层级,保持nodejs/node_modules结构即可 - 确认Lambda函数已关联对应版本的Layer,关联操作完成后需要重新部署函数配置才会生效
- 确认
jsonwebtoken依赖安装完整,没有出现npm安装中断导致的文件缺失问题 - 确认Layer和Lambda函数部署在同一AWS区域,跨区域无法正常关联使用
内容的提问来源于stack exchange,提问作者Michael Boñon
相关产品推荐
相关产品推荐

