如何在多个AWS Lambda中复用自定义NodeJS代码且无需发布至npm
方案1:无需发布npm的标准Node.js Lambda层打包方法
你遇到的报错和package-lock.json完全无关,核心原因是层的zip压缩包目录结构不符合AWS Lambda的要求,按以下步骤操作即可:
- 如果你是在原有层的基础上修改:直接把你写的
mypack自定义包文件夹,放到原有层的nodejs/node_modules目录下,确保最终的zip解压后目录结构如下:nodejs/ ├── node_modules/ │ ├── 原有依赖包1/ │ ├── 原有依赖包2/ │ └── mypack/ # 你的自定义包 │ ├── package.json │ └── index.js └── package-lock.json(原有文件不用改) - 选中
nodejs文件夹直接打包为zip(注意不要把外层的父目录打进压缩包,解压后必须直接能看到nodejs文件夹) - 上传zip作为Lambda层的新版本,关联到你的函数后,直接用
const mypack = require('mypack')即可正常调用,完全不需要把包发布到公共npm仓库。
方案2:绝对路径直接引用层内文件
如果你不想走Node.js模块加载逻辑,直接引用单个js文件也可以,所有Lambda层的内容都会被固定挂载到/opt目录下,操作步骤如下:
- 把你的自定义代码文件(比如
sort.js)直接放到nodejs文件夹下,打包成zip上传为层 - 在Lambda函数中直接用固定路径引用即可:
const sortUtil = require('/opt/nodejs/sort.js'); // 直接调用自定义方法 sortUtil.mySortFunc();
如果你的代码文件直接放在zip的根目录(没有嵌套nodejs文件夹),引用路径就是/opt/sort.js。
内容的提问来源于stack exchange,提问作者Sfp
相关产品推荐
相关产品推荐

