Кластер Amazon DocumentDB с ошибкой подключения к приложению Mongo
Я пытаюсь настроить экземпляр 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");
3 ответа
Пожалуйста, смотрите следующий пример.
Кроме того, в вашей строке подключения, похоже, у вас есть дополнительный "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);
?>
Попробуйте добавить "ssl=true&" в строку подключения. Пожалуйста, смотрите ниже:
$ conn = new MongoClient ("mongodb: // имя пользователя:password@docdb-docdb-XXXX-XX-XX-XX-XX-XX.cluster-cXXXXXXXXXX.eu-west-1.docdb.amazonaws.com:27017/? = TRUE SSL & ssl_ca_certs = РДС-парогазового ча-bundle.pem & replicaSet = RS0");
Возможно, вы захотите попробовать указать имя базы данных с кластером. Примерно так: mongodb: // username: password@docdb-docdb-XXXX-XX-XX-XX-XX-XX.cluster-cXXXXXXXXXX.eu-west-1.docdb.amazonaws.com: 27017 /proddb? Ssl_ca_certs =rds -combined-ча-bundle.pem & replicaSet = RS0
Если вы находитесь за брандмауэром и поддерживает белый список для сетевых портов, то вам необходимо открыть порт 27017 для подключения к кластеру MongoDB.
Чтобы ваш PHP-сервер имел доступ к DocumentDB, ваш кластер должен быть в том же VPC. Если ваш сервер пытается подключиться из другого места, ваша аутентификация может быть неудачной.
https://docs.aws.amazon.com/documentdb/latest/developerguide/troubleshooting.html
Кроме того, AWS не поддерживает последние версии драйверов MongoDB, поскольку они не поддерживают последнюю версию API MongoDB.
Вы можете избежать обоих ограничений, используя MongoDB Atlas. Вы можете развернуть кластер MongoDB в AWS за считанные минуты, и вы не столкнетесь с такими же ограничениями.