この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは、菊池です。
AWSクイックスタートでは、公開されたテンプレートを利用することで、セキュリティ/可用性のベストプラクティスに沿った環境を簡単に構築できます。
AWS クイックスタート:AWS で代表的なデプロイメントを自動化
当ブログでも、クイックスタートの1つであるMongoDB on AWSのデプロイを紹介しました。
今回、この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つのテンプレートが呼び出されてデプロイされました。
構築ができたらインスタンスに接続し、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の新機能によりベストプラクティスが変化してきていました。アップデートをキャッチアップし、さらに使いやすくしてくれるのは素晴らしいですね。