如何解决连接到我的 Amazon DocumentDB 集群的问题?

上次更新时间:2020 年 1 月 24 日

我无法连接到 Amazon DocumentDB(兼容 MongoDB)集群。为什么我无法连接以及我该如何解决连接问题?

简短描述

Amazon DocumentDB 是一项仅限 VPC 的服务,不支持公共终端节点。因此,您无法通过 AWS 之外的环境直接连接到 Amazon DocumentDB 集群。您可以使用以下方法连接到 Amazon DocumentDB:

  1. 通过 Amazon Elastic Compute Cloud (Amazon EC2) 实例或位于相同 Amazon Virtual Private Cloud (Amazon VPC) 中的其他 AWS 服务(如 AWS Lambda 或 Amazon SageMaker)连接。
  2. 使用 VPC 对等功能通过位于不同 VPC 中的 EC2 实例连接。
  3. 使用 SSJ 隧道通过 AWS 外的机器连接。

解决方案

通过位于相同 VPC 中的 EC2 实例连接

1.    在您可以从源机器通过 SSH 连接的相同 VPC 中创建 EC2 实例

2.    确认 Amazon DocumentDB 集群的安全组拥有允许通过 EC2 实例连接的规则。默认情况下,Amazon DocumentDB 集群的安全组必须允许在端口 27017 上进行入站连接。

3.    使用 SSH 连接到您的 EC2 实例。请参阅以下 Linux 实例示例:

ssh -i "keypairfile.pem" ec2-user@<EC2 DNS endpoint>

4.    在 EC2 实例上安装 mongo shell(如尚未安装)。

5.    连接到群集:

mongo --ssl --host <Cluster endpoint> :27017 --sslCAFile rds-combined-ca-bundle.pem --username <username> --password >password>

MongoDB shell 版本:3.2.11

connecting to: <Cluster>:27017/<user>
rs0:PRIMARY> 

通过位于不同 VPC 中的 EC2 实例连接

1.    通过在 Amazon DocumentDB 集群之外的 VPC 中运行的 EC2 实例创建 VPC 对等连接

2.    在对等连接成功之前,请按照先前在通过位于相同 VPC 中的 EC2 实例连接下列出的步骤进行操作。

使用 SSH 隧道通过 AWS 的机器连接

1.    设置从本地计算机至运行于与 Amazon DocumentDB 集群位于相同 VPC 中的 EC2 实例的 SSH 隧道。有关更多信息,请参阅从 Amazon VPC 外部连接到 Amazon DocumentDB 集群

ssh -i "keypairfile.pem" -L 27017:<cluster endpoint>:27017 ec2-user@<EC2 tunnel endpoint> -N

这允许您直接向本地主机运行命令 (27017),并且命令随后将会发送至 Amazon DocumentDB 集群。但是,作为最佳实践,在生产环境中或者如果您将 Amazon DocumentDB 集群用作连接的副本集,则请避免使用此方法。有关更多信息,请参阅以副本集方法连接到 Amazon DocumentDB

故障排除

如果使用其中一种方法时仍遇到了连接问题,请检查以下内容:

  1. Amazon DocumentDB 集群至少拥有一个实例,并且集群中的实例处于可用状态。如果实例不是处于可用状态,则它们无法接收连接。
  2. 用于连接到实例的源将被列作授权访问网络访问控制列表 (ACL)、本地防火墙和安全组规则中的集群的源。
  3. 正确的 DNS 名称或终端节点用于连接到 Amazon DocumentDB 集群。有关解决 DNS 和连接问题的信息,请参阅无法连接到 Amazon DocumentDB 终端节点
  4. 连接到集群时,请输入正确的用户名和密码。如果忘记密码,则您可以通过修改 Amazon DocumentDB 集群重置密码。
  5. 通过客户端或应用程序连接时,将会传递 SSL 证书。默认情况下,Amazon DocumentDB 集群已启用 TLS 配置。要禁用 TLS 配置,请创建新的自定义 Amazon DocumentDB 集群参数组,将 tls 参数设为禁用,然后修改集群以使用新的集群参数组。有关更多信息,请参阅管理 Amazon DocumentDB 集群参数组

这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?