AWSクイックスタート:MongoDB on AWS がアップデートされました

mongo

こんにちは、菊池です。

AWSクイックスタートでは、公開されたテンプレートを利用することで、セキュリティ/可用性のベストプラクティスに沿った環境を簡単に構築できます。

AWS クイックスタート:AWS で代表的なデプロイメントを自動化

当ブログでも、クイックスタートの1つであるMongoDB on AWSのデプロイを紹介しました。

AWSクイックスタート:MongoDB on the AWS Cloudを試してみた

今回、このMongoDB on AWSがアップデートされ、MongoDB及びAWSの最新機能に対応しました。

AWS Quick Starts MongoDB on AWS

主な変更点

構成イメージは、公式ページの紹介を参照ください。今回のアップデートによる、主な変更点を紹介します。

MongoDB Version 3.2/3.4に対応

以前はMongoDB 2.6または3.0の環境がデプロイされました。今回のテンプレートでは、最新のメジャーバージョンであるバージョン3.6と、1つ前のメジャーバージョンの3.2に対応しています。テンプレートのパラメータでメジャーバージョンを指定すると、それぞれの最新マイナーバージョンがデプロイされます。

また、ストレージエンジンも3.2以降のデフォルトであるWired Tigerで環境構築されます。当然、3.2以降で対応した機能が利用可能です。

NAT Gateway対応

DBノードのインスタンスは、以前と同様にPrivate Subnetに配置されます。Private Subnetのインスタンスからインターネットへ通信するため、以前のテンプレートではNATインスタンスがデプロイされました。一方で、今回のテンプレートでは、マネージドサービスであるNAT Gatewayが起動します。さらに、Multi-AZ配置となりますので、より可用性が向上したといえるでしょう。

シャーディングは非対応に

一方で、以前のテンプレートでは可能だった、シャード構成のデプロイは省略されています。それに伴い、不要になるConfigサーバも構成されません。

ただ、バージョン3.2以降、Configサーバでもレプリカセット構成がサポートされデフォルトになっています。今回の新しいテンプレートを同じVPCに複数デプロイすることで、比較的簡単にシャーディング環境の構成が可能です。こちらについては手順を検証し、別途紹介したいと思います。

試してみた

実際に構築してみました。公式ドキュメントの手順に従えば、特に迷う点もなくデプロイが可能でした。

MongoDB on the AWS Cloud: Quick Start Reference Deployment

なお、上記ドキュメントですが、現時点(2017年6月)では英語版のみ最新の情報に更新されています。

従来と同様、VPCを含めて新規作成するか、既存のVPCにデプロイするか選択が可能です。VPCも併せてデプロイしたところ、ベースのCloudFormationテンプレートから、6つのテンプレートが呼び出されてデプロイされました。

mongo-quickstart-001

構築ができたらインスタンスに接続し、MongoDBの環境を確認してみます。

$ mongo admin -u user -p
MongoDB shell version v3.4.5
Enter password:
connecting to: mongodb://127.0.0.1:27017/admin
MongoDB server version: 3.4.5
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
s0:PRIMARY>

構築時点で最新のバージョン3.4.5です。

s0:PRIMARY> db.version()
3.4.5
s0:PRIMARY>

ストレージエンジンはWired Tigerとなっています。

s0:PRIMARY> db.serverStatus().storageEngine
{
       	"name" : "wiredTiger",
       	"supportsCommittedReads" : true,
       	"readOnly" : false,
       	"persistent" : true
}
s0:PRIMARY>

レプリカの設定です。

s0:PRIMARY> rs.conf()
{
       	"_id" : "s0",
       	"version" : 1,
       	"protocolVersion" : NumberLong(1),
       	"members" : [
       		{
       			"_id" : 1,
       			"host" : "10.0.6.181:27017",
       			"arbiterOnly" : false,
       			"buildIndexes" : true,
       			"hidden" : false,
       			"priority" : 10,
       			"tags" : {

       			},
       			"slaveDelay" : NumberLong(0),
       			"votes" : 1
       		},
       		{
       			"_id" : 2,
       			"host" : "10.0.52.115:27017",
       			"arbiterOnly" : false,
       			"buildIndexes" : true,
       			"hidden" : false,
       			"priority" : 5,
       			"tags" : {

       			},
       			"slaveDelay" : NumberLong(0),
       			"votes" : 1
       		},
       		{
       			"_id" : 3,
       			"host" : "10.0.33.185:27017",
       			"arbiterOnly" : false,
       			"buildIndexes" : true,
       			"hidden" : false,
       			"priority" : 5,
       			"tags" : {

       			},
       			"slaveDelay" : NumberLong(0),
       			"votes" : 1
       		}
       	],
       	"settings" : {
       		"chainingAllowed" : true,
       		"heartbeatIntervalMillis" : 2000,
       		"heartbeatTimeoutSecs" : 10,
       		"electionTimeoutMillis" : 10000,
       		"catchUpTimeoutMillis" : 2000,
       		"getLastErrorModes" : {

       		},
       		"getLastErrorDefaults" : {
       			"w" : 1,
       			"wtimeout" : 0
       		},
       		"replicaSetId" : ObjectId("59522d885fd48b5e72294e13")
       	}
}
s0:PRIMARY>

起動設定も確認してみました。

$ cat /etc/mongod.conf
net:
  port: 27017

systemLog:
  destination: file
  logAppend: true
  path: /log/mongod.log

storage:
  dbPath: /data
  journal:
    enabled: true

security:
  authorization: enabled
  keyFile: /mongo_auth/mongodb.key

processManagement:
  fork: true
  pidFilePath: /var/run/mongod/mongod.pid
replication:
  replSetName: s0

まとめ

AWSのベストプラクティスに沿ってMongoDB環境を構成してくれる、クイックスタート:MongoDB on AWSの更新を紹介しました。

実際に構築したところ、以前より実運用環境への適用がしやすくなった印象を持ちました。シャード構成が省略され、機能ダウンに思えるかもしれませんが、逆に柔軟に使えるようになったようです。

公開から時間が経過し、プロダクトのバージョンアップやAWSの新機能によりベストプラクティスが変化してきていました。アップデートをキャッチアップし、さらに使いやすくしてくれるのは素晴らしいですね。