我正在尝试设置一个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");
答案 0 :(得分:0)
为了使您的PHP服务器能够访问DocumentDB,您的群集必须位于同一VPC中。如果您的服务器尝试从其他位置进行连接,则身份验证可能会失败。
AWS还不支持最新的MongoDB驱动程序,因为它们不支持最新的MongoDB API。
使用MongoDB Atlas可以避免这两个限制。您可以在几分钟内在AWS中部署MongoDB集群,而不会遇到相同的限制。
答案 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集群。