Amazon DocumentDB(兼容 MongoDB)是一种快速、可扩展、高度可用且完全托管的文档数据库服务,支持 MongoDB 工作负载,可让用户轻松存储、查询和索引 JSON 数据。
本文介绍如何通过 AWS Cloud9 开始使用 Amazon DocumentDB。您将了解如何通过 Mongo Shell 从 AWS Cloud9 环境连接到 Amazon DocumentDB 集群并运行一些查询。
架构图
实现过程
1.创建 AWS Cloud9 环境
使用 AWS 管理控制台,在 AWS Cloud9 管理控制台上选择创建环境。
输入名称 DocumentDBCloud9。
选择下一步。
在配置设置部分,接受所有默认设置。
选择下一步。
在审核部分,选择创建环境。
预置 AWS Cloud9 环境最多需要三分钟时间。
2.创建安全组
在 Amazon EC2 管理控制台的网络与安全下,选择安全组。
选择创建安全组。
对于安全组名称,输入demoDocDB。
对于描述,输入描述。
对于VPC,接受默认 VPC 的使用
在入站规则部分,选择添加规则.
对于类型,选择自定义 TCP 规则。
对于端口范围,输入 27017。
源安全组是您刚刚创建的 AWS Cloud9 环境的安全组。将源保留为默认值自定义,并在自定义旁边的字段中输入“cloud9”以查看可用安全组的列表。
选择包含名称 aws-cloud9-<环境名称> 的安全组
接受所有其他默认设置,然后选择创建安全组。您无需修改出站规则。
以下屏幕截图显示了您在此步骤中创建的安全组,以及在创建 AWS Cloud9 环境时创建的 AWS Cloud9 安全组。
3.创建 Amazon DocumentDB 集群
在Amazon DocumentDB 管理控制台的集群下,选择创建。
在创建 Amazon DocumentDB 集群页面上,在实例类下选择db.t3.medium,然后为实例数量选择1。这些选项有助于最大程度地降低成本。
将其他设置保留为默认设置。
在身份验证部分,输入用户名和密码。
打开显示高级设置。
在网络设置部分,对于 VPC 安全组,选择 demoDocDB。
选择创建集群。
Amazon DocumentDB 现在正在预置您的集群,这可能需要几分钟才能完成。当集群和实例状态都显示为“可用”时,您可以连接到该集群。当 Amazon DocumentDB 预置集群时,请完成剩余步骤以连接到 Amazon DocumentDB 集群。
4.安装 Mongo Shell
如果您的 AWS Cloud9 环境仍处于打开状态,则可以跳至步骤 3。
在AWS Cloud9 管理控制台的您的环境下,选择DocumentDBCloud9。
选择打开 IDE。
在命令提示符下,使用以下代码创建存储库文件:
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 Document DB 的 CA 证书。请参阅以下代码:
wget https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem
现在,您已准备好连接到 Amazon DocumentDB 集群。
5.连接到 Amazon DocumentDB 集群
在Amazon DocumentDB 管理控制台的集群下,找到您的集群。本博文使用集群 docdb-2020-02-08-14-15-11。
通过单击集群标识符来选择您创建的集群(在此示例中为 docdb-2020-02-08-14-15-11)。
复制“使用 Mongo Shell 连接到此集群”下提供的连接字符串。
省略 <insertYourPassword>,以便在连接时由 Mongo Shell 提示您输入密码。这样,您不必以明文形式输入密码。
您的连接字符串应类似于以下代码(请参见屏幕截图)
当您输入密码并看到 rs0:PRIMARY> 提示时,您已成功连接到AmazonDocumentDB 集群。
6.插入和查询数据
现在您已连接到集群,您可以运行一些查询来熟悉文档数据库的使用。
要插入单个文档,请输入以下代码:
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,
使用筛选条件查询单个文档。请参阅以下代码。
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 }
7.清理
完成演练后,请停止 Amazon DocumentDB 集群以降低成本或完全删除集群。
默认情况下,在处于非活动状态 30 分钟后,AWS Cloud9 环境将停止底层 EC2 实例,以帮助节省成本。