亚马逊AWS官方博客

Amazon DocumentDB 入门(兼容 MongoDB);第 1 部分 – 使用 Amazon EC2

Original URL: https://aws.amazon.com/blogs/database/part-1-getting-started-with-amazon-documentdb-using-amazon-ec2/

Amazon DocumentDB(兼容 MongoDB)是一款快速、可扩展、高度可用且完全托管的文档数据库服务,它支持 MongoDB 工作负载。在 Amazon DocumentDB 上,您可以使用相同的 MongoDB 3.6 应用程序代码、驱动程序和工具来运行、管理和扩展工作负载,无需关心管理底层基础设施。作为文档数据库,Amazon DocumentDB 可轻松存储、查询和索引 JSON 数据。

在本系列的第 1 部分中,本文将展示如何开始使用 Amazon DocumentDB。为此,您需要在默认 Amazon VPC 中创建一个 Amazon EC2 实例。有关创建默认 VPC 的说明,请参阅 Amazon VPC 入门。您还可以在同一默认 VPC 中,预置一个单实例 Amazon DocumentDB 集群。本文演示了如何从本地计算机 SSH 连接到 EC2 实例,以及如何使用 mongo shell 从 EC2 实例连接到集群。最后,您将学习如何对 Amazon DocumentDB 集群运行查询。完成此演练的成本不到 0.30 USD。 创建 AWS 资源时,建议您遵循AWS IAM 最佳实践

下图显示了本演练的最终架构。

对于本演练,请使用给定区域中的默认 VPC。有关更多信息,请参阅创建 Virtual Private Cloud (VPC)。

创建两个安全组

第一步是在默认 VPC 中创建两个新的安全组。第一个安全组 (demoEC2) 允许您从本地计算机(客户端)通过 SSH 进入 EC2 实例。第二个安全组 (demoDocDB) 使您可以从EC2 实例通过端口27017(Amazon DocumentDB 的默认端口)连接到 Amazon DocumentDB 集群。请完成以下步骤:

  • 在 Amazon EC2 控制台上,选择网络和安全性。
  • 选择安全组。
  • 选择创建安全组。 该页面提示您提供安全组名称和描述。
  • 对于第一个安全组,对于安全组名称,输入demoEC2。
  • 另外,还可以输入描述。
  • 选择添加规则。
  • 对于类型,选择SSH。端口范围将自动默认为 22。
  • 对于源,选择我的 IP。 您只能从当前 IP 地址访问 demoEC2 安全组。如果您的 IP 地址更改,则必须更新安全组。
  • 选择创建。 接下来,为您的 Amazon DocumentDB 集群创建第二个安全组,称为demoDocDB。
  • 重复前面的步骤,执行以下更改:
    • 对于类型,选择自定义 TCP。
    • 对于端口范围,输入 27017。
    • 对于源,选择demoEC2。您可能需要刷新浏览器,以使 Amazon EC2 控制台自动填充 demoEC2 源名称。
  • 选择创建。

创建一个 EC2 实例

下一步,在用于预置 Amazon DocumentDB 集群的同一区域和 VPC 中创建 EC2 实例。在默认 VCP 中创建 Amazon DocumentDB 集群。由于 Amazon DocumentDB 是仅针对 VPC 的服务,因此本文章演示了如何通过 SSH 进入 EC2 实例,以及如何使用 EC2 实例连接 Amazon DocumentDB 集群。请完成以下步骤:

  • 在 Amazon EC2 控制台上,选择启动实例。
  • 找到Amazon Linux 2 AMI,然后选择选择。
  • 选择t2.micro 实例类型。
  • 选择查看和启动。
  • 在步骤 7:查看实例启动页面上,查看最终配置。 您还必须指定要使用刚创建的demoEC2 安全组。
  • 选择编辑安全组。
  • 选择选择现有安全组。
  • 选择您的demoEC2组。
  • 选择查看和启动。 如果选择了demoEC2 安全组,则会在此部分的底部看到添加的规则。请参见以下屏幕截图。
  • 验证信息,然后选择启动。
  • 在选择现有密钥对或创建新密钥对部分上,您必须提供一个 Amazon EC2 密钥对。 如果您没有 EC2 密钥对,请选择创建新密钥对,然后按照说明进行操作。您必须下载一个私钥文件(.pem 文件)。稍后在登录 EC2 实例时需要此文件。 。 如果您有 EC2 密钥对,请在选择密钥对下,从列表中选择您的密钥对。您必须已拥有可登录到 EC2 实例的私钥文件(.pem 文件)。
  • 选择启动实例。

创建一个 Amazon DocumentDB 集群

在预置 EC2 实例时,启动 Amazon DocumentDB 集群。请完成以下步骤:

  • 在 Amazon DocumentDB 控制台上的集群下,选择创建。
  • 在创建 Amazon DocumentDB集群页面上,为实例数选择1。
    这有助于最大程度地降低成本。
  • 将其他设置保留为默认设置。
  • 在身份验证部分中,输入用户名和密码。
    您可以在稍后的步骤中,使用该用户名和密码对集群进行身份验证。
  • 打开显示高级设置。
  • 在网络设置部分中,对于VPC 安全组,选择 demoDocDB。
  • 选择创建集群。 Amazon DocumentDB 现正在预置您的集群,完成此操作可能需要几分钟。当集群和实例状态均显示为可用时,可以连接到集群。当 Amazon DocumentDB 设置集群时,请完成剩余步骤,以连接到 Amazon DocumentDB 集群。

连接到 EC2 实例

要安装 mongo shell,您必须首先连接到 EC2 实例。安装 mongo Shell 后,您可以连接并查询 Amazon DocumentDB 集群。请完成以下步骤:

  • 在 Amazon EC2 控制台上,选择创建的实例。 如果实例状态为运行,现在可以连接实例并安装 mongo shell。
  • 选择连接。 连接方法有三个选项:
    • 独立 SSH 客户端
    • Session Manager
    • EC2 实例连接(基于浏览器的SSH 连接)

本文涵盖了 EC2 实例连接和独立 SSH 客户端。EC2 实例连接是最快、通常也是最直接的选择,因为您可以通过单击基于浏览器的 SSH 连接按钮连接到 EC2 实例。如果要使用本地计算机上的 Terminal 或 PuTTY 等 SSH 客户端连接到集群,则独立 SSH 客户端是一个不错的选择。

如果您在开始本演练后更改了 IP 地址,或者稍后又回到您的操作环境,则必须更新 demoEC2 安全组入站规则,才能启用来自新 API 地址的入站流量。

EC2 实例连接

要使用基于浏览器的 SSH 连接连接到 EC2 实例,请完成以下步骤:

  • 在连接到您的实例部分的连接方法中,选择EC2 实例连接(基于浏览器的 SSH 连接)。用户名将默认为“ec2-user”。
  • 选择连接。
    系统将打开一个命令行提示符,您可以通过它运行命令。请参见以下屏幕截图。 继续执行安装 mongo shell的步骤。

独立 SSH 客户端

要连接到独立 SSH 客户端的默认连接方法,请完成以下步骤:

  • 在连接到您的实例部分的连接方法中,选择独立 SSH 客户端。
  • 选择连接。
  • 在连接到您的实例部分中,复制示例连接字符串。 如果您使用 macOS 作为本地计算机,请打开终端,并使用示例连接字符串连接到您的 EC2 实例。此步骤根据您的本地计算机使用方式而有所不同。有关更多信息,请参见使用 SSH 连接到您的 Linux 实例。选择连接时,必须确保下载的或较早选择的 .pem 文件具有正确的权限。对于本演练,将 .pem 文件命名为pem。以下屏幕截图显示了 EC2 实例的 .pem 以及如何在 EC2 实例上设置正确的权限。 首次连接到 EC2 实例时,必须验证主机的真实性。
  • 如果一切正确,请输入yes。 现在您应该已连接到与 Amazon DocumentDB 集群位于同一区域和 VPC 中的 EC2 实例。请参见以下屏幕截图。 继续进行下一步。

安装 mongo shell

现在您可以安装 mongo shell,这是一个命令行实用工具,可用于连接和查询 Amazon DocumentDB 集群。

要在 Amazon Linux 上安装 mongo shell,请完成以下步骤。

  • 创建存储库文件。在 EC2 实例的命令行上,执行以下命令:
echo -e "[mongodb-org-3.6] \nname=MongoDB Repository\nbaseurl=https://repo.mongodb.org/yum/amazon/2013.03/mongodb-org/3.6/x86_64/\ngpgcheck=1 \nenabled=1 \ngpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc" | sudo tee /etc/yum.repos.d/mongodb-org-3.6.repo 

完成后,通过执行以下命令安装mongo shell:

sudo yum install -y mongodb-org-shell

所有新的 Amazon DocumentDB 集群默认启用传输层安全性 (TLS)。有关更多信息,请参阅管理Amazon DocumentDB 集群 TLS设置

wget https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem

现在您可以连接到 Amazon DocumentDB 集群。

连接到您的 Amazon DocumentDB 集群

  • 在 Amazon Document DB 控制台上的集群下,找到您的集群。 本文使用集群docdb-2020-02-08-14-15-11。
  • 选择您创建的集群。
  • 复制提供的连接字符串。 省略<insertYourPassword>,以便在连接时由 mongo shell 提示您输入密码。这样就不必以明文形式输入密码。 您的连接字符串应类似于以下代码:
mongo --ssl host docdb-2020-02-08-14-15-11.&lt;cluster&gt;.&lt;region&gt;.docdb.amazonaws.com:27107 --sslCAFile rds-combined-ca-bundle.pem --username demoUser --password

如果输入密码后看到 rs0:PRIMARY>提示,说明您已成功连接到 Amazon DocumentDB 集群。有关故障排除的信息,请参见Amazon DocumentDB 故障排除

插入和查询数据

现在,您已连接到集群,您可以运行一些查询以熟悉文档数据库的使用。

要插入单个文档,请输入以下代码:

db.collection.insert({"hello":"DocumentDB"})

您将获得以下输出:

WriteResult({ "nInserted" : 1 })

您可以阅读用 findOne() 命令编写的文档(因为它只返回一个文档)。请参见以下代码:

db.collection.findOne()

您将获得以下输出:

{ "_id" : ObjectId("5e401fe56056fda7321fbd67"), "hello" : "DocumentDB" }

要执行更多查询,请考虑游戏配置文件用例。首先,将一些条目插入到名为配置文件的集合中。请参见以下代码:

db.profiles.insertMany([
{ "_id" : 1, "name" : "Tim", "status": "active", "level": 12, "score":202},
{ "_id" : 2, "name" : "Justin", "status": "inactive", "level": 2, "score":9},
{ "_id" : 3, "name" : "Beth", "status": "active", "level": 7, "score":87},
{ "_id" : 4, "name" : "Jesse", "status": "active", "level": 3, "score":27}
])

您将获得以下输出:

{ "acknowledged" : true, "insertedIds" : [ 1, 2, 3, 4 ] }

使用 find() 命令返回个配置文件集合中的所有文档。请参见以下代码:

db.profiles.find()

您将获得以下输出:

{ "_id" : 1, "name" : "Tim", "status" : "active", "level" : 12, "score" : 202 }
{ "_id" : 2, "name" : "Justin", "status" : "inactive", "level" : 2, "score" : 9 }
{ "_id" : 3, "name" : "Beth", "status" : "active", "level" : 7, "score" : 87 }
{ "_id" : 4, "name" : "Jesse", "status" : "active", "level" : 3, "score" : 27 }

使用筛选器对单个文档进行查询。请参见以下代码:

db.profiles.find({name: "Jesse"})

您将获得以下输出:

{ "_id" : 4, "name" : "Jesse", "status" : "active", "level" : 3, "score" : 27 } 

游戏中的一个常见用例是查找给定用户的配置文件,并在该用户的配置文件中增加某个值。在此场景中,您希望为最活跃的游戏玩家提升技能属性。如果玩家填写了一份调查问卷,则您会把他们的得分提高 10 分。为此,请使用 findAndModify 命令。在此用例中,用户 Tim 收到并完成了调查。要给 Tim 奖励积分,请输入以下代码:

db.profiles.findAndModify({
    query: { name: "Tim", status: "active"},
    update: { $inc: { score: 10 } }
})

您将获得以下输出:

{
	"_id" : 1,
	"name" : "Tim",
	"status" : "active",
	"level" : 12,
	"score" : 202
}

您可以使用以下查询来验证结果:

db.profiles.find({name: "Tim"})

您将获得以下输出:

{ "_id" : 1, "name" : "Tim", "status" : "active", "level" : 12, "score" : 212 }

现在,您可以继续插入和查询数据。

清理

完成演练后,您可以停用 Amazon DocumentDB 集群,和停用 EC2 实例以降低成本,或者删除资源。有关更多信息,请参阅删除 Amazon DocumentDB 集群终止实例

小结

本文向您展示了 Amazon DocumentDB 的入门操作,包括创建 EC2 实例、安装 mongo shell、创建 Amazon DocumentDB 集群、连接到集群以及通过执行一些查询在 Amazon DocumentDB 内部轻松插入和查询 JSON 文档。有关更多信息,请参阅 Amazon DocumentDB 的提升(兼容 MongoDB)。有关最新发布和博文的更多信息,请参阅 Amazon DocumentDB(兼容 MongoDB)资源。本系列的下一篇博文展示使用 AWS Cloud9 的 Amazon DocumentDB 入门操作

 

本篇作者

Randy DeFauw

是 Amazon Web Services 的一名主要解决方案架构师。 他与 AWS 客户一起工作,提供有关数据库项目的指导和技术协助,帮助客户在使用 AWS 时提高其解决方案的价值。