【问题标题】:Connecting mongoose to AWS documentDB将猫鼬连接到 AWS documentDB
【发布时间】:2022-12-12 07:52:21
【问题描述】:

我正在尝试将 NodeJS 服务器连接到启用了 TLS 的 AWS documentDB 集群。 NodeJS 服务器托管在 EC2 实例上,并且与 documentDB 集群位于同一 VPC 上。但我收到以下错误:

{ MongoServerSelectionError: unable to get local issuer certificate
     at Timeout.waitQueueMember.timer.setTimeout [as _onTimeout] (/home/ubuntu/server/node_modules/mongodb/lib/core/sdam/topology.js:438:30)
     at ontimeout (timers.js:436:11)
     at tryOnTimeout (timers.js:300:5)
     at listOnTimeout (timers.js:263:5)
     at Timer.processTimers (timers.js:223:10)
   name: 'MongoServerSelectionError',
   reason:
    TopologyDescription {
      type: 'ReplicaSetNoPrimary',
      setName: null,
      maxSetVersion: null,
      maxElectionId: null,
      servers:
       Map {
         '*******.cluster-****.us-east-1.docdb.amazonaws.com:27017' => [ServerDescription] },
      stale: false,
      compatible: true,
      compatibilityError: null,
      logicalSessionTimeoutMinutes: null,
      heartbeatFrequencyMS: 10000,
      localThresholdMS: 15,
      commonWireVersion: null } }

错误似乎与 TLS 证书有关。但是我在连接时传递了 rds-combined-ca-bundle.pem 的内容,如下面的代码所示:

uri = process.env.MONGODB_URI || process.env.Db_url;
options = {
    user: "****",
    pass: "****",
}
mongoose.set("useCreateIndex", true);
mongoose.connect(
  uri,
  {
    useNewUrlParser: true,
    useFindAndModify: false,
    useUnifiedTopology: true,
    sslCA: [fs.readFileSync("/home/ubuntu/rds-combined-ca-bundle.pem")],
  },
  err => {
    if (err) {
      console.log('Connection Error: ', err);
    } else {
      console.log(`Successfully Connected============`);
    }
  }
);     

我尝试使用 EC2 实例上的 mongo shell 连接到 mongo 集群

mongo --ssl --host *******.cluster-****.us-east-1.docdb.amazonaws.com:27017 \
--sslCAFile rds-combined-ca-bundle.pem --username ***** --password *****

这是有效的。因此,与集群的连接很好,但猫鼬无法连接。

还有其他方法可以使用猫鼬连接到 documentDB 吗?

【问题讨论】:

    标签: node.js mongodb ssl mongoose aws-documentdb


    【解决方案1】:

    您可以添加 ssl: true 吗?这样的事情对我有用:

    const mongoose = require('mongoose');
    
    main().catch(err => console.log(err));
    
    async function main() {
      await mongoose.connect('mongodb://user:password@docdb_uri',
          {
              useNewUrlParser: true,
              ssl: true,
              sslValidate: true,
              sslCA: `/usr/local/rds-combined-ca-bundle.pem`
          })
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-21
      • 2019-11-08
      • 2016-04-13
      相关资源
      最近更新 更多