【问题标题】:how to set up a layer for node-oracledb package in aws lambda environment?如何在 aws lambda 环境中为 node-oracledb 包设置层?
【发布时间】: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));
        }
    }

【问题讨论】:

标签: amazon-web-services aws-lambda node-oracledb


【解决方案1】:

还有另一个库“oracledb_for_lambda”可以从 lambda 连接 oracle DB

npm i oracledb-for-lambda

现在,在项目文件夹中,创建一个名为“nodejs”的文件夹,您需要将“node_modules”文件夹移动到这个“nodejs强>”文件夹。然后,复制“/node_modules/oracledb-for-lambda”中的“lib”文件夹,并将其粘贴到主项目目录之外。

最后,您将获得如下图所示的文件夹结构。

就是这样,压缩文件夹内的文件并将压缩文件上传到 S3

您可以使用以下代码进行连接

'use strict';
var os = require('os');
var fs = require('fs');
var oracledb = require('oracledb-for-lambda');
exports.handler = async (event, context) => {
    let str_host = os.hostname() + ' localhost\n';
    fs.writeFileSync(process.env.HOSTALIASES, str_host, function(err) {
        if (err) throw err;
    });
    var connAttr = {
        user: process.env.USERNAME,
        password: process.env.PASSWORD,
        connectString: process.env.CONNECTION_STRING
    };

    const promise = new Promise(function(resolve, reject) {
        oracledb.getConnection(connAttr, function(err, connection) {
            if (err) {
                reject({
                    status: "ERROR"
                });
            }
            resolve({
                status: "SUCCESS"
            });
        });
    });
    return promise;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-31
    • 2022-08-19
    • 2016-10-27
    • 2020-07-15
    相关资源
    最近更新 更多