【问题标题】:connection error while connecting to AWS DocumentDB through lambda通过 lambda 连接到 AWS DocumentDB 时出现连接错误
【发布时间】:2020-02-28 18:07:16
【问题描述】:

从 node.js 通过 lambda 连接到 AWS DocumentDB 时出现以下错误

{"errorMessage":"ENOENT: 没有这样的文件或目录,打开 'rds-combined-ca-bundle.pem'","errorType":"Error","stackTrace":["Object.fs.openSync (fs.js:646:18)","Object.fs.readFileSync (fs.js:551:33)","对象。 (/var/task/base/mongoose.base.js:8:13)","Module._compile (module.js:652:30)","Object.Module._extensions..js (module.js:663:10)","Module.load (module.js:565:32)","tryModuleLoad (module.js:505:12)","Function.Module._load (module.js:497:3)","Module.require (module.js:596:17)","re​​quire (内部/module.js:11:18)","对象。 (/var/task/library/mongoLib/room.lib.js:1:84)","Module._compile (module.js:652:30)","Object.Module._extensions..js (module.js:663:10)","Module.load (module.js:565:32)","tryModuleLoad (module.js:505:12)","Function.Module._load (module.js:497:3)"]}

这是我在 lambda 中的节点 js 文件

var ca = fs.readFileSync(path.join('./','rds-combined-ca-bundle.pem'));

var options = {
        keepAlive: true,
        poolSize: 30,
        socketTimeoutMS: 30000,
        autoReconnect: true,
        reconnectTries: Number.MAX_VALUE,
        reconnectInterval: 500,
        useCreateIndex: true,
        auth: {authdb: 'admin'},
        useFindAndModify: false,
        sslValidate: true,
        sslCA:ca,
        useNewUrlParser: true
}

var uri = 'mongodb://'+globalData.getConfigurationSettings("documentdb_username")+':'+globalData.getConfigurationSettings("documentdb_password")+'@'+globalData.getConfigurationSettings("documentdb_server")+':'+globalData.getConfigurationSettings("documentdb_port")+'/'+globalData.getConfigurationSettings("documentdb_db_name")+'?ssl=true&replicaSet=rs0&readPreference=secondaryPreferred';

mongoose.connect(uri, options)
.then(() => console.log('Connection to DB successful'))
.catch((err) => console.error(err,'Error'));

【问题讨论】:

  • 转到 Lambda 控制台,在 Function code 中,再次检查 .pem 文件的路径
  • @hoangdv,我正在阅读它的同一个文件夹

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


【解决方案1】:

应该是:

var ca = fs.readFileSync(path.join(__dirname + '/rds-combined-ca-bundle.pem'));

或者你可以定义:

import caBundle from "./rds-combined-ca-bundle.pem";

var options = {
            ............
            sslCA:caBundle,

【讨论】:

  • 和上面的帖子一样
  • rds-combined-ca-bundle.pem 和您正在运行的文件在同一个文件夹中,对吧?你能在当前文件夹中分享ls -ls 吗?
  • 4 -rw-rw-r-- 1 ***** ***** 1094 年 2 月 27 日 19:01 mongoose.base.js 64 -rwxrwxrwx 1 ***** ** *** 65484 Feb 12 13:20 rds-combined-ca-bundle.pem ( mongoose.base.js -> 这是我需要 rds-combined-ca-bundle.pem 的文件)
【解决方案2】:

错误来自ENOENT: no such file or directory, open 'rds-combined-ca-bundle.pem

那里似乎不存在该文件。你能检查路径吗?您是否使用 lambda 嵌入了证书?

【讨论】:

  • 我已在同一文件夹中添加了 rds-combined-ca-bundle.pem 文件
猜你喜欢
  • 2019-06-21
  • 1970-01-01
  • 2019-11-08
  • 2021-02-14
  • 2019-10-07
  • 1970-01-01
  • 2017-12-08
  • 1970-01-01
  • 2022-01-06
相关资源
最近更新 更多