MongoDB AtlasにVPC Peeringで接続してみた
こんにちは、菊池です。MongoDB Atlas第2弾です。前回の記事でMongoDBのマネージドサービスであるAtlasを紹介しました。
Atlas自体は少し前にリリースされたサービスですが、今月になってVPC Peering経由での接続がサポートされました。前回の記事では接続方法が不明と書きましたが、やり方が判明しましたのでご紹介します。
やってみた
まずはAtlasがホストされているVPCと、接続したいVPCでPeeringします。
Atlasの管理画面で、SecurityタブからPEERINGを選択します。
Peering先VPCを入力します。接続先のアカウントID、VPC ID、Region、VPC CIDRを入力します。
注意事項として、当たり前ではありますが、AtlasのホストされたVPCのCIDRと重複するVPCは選択できません。AtlasのVPC CIDRは作成時に自動で払い出されてしまうため、既存のVPCと被ってしまうとNGなので、このあたりの自由度も広がることを期待します。
入力を確定すると、Peeringが承認待ちの状態になります。
Peering先の自分のアカウントを見るとピア接続のリクエストが保留中となっています。
リクエストを承認しましょう。
しばらくすると、Atlasの画面上でもPeeringができていることが確認できます。
Peeringをすると、接続元を許可するIP Whitelistに、Security Groupも設定可能になります。(PeeringしたVPCではSecurity Groupの相互参照が可能です)MongoDBのクライアントになるEC2インスタンスのSecurity Groupを設定しました。
さて、ここまでは問題なく設定可能かと思います。あとは接続するだけですが、VPC内からAtlasへ接続するための専用のエンドポイントがどこにも記述されていません。
実は、インターネット経由/VPC Peering経由ともにエンドポイントは共通になります。
VPC Peeringで、ピアリング間のプライベードIPへのDNS解決を有効にすることで、エンドポイントに対してプライベートIPが取得できるようになります。以下の2箇所を設定しておきます。
- VPCのDNS解決/DNSホスト名を有効化
- VPC Peeringで、ピアVPCからのプライベードIPへのDNS解決を有効化
これで、Atlasのエンドポイントに対してプライベートIPが取得できます。
$ nslookup cluster0-shard-00-00-b1mko.mongodb.net Server: 10.10.0.2 Address: 10.10.0.2#53 Non-authoritative answer: cluster0-shard-00-00-b1mko.mongodb.net canonical name = ec2-35-164-186-250.us-west-2.compute.amazonaws.com. Name: ec2-35-164-186-250.us-west-2.compute.amazonaws.com Address: 172.31.253.181
接続できました!
$ 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-24T14:47:09.774+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-24T14:47:09.775+0000 I NETWORK [ReplicaSetMonitorWatcher] starting Cluster0-shard-0:PRIMARY>
まとめ
いかがでしょうか。VPC Peeringに対応したことで、AWSからAtlasを使う上ではインターネットを経由する必要がなくなり、セキュリティ的な抵抗感もなくなりました。
エンドポイントが共通ということでハマりましたが、これは、外部/内部で接続先設定を変える必要もなく、AWSの仕組みをうまく使っていると言えるでしょう。