Кластер Amazon DocumentDB с ошибкой подключения к приложению Mongo - PullRequest
0 голосов
/ 22 февраля 2019

Я пытаюсь настроить экземпляр Amazon EB для работы с DocumentDB.Когда я пытаюсь подключиться к терминалу Amazon Linux, соединение работает нормально.Но когда я пытаюсь соединиться с PHP, он возвращает ошибку, показанную ниже

"Не найдено подходящих серверов (serverSelectionTryOnceset): [время ожидания сокета вызывает ismaster на 'docdb-XXXX-XX-XX-XX-XX-XX.cluster-cXXXXXXXXXX.eu-west-1.docdb.amazonaws.com:27017']"

Я обнаружил неполадки с терминалом и получил сообщение "успешно!"которые снова указывают на успешное соединение.

nc -zv docdb-docdb-XXXX-XX-XX-XX-XX-XX.cluster-cXXXXXXXXXX.eu-west-1.docdb.amazonaws.com 27017

Кто-нибудь знает, что может быть не так?

Вот мой код для подключения к DocumentDB

$conn = new MongoClient("mongodb://username:password@docdb-docdb-XXXX-XX-XX-XX-XX-XX.cluster-cXXXXXXXXXX.eu-west-1.docdb.amazonaws.com:27017/?ssl_ca_certs=rds-combined-ca-bundle.pem&replicaSet=rs0");

Ответы [ 5 ]

0 голосов
/ 21 июня 2019

Если вы находитесь за брандмауэром и поддерживает белый список для сетевых портов, то вам необходимо открыть порт 27017 для подключения к кластеру MongoDB.

0 голосов
/ 20 марта 2019

Пожалуйста, посмотрите следующий пример.

Кроме того, в вашей строке подключения, похоже, у вас есть дополнительный "docdb-", то есть, "docdb-docdb-XXXX-XX-XX-XX-XX-XX.cluster ... "

<?php
require 'vendor/autoload.php'; // include Composer's autoloader

$SSL_DIR = "/home/ubuntu";
$SSL_FILE = "rds-combined-ca-bundle.pem";

$ctx = stream_context_create(array(
    "ssl" => array( 
        "cafile" => $SSL_DIR . "/" . $SSL_FILE,
    ))
);

$client = new MongoDB\Client("mongodb://<yourUserName>:<yourPassword>@docdb-2019-01-29-02-53-18.cluster-ccuszbx3pn5e.us-east-1.docdb.amazonaws.com:27017", array("ssl" => true), array("context" => $ctx));

$col = $client->test->col;

$result = $col->insertOne( [ 'hello' => 'Amazon DocumentDB'] );

$result = $col->findOne(array('hello' => 'Amazon DocumentDB'));

print_r($result);

?>
0 голосов
/ 24 февраля 2019

Попробуйте добавить «ssl = true &» в строку подключения.Пожалуйста, смотрите ниже:

$ conn = новый MongoClient ("mongodb: // имя пользователя: password@docdb-docdb-XXXX-XX-XX-XX-XX-XX.cluster-cXXXXXXXXXX.eu-west-1.docdb.amazonaws.com: 27017 / SSL = истинные & ssl_ca_certs = РДС-комбинированный-ча-bundle.pem & replicaSet = RS0" );

0 голосов
/ 01 марта 2019

Возможно, вы захотите указать имя базы данных в кластере.Что-то вроде:1002 *? ssl_ca_certs = РДС-комбинированный-ча-bundle.pem & replicaSet = RS0

0 голосов
/ 23 февраля 2019

Чтобы ваш PHP-сервер мог обращаться к DocumentDB, ваш кластер должен быть в том же VPC.Если ваш сервер пытается подключиться из другого места, ваша аутентификация может быть неудачной.

https://docs.aws.amazon.com/documentdb/latest/developerguide/troubleshooting.html#troubleshooting.cannot-connect.public-endpoints

Также AWS не поддерживает последние драйверы MongoDB, поскольку они не могут поддерживать последнюю версию MongoDBAPI.

Вы можете обойти оба ограничения, используя MongoDB Atlas.Вы можете развернуть кластер MongoDB в AWS за считанные минуты, и вы не столкнетесь с такими же ограничениями.

https://cloud.mongodb.com/

...