ошибка подключения при подключении к AWS DocumentDB - PullRequest
0 голосов
/ 28 января 2019

получение следующей ошибки при подключении к AWS DocumentDB из node.js

ошибка подключения: {[MongoNetworkError: подключение 1 к docdb-2019-01-28-06-57-37.cluster-cqy6h2ypc0dj.us-east-1.docdb.amazonaws.com:27017 timed out] name: 'MongoNetworkError', errorLabels: ['TransientTransactionError']}

вот мой файл 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 ]

0 голосов
/ 28 января 2019

По умолчанию aws documentdb предназначен для подключения только из одного VPC.Так что подключить приложение nodejs из ec2 в тот же vpc.Вам нужно иметь файл pem, так как по умолчанию SSL включен при создании экземпляра базы данных.

step-1: $ wget https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem в требуемом каталоге

step-2: Измените соединение mongoose спараметры, указывающие на файл pem

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, и он работал нормально.

Обновление =====:>

Чтобы подключиться из Robo 3T вне VPC, перейдите по ссылке - AWS DocumentDB с Robo 3T (Robomongo)

0 голосов
/ 28 января 2019

следующий помощник запускает функцию и повторяет ее, если встречается «TransientTransactionError»:

для node.js с mongoDB ##

для получения дополнительной информации посетите: https://docs.mongodb.com/manual/core/transactions/#retry-transaction

async function runTransactionWithRetry(txnFunc, client, session) {
  try {
    await txnFunc(client, session);
  } catch (error) {
    console.log('Transaction aborted. Caught exception during transaction.');

    // If transient error, retry the whole transaction
    if (error.errorLabels && error.errorLabels.indexOf('TransientTransactionError') >= 0) {
      console.log('TransientTransactionError, retrying transaction ...');
      await runTransactionWithRetry(txnFunc, client, session);
    } else {
      throw error;
    }
  }
}

И сначала проверьте свои сетевые подключения, так как это приоритет.Сетевая ошибка в основном означает «я ничего не могу найти там».Обычно потому, что он недоступен с того места, откуда вы пытаетесь связаться с ним.
И убедитесь, что ваше соединение с БД включено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...