在AWS Lambda上运行SQLite3

时间:2017-11-28 17:15:45

标签: node.js sqlite amazon-web-services npm aws-lambda

我正在尝试连接到我的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函数试图访问我的npm安装中不存在的node-v48-linux-x64文件夹,因为我使用Windows进行开发。

任何人都知道如何解决此问题或如何获取node-v48-linux-x64文件夹的内容?

2 个答案:

答案 0 :(得分:1)

问题是您在Windows计算机上执行了npm install,然后将此node_modules目录与Lambda函数一起上传。

在Windows计算机上运行npm install基本上构建了带有Windows绑定的sqlite包,而不是AWS Lambda使用的Linux。 Windows的绑定在Linux上不起作用。

解决方案是在Linux机器上执行npm install,然后将此node_modules目录(在Linux上创建)与Lambda函数一起上传。

要做到这一点,你可以,

答案 1 :(得分:0)

您可以通过安装sqlite3的跨平台版本来解决此问题。 首先在您的项目中安装sqlite3:

npm install sqlite3

然后在全局范围内安装node-pre-gyp:

npm install -g node-pre-gyp

然后使用node-pre-gyp为Linux安装sqlite3

node-pre-gyp install --directory=./node_modules/sqlite3 --target_platform=linux --target_arch=x64