【发布时间】:2019-11-10 16:19:53
【问题描述】:
我想连接到托管在 aws lambda nodejs runtime 内的 RDS 中的 oracle 数据库。经过研究,我发现我需要下载 node-oracledb 包并为 node 模块和二进制 lib 文件创建一个层。所以我创建了如下所示的文件夹结构,并压缩文件夹并上传到 aws 层和附加层到 lambda,但是我得到 "errorMessage": "Cannot find module 'oracledb' 任何线索为什么 AWS 节点找不到模块?,谢谢
Lambda-Layer-1(version 1)
|
|__lib
| |__libaio.so.1
| |__libclntsh.so.12.1
| |__libclntschcore.so.12.1
| |__libipc1.so
| |__libmql1.so
| |__libnnz12.so
| |__libociicus.so
| |__libons.so
|
|__nodejs
|
|__node_modules
|
|__oracledb
来自 lambda 的错误:
"errorMessage": "Cannot find module 'oracledb'",
"errorType": "Error",
"stackTrace": [
"Module.require (module.js:596:17)",
"require (internal/module.js:11:18)",
"Object.<anonymous> (/var/task/src/services/oracleDb.service.js:10:18)",
"Module._compile (module.js:652:30)",
"Object.Module._extensions..js (module.js:663:10)",
"Module.load (module.js:565:32)",
AWS runtime:
Nodejs:8.10
node-oracledb:"3.1.2"
代码:
const oracledb = require("oracledb");
let connection;
static async init() {
try {
if (!connection) {
const connectionAtrribute = {
connectionString: 'uat-*******',
password: '*******',
user: '*******'
};
connection = await oracledb.getConnection(connectionAtrribute);
}
}
catch (error) {
console.log('ERROR', JSON.stringify(error));
}
}
【问题讨论】:
-
参考这个链接。它帮助我为我解决了这个问题。 medium.com/@jimmdd/…
-
rehanvdm.com/blog/an-unexpected-journey-with-lambda-oracledb 也很有用。简而言之,从oracle.com/database/technologies/instant-client/… 下载(linux zipped)轻客户端。解压到项目目录中的
lib目录。将libaio.so或libaio.so.1(从linux repo 下载)添加到lib目录。删除不需要的版本的 libcIntsh.so.x.1 和 libocci.so.x.1 文件(我认为 .jar 文件也可以使用)。有了这些文件,常规的oracledb模块就可以在 lambda 中工作。另外,对于空间,请记住 aws-sdk 包含在 lambda env 中。
标签: amazon-web-services aws-lambda node-oracledb