来自应用程序的具有Mongo连接的Amazon DocumentDB集群失败

时间:2019-02-22 14:55:08

标签: mongodb amazon-web-services aws-documentdb-mongoapi

我正在尝试设置一个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 :(得分:0)

为了使您的PHP服务器能够访问DocumentDB,您的群集必须位于同一VPC中。如果您的服务器尝试从其他位置进行连接,则身份验证可能会失败。

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

AWS还不支持最新的MongoDB驱动程序,因为它们不支持最新的MongoDB API。

使用MongoDB Atlas可以避免这两个限制。您可以在几分钟内在AWS中部署MongoDB集群,而不会遇到相同的限制。

https://cloud.mongodb.com/

答案 1 :(得分:0)

尝试在连接字符串中添加“ ssl = true&”。请看下面:

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

答案 2 :(得分:0)

您可能想尝试使用集群指定数据库名称。就像是: mongodb://用户名:密码@ docdb-docdb-XXXX-XX-XX-XX-XX-XX-XX.cluster-cXXXXXXXXXX.eu-west-1.docdb.amazonaws.com:27017 / proddb ?ssl_ca_certs = rds-combined-ca-bundle.pem&replicaSet = rs0

答案 3 :(得分:0)

请参见以下示例。

此外,在您的连接字符串中,看起来好像还有一个“ 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);

?>

答案 4 :(得分:0)

如果您处于防火墙后面并维护了网络端口的白名单,则必须打开端口27017才能连接到MongoDB集群。