我正在尝试连接到我的node.js AWS Lambda函数的sqlite3数据库。当我在本地测试它时,代码运行完美,但当我上传到AWS Lambda时,我得到以下错误消息:
Error: Cannot find module '/var/task/node_modules/sqlite3/lib/binding/node-v48-linux-x64/node_sqlite3.node'
at Function.Module._resolveFilename (module.js:469:15)
at Function.Module._load (module.js:417:25)
at Module.require (module.js:497:17)
at require (internal/module.js:20:19)
at Object.<anonymous> (/var/task/node_modules/sqlite3/lib/sqlite3.js:4:15)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3) code: 'MODULE_NOT_FOUND' }
AWS Lambda函数似乎尝试访问node-v48-linux-x64文件夹,该文件夹在我的npm安装中不存在,因为我使用Windows进行开发。
有人知道如何解决这个问题或如何获取node-v48-linux-x64文件夹的内容吗?
4条答案
按热度按时间kr98yfug1#
问题是您在Windows计算机上执行了
npm install
,然后将此node_modules
目录与Lambda函数一起上传。在Windows计算机上运行
npm install
基本上构建了sqlite
包,其中包含Windows绑定,而不是AWS Lambda使用的Linux绑定。解决方案是在Linux机器上执行
npm install
,然后将这个node_modules
目录(在Linux上创建)与Lambda函数一起上传。要做到这一点,你可以
vagrant
等),并在那里执行npm install
。docker
。sqlite
包(https://www.npmjs.com/package/node-sqlite-purejs)vfhzx4xs2#
安装sqlite3的跨平台版本可以解决此问题。首先在项目中安装sqlite3:
然后全局安装node-pre-gyp:
并使用node-pre-gyp安装用于Linux的sqlite3
shstlldc3#
为了使本地构建能够在AWS lambda、architecture、platform和libc上工作,这三个参数应该在两台机器上匹配,特别是当您使用sqlite这样的包(或依赖项)时,sqlite使用预构建的二进制文件。
要在安装过程中为目标计算机指定arch、platform和libc,请使用以下命令。
对于国家预防机制
用于Yarn
或者在使用之前导出它们
7bsow1i64#
你可以很容易地生成一个lambda层并附加到你的lambda函数上。尝试https://nodelayer.xyz来生成一个lambda层并附加到你的函数上。这些层运行在Amazon Linux 2 docker映像上,这也是lambda运行时所使用的。