MongoDB as a Service:MongoDB Atlasを試してみた

2016.11.23

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、菊池です。久しぶりのMongoDBネタです。

MongoDB Atlas

MongoDB Atlasは、MongoDBの開発元であるMongoDB, Inc. が公式に提供しているMongoDBのマネージドサービスです。

コンソール画面からMongoDBを簡単にデプロイ可能で、時間あたりの従量課金でMongoDBを利用することできます。また、インフラにはAWSが使われています。

atlas-001

使ってみた

早速使ってみました。

まずはSign Upします。メールアドレスなどのアカウントに必要な情報を入力します。

atlas-002

Atlas Groupというグループの名前を入れます。

atlas-003

サインアップできたら、ログインしてみます。クラスタを作るため、BUILD A NEW CLUSTERを選択します。

atlas-004

作成するクラスタのスペックを選択します。必要なのは以下の項目です。

  • リージョン
  • インスタンスサイズ/ストレージ容量
  • レプリケーションノード数
  • シャーディングの有無
  • バックアップの有無
  • Adminユーザ名/パスワード

リージョンはAWSのリージョンそのままですw。今回はオレゴンを選択しました。

atlas-005

インスタンスは最小のものを選びました。2GBメモリ、10GBストレージです。

atlas-006

レプリカ数は3/5/7から選択します。とりあえず最小の3ノードを選択。シャード/バックアップもなしにしました。

atlas-007

Adminのユーザ名、パスワードを入力します。

atlas-008

初回のクラスタ作成時のみ、支払い情報の入力が必要です。(2回目以降は省略)請求先とクレジットカード情報を入力します。

atlas-009

DEPLOYをすると、クラスタが作成中となります。

atlas-010

数分でクラスタが起動しました。DBに接続するため、CONNECTを選択。

atlas-011

すると、接続を許可するIPを追加できます。また、アプリケーションやmongoshellで接続する際のエンドポイントが表示されます。

atlas-012

デプロイしたDBに接続してみます。

同じリージョンであるオレゴンに起動したEC2からmongoshellで接続。あらかじめ、EC2のPublic IPを接続許可しておきましょう。

$ mongo "mongodb://cluster0-shard-00-00-b1mko.mongodb.net:27017,cluster0-shard-00-01-b1mko.mongodb.net:27017,cluster0-shard-00-02-b1mko.mongodb.net:27017/admin?replicaSet=Cluster0-shard-0" --ssl --username master --password
MongoDB shell version: 3.2.11
Enter password: 
connecting to: mongodb://cluster0-shard-00-00-b1mko.mongodb.net:27017,cluster0-shard-00-01-b1mko.mongodb.net:27017,cluster0-shard-00-02-b1mko.mongodb.net:27017/admin?replicaSet=Cluster0-shard-0
2016-11-23T04:39:25.135+0000 I NETWORK  [thread1] Starting new replica set monitor for Cluster0-shard-0/cluster0-shard-00-00-b1mko.mongodb.net:27017,cluster0-shard-00-01-b1mko.mongodb.net:27017,cluster0-shard-00-02-b1mko.mongodb.net:27017
2016-11-23T04:39:25.135+0000 I NETWORK  [ReplicaSetMonitorWatcher] starting
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
	http://docs.mongodb.org/
Questions? Try the support group
	http://groups.google.com/group/mongodb-user
Cluster0-shard-0:PRIMARY> 

接続できました!バージョンとストレージエンジンを確認してみます。

Cluster0-shard-0:PRIMARY> db.version()
3.2.11
Cluster0-shard-0:PRIMARY> db.serverStatus().storageEngine
{
	"name" : "wiredTiger",
	"supportsCommittedReads" : true,
	"persistent" : true
}
Cluster0-shard-0:PRIMARY> 

現時点で最新のVer.3.2.11、ストレージエンジンはWiredTigerです。

レプリカセットの状態も確認。

Cluster0-shard-0:PRIMARY> rs.status()
{
	"set" : "Cluster0-shard-0",
	"date" : ISODate("2016-11-23T05:10:49.076Z"),
	"myState" : 1,
	"term" : NumberLong(1),
	"heartbeatIntervalMillis" : NumberLong(2000),
	"members" : [
		{
			"_id" : 0,
			"name" : "cluster0-shard-00-00-b1mko.mongodb.net:27017",
			"health" : 1,
			"state" : 1,
			"stateStr" : "PRIMARY",
			"uptime" : 3607,
			"optime" : {
				"ts" : Timestamp(1479874265, 5),
				"t" : NumberLong(1)
			},
			"optimeDate" : ISODate("2016-11-23T04:11:05Z"),
			"electionTime" : Timestamp(1479874262, 1),
			"electionDate" : ISODate("2016-11-23T04:11:02Z"),
			"configVersion" : 1,
			"self" : true
		},
		{
			"_id" : 1,
			"name" : "cluster0-shard-00-01-b1mko.mongodb.net:27017",
			"health" : 1,
			"state" : 2,
			"stateStr" : "SECONDARY",
			"uptime" : 3597,
			"optime" : {
				"ts" : Timestamp(1479874265, 5),
				"t" : NumberLong(1)
			},
			"optimeDate" : ISODate("2016-11-23T04:11:05Z"),
			"lastHeartbeat" : ISODate("2016-11-23T05:10:47.508Z"),
			"lastHeartbeatRecv" : ISODate("2016-11-23T05:10:47.771Z"),
			"pingMs" : NumberLong(1),
			"syncingTo" : "cluster0-shard-00-02-b1mko.mongodb.net:27017",
			"configVersion" : 1
		},
		{
			"_id" : 2,
			"name" : "cluster0-shard-00-02-b1mko.mongodb.net:27017",
			"health" : 1,
			"state" : 2,
			"stateStr" : "SECONDARY",
			"uptime" : 3597,
			"optime" : {
				"ts" : Timestamp(1479874265, 5),
				"t" : NumberLong(1)
			},
			"optimeDate" : ISODate("2016-11-23T04:11:05Z"),
			"lastHeartbeat" : ISODate("2016-11-23T05:10:48.863Z"),
			"lastHeartbeatRecv" : ISODate("2016-11-23T05:10:48.096Z"),
			"pingMs" : NumberLong(1),
			"syncingTo" : "cluster0-shard-00-00-b1mko.mongodb.net:27017",
			"configVersion" : 1
		}
	],
	"ok" : 1
}

3台でレプリカセットになっています。

余談ですが、エンドポイントに使われている名前をDNSで引いてみました。

$ nslookup cluster0-shard-00-00-b1mko.mongodb.net 8.8.8.8
Server:		8.8.8.8
Address:	8.8.8.8#53

Non-authoritative answer:
cluster0-shard-00-00-b1mko.mongodb.net	canonical name = ec2-35-163-9-71.us-west-2.compute.amazonaws.com.
Name:	ec2-35-163-9-71.us-west-2.compute.amazonaws.com
Address: 35.163.9.71

はい、思いっきりEC2のパブリックDNS名が見えていますw

なお、コンソール画面からクラスタを選択すると、稼動状態やメトリックを見ることができます。この辺りはMongoDBの管理ツールであるOpsManagerと似たUIになっています。

atlas-013

最後に、DBの削除です。クラスタを選択し、右上の[...]からTerminateを選ぶと削除が可能です。

atlas-014

まとめ

MongoDBのマネージドサービスということで、MongoDB Atlasを使ってみました。AWSのRDSと同じような感覚でDBクラスタを作成・削除でき、稼動状態やメトリックの参照もできます。もともと、MongoDBもシンプルで使いやすいDBですが、さらに簡単に利用できるサービスと言えます。

また、AWS上で稼働するサービスという特性を生かして、最近のアップデートでVPC Peeringにも対応しました。Atlasで起動したMongoDBのVPCとPeeringして接続することができるようです。今回試した接続では、インターネットを経由してSSLで接続していますが、外部に公開せずに使うことが可能になります。

今回、VPC Peeringでの接続も試そうとしたのですが、VPC内のエンドポイントが見つからないという状況になったので断念しましたw。この辺りはもう少し調査してご報告したいと思います。