2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[AWS] DocumentDB(MongoDB互換)へ踏み台サーバ経由で接続してみた

Posted at

1.はじめに

皆さんDocumentDBはご存知でしょうか?MongoDBとAPIレベルで互換性があるAWSのデータベースサービスで、DocumentDBを使えばバックアップや冗長化などめんどくさい部分をAWSにまるっと任せることができるので管理が非常に楽になります。
DocumentDB(≒MongoDB)内のデータをメンテナンスする際にはRobo 3TなどのGUIツールを使いたいところですが、DocumentDBをPrivateサブネットに配置すると少々ややこしい設定が必要になるため、今回はその具体的な設定方法について記載していきたいと思います。

2.今回の構成図

やり方は色々あると思いますが、今回は踏み台サーバを使ってみました。以下の図の通り、DocumentDBはプライベートサブネットに配置し、クライアントPCのRobo 3Tから踏み台サーバ経由で接続する形になります。(SSHトンネル経由で接続)
構成図_文字大.png

3.AWSネットワークの設定方法

まずはサブネットやセキュリティグループ等、ネットワーク周りの設定方法について記載しています。

3-1.サブネット作成

DocumentDBを配置するPrivateサブネットを新たに作成します。今回はVPCとpublicサブネットはデフォルトのものを使う前提です。マルチAZ構成とするため、PrivateサブネットはAZを変えて2つ切ります。CIDRは何でもいいですが、ここでは 172.31.128.0/24、172.31.129.0/24 としました。
サブネット作成時の画面はこんな感じです。
【完成版】3-1-1サブネット作成_網掛けあり.png

3-2.ルートテーブルの作成とサブネットへの割り当て

上記で作成したPrivateサブネット用のルートテーブルを作成します。作成時の画面はこんな感じ。ルーティングの設定内容はデフォルトのままでOKです。
【完成版】3-1-2ルートテーブル作成_網掛けあり.png

続いて作成したルートテーブルをサブネットに割り当てます。まずはルートテーブルの詳細画面から「サブネットの関連付けを編集」をクリックします。
【完成版】3-1-3ルートテーブル割り当て_網掛けあり.png

続く画面で今回作成した2つのPrivateサブネットを選択し、「関連付けを保存」をクリックします。
【完成版】3-1-3-2ルートテーブル割り当て_網掛けあり.png

無事割り当たりました。
【完成版】3-1-3-3ルートテーブル割り当て_網掛けあり.png

3-3.踏み台サーバ用のセキュリティグループ作成

踏み台サーバに割り当てる使用するセキュリティグループを作成します。
インバウンドルールはこちら。

タイプ プロトコル ポート範囲 ソース
SSH TCP 22 接続元PCのIPアドレス/32

続いてアウトバウンドルールはこちら。デフォルトではアウトバウンドを全て許可した状態になりますが、今回はアウトバウンドを含めルールを強めに縛ってしています。セキュリティを考えると個人的にはこちらの方が好みです。

タイプ プロトコル ポート範囲 ソース
カスタム TCP TCP 27017 DocumentDBのセキュリティグループ
HTTPS TCP 443 0.0.0.0/0
HTTP TCP 80 0.0.0.0/0

なお上記で指定しているDocumentDBのセキュリティグループはすぐ下の手順で作成しますので、その値を設定してください。

3-4.DocumentDB用のセキュリティグループ作成

DocumentDBに割り当てる使用するセキュリティグループを作成します。インバウンドルールはこちら。

タイプ プロトコル ポート範囲 ソース
カスタム TCP TCP 27017 踏み台サーバのセキュリティグループ

アウトバウンドルールは設定不要です。好みはありますが、私はデフォルトの定義を削除しました。

3-4.踏み台サーバ用のElastic IP(EIP)作成

踏み台サーバに固定IPを割り当てたいのでEIPを作成します。
まずはAWSコンソール上でEIPの画面を表示し、「Elastic IPアドレスを割り当てる」をクリックします。
【完成版】3-1-4-1_EIP作成_網掛けあり.png

以下の画面でリージョン等々を選択して「割り当て」をクリックするとEIPが作成されます。
【完成版】3-1-4-2_EIP作成_網掛けあり.png

4.踏み台サーバ作成

DocuemntDBへ接続する際に、踏み台として使用するサーバを作成します。

4-1.踏み台サーバ用のEC2インスタンス作成

まず踏み台サーバ用のEC2インスタンスを作成します。EC2については色んなところで作成方法が紹介されているのでここでは割愛させて頂きます。主な設定内容は以下の通りです。

設定項目 設定値
AMI Amazon Linux 2 AMI (HVM), SSD Volume Type
インスタンスタイプ t2.micro(無料枠)
ネットワーク デフォルトのVPCを指定
サブネット デフォルトサブネット(Public)のうち、任意の1つを指定
自動割り当てパブリックIP 無効化(後程EIPを割り当てるため)
ストレージ 8GB(デフォルトから変えず)
セキュリティグループ 上記で作成したセキュリティグループ

4-2.EC2インスタンスへのEIP割り当て

EC2作成後、EIPを割り当てます。AWSコンソールで先程作成したEIPを選択し、アクションから「Elastic IPアドレスの関連付け」を選択します。
【完成版】3-1-5-2_踏み台サーバへのEIP割り当て_網掛けあり.png

続く画面で踏み台サーバのインスタンスを選択し、「関連付ける」をクリックすればEC2にEIPが割り当たります。
【完成版】3-1-5-3_踏み台サーバへのEIP割り当て_網掛けあり.png

5.DocumentDB作成

以下、DocumentDBクラスターの作成方法について記載します。

5-1.サブネットグループの作成

まずはDocumentDBの所属先となるサブネットグループを作成します。以下DocumentDBコンソールの左メニューから「サブネットグループ」を選択します。この画面上で「作成」ボタンをクリックします。
【完成版】3-1-6-1_サブネットグループ作成_網掛けあり.png

続く画面で、先ほど作成した2つのプライベートサブネットを指定し、「作成」ボタンをクリックします。
【完成版】3-1-6-2_サブネットグループ作成_網掛けあり.png

5-2.パラメータグループの作成(TLS無効化)

DocumentDBはデフォルトでTLSが有効になっており、AWSが提供する証明書を使わないとDBにアクセスすることができません。これだとちょっと使いづらいですし、暗号化は踏み台サーバのSSHトンネル上でも行われるので、今回はTLSを無効にしておきたいと思います。この辺は良し悪しあるので各々の判断で実施ください。
やり方としては、DocumentDBコンソールの左メニューから「パラメータグループ」を選択します。この画面上で「作成」ボタンをクリックします。
【完成版】5-2-1_パラメータグループ_網掛けあり.png

以下の画面が開くのでパラメータグループの名前と説明を入力します。
【完成版】5-2-2_パラメータグループ_網掛けあり.png

作成後の画面はこんな感じです。新しく作ったパラメータグループ名のリンクをクリックします。
【完成版】5-2-3_パラメータグループ_網掛けあり.png

続く画面で「tls」を選択して「編集」をクリックします。
【完成版】5-2-4_パラメータグループ_網掛けあり.png

disabledを選択して保存します。
【完成版】5-2-5_パラメータグループ_網掛けあり.png

5-3.DocumentDBクラスターの作成

DocumentDBコンソールの左メニューから「クラスター」を選択します。この画面上で「作成」ボタンをクリックします。
【完成版】5-2-1_DocumentDB作成_網掛けあり.png

以下の画面が開くので設定情報を入力していきます。
【完成版】5-2-2_DocumentDB作成_網掛けあり.png

入力項目はまあまあ多いです。私の場合は以下の設定にしました。

設定項目 設定値
クラスター識別子 任意の文字列
エンジンバージョン 4.0.0
インスタンスクラス 任意
インスタンス数 1(複数ノードのクラスタを作りたい場合は数を増やす)
マスターユーザ名 任意(ただし、adminは使えないようなので注意)
マスターパスワード 任意
VPC デフォルトVPC
サブネットグループ 前述の手順で作成したサブネットグループを指定
セキュリティグループ 前述の手順で作成したDocumentDB用のセキュリティグループを指定
ポート 27017(デフォルトのまま変更せず)
クラスターパラメータグループ 前述の手順で作成したパラメーターグループ
保管時の暗号化 デフォルトのまま
バックアップ デフォルトのまま
ログのエクスポート デフォルトのまま
メンテナンス デフォルトのまま

6.クライアントPCの設定方法

続いてクライアントPC側の設定方法について記載していきます。ちなみにOSはWindows10が前提になります。

6-1.Robo 3Tのインストール

DocumentDB(MongoDB)向けのGUIツールはいくつかありますが、今回はRobo 3Tの無償版を使いたいと思います。
こちらからダウンロードしてインストールします。ZIP版だと任意のフォルダに置くだけでよいので楽かと思います。

6-2.Puttyのインストール

Puttyをインストールします。DocumentDBへ繋げる際のSSHトンネルの作成に使用します。
こちらからインストーラをダウンロードして実行してください。

6-3.Putty用のキーファイル作成

踏み台用のEC2インスタンスを作成した際に、キーペアも一緒に作成したかと思います。この時にダウンロードできる秘密鍵(pem)はそのままではPuttyで使えないため、ppkに変換します。
まずはスタートメニューからPuTTY→PuTTYgenを選択し、PuTTYgenを起動します。この画面上で「Load」ボタンをクリックし、AWSからダウンロードしたpemファイルを指定します。
【完成版】6-3-1_PPK作成.png

そうすると以下の画面が表示されます。任意のパスフレーズを設定し、「Save private key」をクリックすればppkへの変換は完了です。パスフレーズは無しでもOKですが、セキュリティを考えるとできる限り入れておいた方がよいと思います。
【完成版】6-3-3_PPK作成.png

6-4.PuttyのSSHトンネル設定

DocumentDBへ接続する際に使用する、SSHトンネルの設定を行います。
まずはスタートメニューからPuttyを開きます。最初に表示される以下画面の「Host Name」欄に「ec2-user@踏み台サーバのIP」を入力します。踏み台サーバのIPは、前段で取得したElastic IPのIPアドレスを指定してください。
【完成版】6-4-1_Puttyトンネル設定.png

プロキシ経由でインターネット接続している場合は以下の設定を行います。左メニューから「Connection - Proxy」を選択し、プロキシサーバのIP&ポート番号を入力してください。(プロキシを使っていない場合は設定不要です。)
【完成版】6-4-2_Puttyトンネル設定.png

KeepAliveの設定を行います。左メニューの「Connection」を選択し、一番上の項目に任意の時間(秒)を入力します。ここでは30秒としました。これにより、無操作状態でもPuttyが一定間隔で通信を投げてくれるため、セッションタイムアウトを防ぐことができます。
【完成版】6-4-3_Puttyトンネル設定.png

続いてPPKファイルのパスを指定します。「Connection - SSH - Auth」を選択し、一番下のテキストボックスに先程作成したPPKファイルのパスを指定します。
【完成版】6-4-4_Puttyトンネル設定.png

トンネル設定を行います。「Connection - SSH - Auth - Tunnels」を選択し、「Source port」に任意のポート番号を、「Destination」にDocumentDBのホスト名とポート番号(27017)を設定します。「Source port」に指定したポートは後程Robo 3Tから接続する際に使用します。ここでは8001にしてみました。
【完成版】6-4-5_Puttyトンネル設定.png

入力したら「Add」ボタンをクリックします。すると上部のエリアにトンネル設定が登録されます。
【完成版】6-4-6_Puttyトンネル設定.png

以上で設定完了ですが、このままPuttyを閉じると苦労して入れた設定が全て消えてしまうので保存しておきましょう。左メニューから「Session」を選択し、「Save Sessions」に任意の名前を入力して「Save」ボタンを選択します。これで保存は完了です。
【完成版】6-4-7_Puttyトンネル設定.png

6-5.Robo 3TからDocumentDBへの接続

それではRobo 3TからDocumentDBへ接続してみましょう。
まず先程設定したPuttyでの接続を行います。スタートメニューからPuttyを起動し、保存したセッション名を選択して「Open」ボタンをクリックします。すると以下の画面が表示されます。PPKにパスフレーズを設定している場合はここで聞かれるので入力しましょう。
【完成版】6-5-1_DocDBへの接続.png

パスフレーズ入力後の画面はこんな感じです。無事ログインできました。これでSSHトンネルが通った状態になります。
【完成版】6-5-2_DocDBへの接続.png

続いてRobo 3Tを起動します。以下の画面が開くので、左上の「Create」リンクをクリックします。
【完成版】6-5-3_DocDBへの接続.png

以下の画面が開くので、「Name」に任意の名前を入力します。「Address」には localhost と、前段でPuttyに設定したクライアントPC側のポート番号を指定します。ここでは8001です。
【完成版】6-5-4_DocDBへの接続.png

つづいて「Authentication」タブを選択します。「User Name」にDocumentDB作成時に設定したマスターユーザ名を、「Password」に同じくパスワードを入力します。その後「Save」ボタンで保存します。
【完成版】6-5-5_DocDBへの接続.png

こんな感じになります。この状態で「Connect」ボタンを押すとDocumentDBへ接続できます。やってみましょう。
【完成版】6-5-6_DocDBへの接続.png

無事繋がりました。左メニューにDocumentDB内のデータベースが表示されていますね。
【完成版】6-5-7_DocDBへの接続.png

7.おわりに

今回はRobo 3TでDocumentDBへ接続する際の各種設定方法について記載させて頂きました。Robo 3Tに限らず他のGUIツールでも同じように接続できるはずなので、興味のある方は試して頂ければと思います。
この記事が誰かのお役に立てると幸いです。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?