MongoDB as a Service:MongoDB Atlasを試してみた
こんにちは、菊池です。久しぶりのMongoDBネタです。
MongoDB Atlas
MongoDB Atlasは、MongoDBの開発元であるMongoDB, Inc. が公式に提供しているMongoDBのマネージドサービスです。
コンソール画面からMongoDBを簡単にデプロイ可能で、時間あたりの従量課金でMongoDBを利用することできます。また、インフラにはAWSが使われています。
使ってみた
早速使ってみました。
まずはSign Upします。メールアドレスなどのアカウントに必要な情報を入力します。
Atlas Groupというグループの名前を入れます。
サインアップできたら、ログインしてみます。クラスタを作るため、BUILD A NEW CLUSTERを選択します。
作成するクラスタのスペックを選択します。必要なのは以下の項目です。
- リージョン
- インスタンスサイズ/ストレージ容量
- レプリケーションノード数
- シャーディングの有無
- バックアップの有無
- Adminユーザ名/パスワード
リージョンはAWSのリージョンそのままですw。今回はオレゴンを選択しました。
インスタンスは最小のものを選びました。2GBメモリ、10GBストレージです。
レプリカ数は3/5/7から選択します。とりあえず最小の3ノードを選択。シャード/バックアップもなしにしました。
Adminのユーザ名、パスワードを入力します。
初回のクラスタ作成時のみ、支払い情報の入力が必要です。(2回目以降は省略)請求先とクレジットカード情報を入力します。
DEPLOYをすると、クラスタが作成中となります。
数分でクラスタが起動しました。DBに接続するため、CONNECTを選択。
すると、接続を許可するIPを追加できます。また、アプリケーションやmongoshellで接続する際のエンドポイントが表示されます。
デプロイした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になっています。
最後に、DBの削除です。クラスタを選択し、右上の[...]からTerminateを選ぶと削除が可能です。
まとめ
MongoDBのマネージドサービスということで、MongoDB Atlasを使ってみました。AWSのRDSと同じような感覚でDBクラスタを作成・削除でき、稼動状態やメトリックの参照もできます。もともと、MongoDBもシンプルで使いやすいDBですが、さらに簡単に利用できるサービスと言えます。
また、AWS上で稼働するサービスという特性を生かして、最近のアップデートでVPC Peeringにも対応しました。Atlasで起動したMongoDBのVPCとPeeringして接続することができるようです。今回試した接続では、インターネットを経由してSSLで接続していますが、外部に公開せずに使うことが可能になります。
今回、VPC Peeringでの接続も試そうとしたのですが、VPC内のエンドポイントが見つからないという状況になったので断念しましたw。この辺りはもう少し調査してご報告したいと思います。