MongoDB AtlasにVPC Peeringで接続してみた

2016.11.25

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

こんにちは、菊池です。MongoDB Atlas第2弾です。前回の記事でMongoDBのマネージドサービスであるAtlasを紹介しました。

Atlas自体は少し前にリリースされたサービスですが、今月になってVPC Peering経由での接続がサポートされました。前回の記事では接続方法が不明と書きましたが、やり方が判明しましたのでご紹介します。

やってみた

まずはAtlasがホストされているVPCと、接続したいVPCでPeeringします。

Atlasの管理画面で、SecurityタブからPEERINGを選択します。

atlas-peer-001

Peering先VPCを入力します。接続先のアカウントID、VPC ID、Region、VPC CIDRを入力します。

atlas-peer-002

注意事項として、当たり前ではありますが、AtlasのホストされたVPCのCIDRと重複するVPCは選択できません。AtlasのVPC CIDRは作成時に自動で払い出されてしまうため、既存のVPCと被ってしまうとNGなので、このあたりの自由度も広がることを期待します。

atlas-peer-003

入力を確定すると、Peeringが承認待ちの状態になります。

atlas-peer-004

Peering先の自分のアカウントを見るとピア接続のリクエストが保留中となっています。

atlas-peer-005

リクエストを承認しましょう。

atlas-peer-006

しばらくすると、Atlasの画面上でもPeeringができていることが確認できます。

atlas-peer-007

Peeringをすると、接続元を許可するIP Whitelistに、Security Groupも設定可能になります。(PeeringしたVPCではSecurity Groupの相互参照が可能です)MongoDBのクライアントになるEC2インスタンスのSecurity Groupを設定しました。

atlas-peer-008

さて、ここまでは問題なく設定可能かと思います。あとは接続するだけですが、VPC内からAtlasへ接続するための専用のエンドポイントがどこにも記述されていません。

実は、インターネット経由/VPC Peering経由ともにエンドポイントは共通になります

VPC Peeringで、ピアリング間のプライベードIPへのDNS解決を有効にすることで、エンドポイントに対してプライベートIPが取得できるようになります。以下の2箇所を設定しておきます。

  • VPCのDNS解決/DNSホスト名を有効化
  • VPC Peeringで、ピアVPCからのプライベードIPへのDNS解決を有効化

atlas-peer-009

atlas-peer-010

これで、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の仕組みをうまく使っていると言えるでしょう。