连接AWS DocumentDB时出现连接错误。

5

连接AWS DocumentDB时,使用node.js出现以下错误:

连接错误:{ [MongoNetworkError: connection 1 to docdb-2019-01-28-06-57-37.cluster-cqy6h2ypc0dj.us-east-1.docdb.amazonaws.com:27017 超时] name: 'MongoNetworkError', errorLabels: [ 'TransientTransactionError' ] }

这是我的node.js文件:

app.js

var mongoose = require('mongoose');
mongoose.connect('mongodb://abhishek:abhishek@docdb-2019-01-28-06-57-37.cluster-cqy6h2ypc0dj.us-east-1.docdb.amazonaws.com:27017/?ssl_ca_certs=rds-combined-ca-bundle.pem&replicaSet=rs0', {
    useNewUrlParser: true
});
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
    console.log("connected...");
});
2个回答

20

默认情况下,aws documentdb仅设计为在同一VPC中连接。因此,要从同一vpc中的ec2连接nodejs应用程序,您需要具有pem文件,因为在创建db实例时默认启用SSL。

步骤1: 在所需目录中运行$wget https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem

步骤2: 使用指向pem文件的选项更改mongoose连接。

mongoose.connect(database.url, {
    useNewUrlParser: true,
    ssl: true,
    sslValidate: false,
    sslCA: fs.readFileSync('./rds-combined-ca-bundle.pem')})
.then(() => console.log('Connection to DB successful'))
.catch((err) => console.error(err,'Error'));

这里我使用的是mongoose 5.4.0。

如需从VPC外部连接,请尝试遵循AWS下面的文档: https://docs.aws.amazon.com/documentdb/latest/developerguide/connect-from-outside-a-vpc.html

个人只尝试过从VPC连接,效果很好。

更新 =====:>

要从VPC外部连接Robo 3T,请参考以下链接 - AWS DocumentDB with Robo 3T (Robomongo)


1
如何从 Lambda 连接它 - paradox
你能给一个禁用tls的例子吗? - Jimmy.B

0

如果您想在VPC之外使用AWS DocumentDB,例如从开发服务器EC2或本地机器访问,除非使用ssh隧道或端口转发,否则会出现连接错误。

关于隧道,它很简单

  1. 在本地使用以下命令

    ssh -i "ec2Access.pem" -L 27017:sample-cluster.node.us-east-1.docdb.amazonaws.com:27017 ubuntu@EC2-Host -N

  2. 在应用程序配置中使用

    { uri: 'mongodb://:@127.0.0.1:27017/Db', useNewUrlParser: true, useUnifiedTopology:true, directConnection: true }

只需确保您可以从此隧道EC2和数据库进行连接即可

如果您决定使用端口转发,请按以下步骤操作 0- 在EC2安全组中添加入站规则,使用自定义TCP和端口27017的所有流量 1- 转到您的EC2实例并安装Haproxy

$ sudo apt install haproxy

2- 编辑Haproxy配置

$ sudo nano haproxy.cfg

在文件末尾添加3-

listen mongo
bind 0.0.0.0:27017
timeout connect 10s
timeout client 1m
timeout server 1m
mode TCP
server AWSmongo <database-host-url>:27017

4- 现在重新启动 HaProxy

$ sudo service HaPoxy restart

5- 现在您可以使用以下方式访问您的数据库

{uri: 'mongodb://<database-user>:<database-pass>@<EC2-IP>:27017/<db>'}

目前你的回答不够清晰。请编辑并添加更多细节,以帮助其他人理解它如何回答所提出的问题。你可以在帮助中心找到有关如何撰写好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接