Amazon EC2からVPCエンドポイント経由で MongoDB Atlas に接続してみた

Amazon EC2(Amazon ECSでも可) からPrivate Endpoint経由で MongoDB Atlas に接続する方法についてご説明します。
2023.06.12

はじめに

Amazon EC2 (Amazon ECSなどでも可) からMongoDB Atlasへの接続方法には、以下の方法があります。

  • インターネット経由
  • VPC ピアリング経由
  • Private Endpoint経由

接続方法

インターネット経由

インターネット経由では、EC2から直接インターネット経由でMongoDB Atlasに接続します。

セキュリティを強化するためには、MongoDB Atlas側でIP制限を設定する必要があります。

ただし、EC2がAuto Scalingを使用する場合、NAT Gatewayを設置してIPを固定する必要があります。

VPC ピアリング経由

VPC ピアリング経由は、下記の構成の通り、自身のアカウントのVPCと、MongoDB Atlas側で作成されるVPCを、ピアリング接続します。(構成図はAWSのサイトの紹介ページを引用

構成図では、左側のVPCは自分のアカウント内のVPCで、右側がMongoDB AtlasのアカウントのVPCです。

VPC ピアリング経由のMongoDB Atlas への接続方法は、下記のブログで紹介されています。

MongoDB Atlas側でセキュリティグループを作成し、特定のセキュリティグループをアタッチしたEC2のみが接続できるように設定可能です。

Private Endpoint経由

Private Endpoint 経由は、下記の構成の通り、自身のアカウント内に作成したEC2からVPCエンドポイント経由で、MongoDB Atlasに接続します。(構成図はMongoDBのドキュメントを引用

構成図では、左側のVPCは自分のアカウント内のVPCで、右側がMongoDB AtlasのアカウントのVPCです。

Private Endpointという言葉は、AWSの用語ではなく、MongoDB Atlasの用語になります。

構成図の右側にあるLoad Balancerは、MongoDB Atlas側で作成され、自身のAWSアカウントのVPCエンドポイントからLoad Balancerに対して、一方向の接続が確立されます。

セキュリティとしては、VPCエンドポイントのセキュリティグループで、特定のセキュリティグループをアタッチしたEC2のみがMongoDB Atlasに接続するよう設定できますので、比較的安全です。

今回は、自身のアカウント内のEC2から、Private Endpoints経由で、MongoDB Atlasに接続する方法を記載します。

料金については、こちら

事前準備

  • AWSアカウントでEC2を作成済み
    • SSH接続、もしくはセッションマネージャが利用できるようにする
  • Atlasのアカウントを作成済み
    • 作成していない場合、下記ブログをご参考にしてください

DBを作成する

まず、DBを作成します。

高度な設定でDBを作成するため、[advanced configuration options.]をクリックします。

安く済ませたいので、下記以外は、デフォルト設定で作成します。最低価格の$0.10/hour で作成できているか確認しましょう。

  • Proveider
    • AWS
  • Region
    • Tokyo (ap-northeast-1)
  • Cluster Tier
    • M10 (2 GB RAM, 10 GB Storage)
  • Auto-scale
    • 無効
  • Turn on Cloud Backup (M2 and up)
    • 無効

[Create Cluster]をクリックすると、Security Quickstartに遷移します。遷移時点でDBは作成されています。

Private Endpointを作成

ユーザー名とパスワードを設定し、[Private Endpoint]の[Configure in New Tab]をクリックします
別タブで、[Network Access]が開かれます。[Add Private Endpoint]をクリックします

AWSを選択します

Tokyoリージョンを選択します。

EC2が起動しているVPCとサブネットを指定します。画面に記載されている通り、Atlas Endpoints Serviceが作成されるまで3~4分ほど待ちます。

記載しているコマンドをローカルもしくは、CloudShellで実行し、VPCエンドポイントを作成します。

$ aws ec2 create-vpc-endpoint --vpc-id vpc-xxxxxxxxxxxxxxxx --region ap-northeast-1 --service-name com.amazonaws.vpce.ap-northeast-1.vpce-svc-xxxxxxxxxxxx --vpc-endpoint-type Interface --subnet-ids subnet-xxxxxxxxxxxxxxxxxxx

コマンド実行後、作成されたVPC Endpoints IDを入力し[create]をクリックすると完了です。

VPCエンドポイント用のセキュリティグループを作成

EC2のセキュリティグループからのインバウンドを、すべてのTCPに対してのみ、許可する設定で作成します。

作成したセキュリティグループは、VPCエンドポイントにアタッチします。

EC2からMongoDB Atlasにアクセスする

DBダッシュボードから[Connect]をクリックします。

下記を設定し、[Choose a connection method]をクリックします。

  1. Choose connection type
    • Private Endpoint を選択
  2. Choose private endpoint
    • 先程作成したVPC Endpoints IDを選択

[Shell]を選択します

Amazon Linux 2の場合、下記のコマンドで、mongoshをインストールし、EC2からMongoDBに接続できます。

セッションマネージャでEC2に接続し、下記コマンドを実行します

$ cd /home/ssm-user/

$ wget https://downloads.mongodb.com/compass/mongosh-1.8.0-linux-x64.tgz
2023-04-18 07:40:34 (172 MB/s) - ‘mongosh-1.8.0-linux-x64.tgz’ saved [61098948/61098948]

$ tar xvfz mongosh-1.8.0-linux-x64.tgz
$ cd mongosh-1.8.0-linux-x64
$ chmod +x bin/mongosh

$ sudo cp bin/mongosh /usr/local/bin/
$ sudo cp bin/mongosh_crypt_v1.so /usr/local/lib/

$ mongosh "mongodb+srv://cluster0-pl-0.itg2z.mongodb.net/myFirstDatabase" --apiVersion 1 --username admin

Enter password: **********
Current Mongosh Log ID: xxxxxxxxxxxxxxxxxxxxxxxxxxx
Connecting to:          mongodb+srv://<credentials>@cluster0-pl-0.itg2z.mongodb.net/myFirstDatabase?appName=mongosh+1.8.0
Using MongoDB:          6.0.5 (API Version 1)
Using Mongosh:          1.8.0

For mongosh info see: https://docs.mongodb.com/mongodb-shell/

Atlas atlas-yxeifm-shard-0 [primary] myFirstDatabase> show databases
admin   264.00 KiB
config  220.00 KiB
local   516.00 KiB

EC2からMongoDB Atlasに接続し、DB一覧を確認できました。

コマンドは下記のドキュメントに記載されていました

参考

最後に

Private Endpoint経由でEC2からMongoDB Atlasに接続することができました。

MongoDB Atlasのコンソール上で、使用するべきコマンドが表示されており、それに従えばよいので、比較的簡単に作成することができます