はじめに
今回は、AWS環境にデプロイしたデータベースとローカルのDBeaverデスクトップアプリを接続してみるまでの手順をまとめてみました。
少しでも参考になれば幸いです。
ローカルのPostgreSQLと接続した時の記事はこちら:
前提
・DBeaverがインストール済みであること
・データベースが作成済みであること
・(テーブルが作成済みであること)→GUIで接続後に直ぐに確認できます
インフラ構成図
プライベートサブネット内のRDSは、インターネットから直接GUI接続できないため、SSM Session Manager + ポートフォワーディング構成での接続が推奨されていますが、
・構成がシンプル
・コストが安い
・管理が楽(EC2の起動/停止のみ)
といった点から、今回は従来の踏み台サーバー(Bastion)を使用して接続していきます。
なぜ踏み台サーバーが必要?
インターネットから直接RDSへ接続できないようにし、踏み台EC2からのみ接続可能にするため(セキュリティ向上のため)です。
操作の流れ
- SSHキーペアの作成
- インターネットゲートウェイの作成
- 踏み台専用パブリックサブネットの作成
- 専用ルートテーブルを作成しIGWへ向ける
- 踏み台サーバー用セキュリティグループを作成
- データベースのセキュリティグループを修正
- 踏み台EC2を起動
- DBeaverで接続
1. SSHキーペアの作成
AWSコンソール >> EC2 >> キーペア画面に遷移し、「キーペアを作成」を押します。
①わかりやすい名前を設定します。
②③④その他はデフォルトのまま「キーペアを作成」を押します。
踏み台サーバへ接続する際に、秘密鍵が他人から読める状態だとSSHは接続を拒否します。
そのため、以下のコマンドを実行して「自分だけが読める」状態にする必要があります。
※Downloads/でなくDocuments/などに配置しても大丈夫です。
chmod 400 ~/Downloads/<project-name>-<env>-bastion-key.pem
2. インターネットゲートウェイの作成
AWSコンソール >> VPC >> インターネットゲートウェイ画面に遷移し、「インターネットゲートウェイの作成」を押します。
わかりやすい名前を設定し、「インターネットゲートウェイの作成」を押します。
作成後、「アクション」>>「VPCにアタッチ」を押します。
①データベース用に作成したVPCを選択し、
②「インターネットゲートウェイのアタッチ」を押します。
3. 踏み台専用パブリックサブネットの作成
AWSコンソール >> VPC >> サブネット画面に遷移し、「サブネットを作成」を押します。
①既存のVPCを選択します
②わかりやすいサブネット名を設定します
③アベイラビリティーゾーンを選択します(今回は1a)
④CIDR ブロックを設定します(既存のサブネットのCIDRを確認します→被っていたらエラーメッセージ出ます)
⑤「サブネットを作成」を押します。
作成したサブネットを選択し、「アクション」>>「サブネットの設定を編集」を押します。
「パブリック IPv4 アドレスの自動割り当てを有効化」にチェックを入れ、「保存」します。
4. 専用ルートテーブルを作成しIGWへ向ける
AWSコンソール >> VPC >> ルートテーブル画面に遷移し、「ルートテーブルを作成」を押します。
①わかりやすい名前を設定します。
②既存のVPCを選択します。
③「ルートテーブルを作成」を押します。
作成したルートテーブルの「ルート」>>「ルートを編集」を押します。
①「送信先」に「0.0.0.0/0」を選択します。
②「ターゲット」に「インターネットゲートウェイ」を選択し、先ほど作成したものを指定します。
③「変更を保存」を押します。
作成したルートテーブルの「サブネットの関連付け」>>「サブネットの関連付けを編集」を押します。
先ほど作成したサブネットを選択し、「関連付けを保存」を押します。
5. 踏み台サーバー用セキュリティグループを作成
AWSコンソール >> VPC >> セキュリティ >> セキュリティグループ画面に遷移し、「セキュリティグループを作成」を押します。
①わかりやすい名前を設定します。
②「説明」を記述します(必須)
③既存のVPCを選択します。
インバウンドルールで「ルールを追加」を押します。
④「タイプ」は「SSH」を選択します。
⑤「ソース」は「マイIP」を選択します(自分のグローバルIP /32 が自動入力されます)
※このIPからのみアクセスを許可するため、場所を移動するなどした場合はアクセスできなくなります
⑥「セキュリティグループを作成」を押します。
6. データベースのセキュリティグループを修正
同様の手順で、「データベースのセキュリティグループ」を選択し、インバウンドルールを追加します。
①「タイプ」は「PostgreSQL」を選択します。(プロトコル:TCP、ポート範囲:5432が自動で設定されます)
②③「ソース」は「カスタム」を選択し、作成した踏み台サーバーのセキュリティグループを選択します。
④「ルールを保存」を押します。
7. 踏み台EC2を起動
AWSコンソール >> EC2 >> インスタンス画面に遷移し、「インスタンスを起動」を押します。
①わかりやすい名前を設定します。
②マシンイメージは今回はデフォルトのままにします。
①インスタンスタイプは今回はデフォルトのままにします。
(コスト重視なら t4g.nano+Arm64 AMIがおすすめです)
②先ほど作成したキーペアを選択します。
「ネットワーク設定」で「編集」を押します。
①既存のVPCを選択します。
②先ほど作成したサブネットを選択します。
③「パブリック IP の自動割り当て」は「有効化」にします。
④「ファイアウォール」は「既存のセキュリティグループを選択する」にします。
⑤先ほど作成したセキュリティグループとデータベースのセキュリティグループ(今回は'default'になっています)の両方を選択します
その他の設定はデフォルトのまま「インスタンスを起動」を押します。
8. DBeaverで接続
DBeaverデスクトップを立ち上げ、新規接続 → PostgreSQLを選択します。
Hostの確認
AWSコンソール >> Aurora and RDS >> データベース画面に遷移します。
①接続対象のクラスターを選択します。
②「接続とセキュリティ」タブを開きます。
③「エンドポイント」を選択します。
④⑤「タイプ」が「ライター」のエンドポイントが「Host」になります。
①「Main」タブを開きます。
②「Host」を選択します。
③先ほどのエンドポイントを入力します。
④「Port」は5432を入力します。
⑤「Database」にはデータベース名を入力します。
⑥「ユーザー名/パスワード」を選択します。
⑦⑧シークレットマネージャーに保存した値を入力します。
⑨「SSH」タブを開きます。
①「Host/IP」には踏み台EC2のパブリックIPを入力します。
②「Port」は22にします。
③「User Name」はec2-userを入力します。
④「Public Key」を選択します。
⑤保存したキーペアを選択します。
⑥「Test Connection」を実行します。
見事にエラーが出てしまいました。
おそらく過去の記事でローカルのPostgreSQLと接続した際に発生したものと同様のエラーのようです(ファイアウォール関連でDBeaverのJavaアプリの通信が切られている)
ここから先は上記の正攻法でうまくいかなかった場合の手順になります。
①SSHタブを閉じる
DBeaverアプリのSSHタブはもう使わないので閉じてしまいます。
②ターミナルでトンネルを張る
ターミナルを開き、以下のコマンドを実行します(ターミナルが固まりますが、その間は接続が維持されています)
ssh -i ~/Downloads/<your-key> -N \
-L 15432:<your-host>:5432 \
ec2-user@<your-ip>
ssh:SSH接続を開始します。
-i:EC2へログインする際に使用する秘密鍵を指定します。
-N:シェルを開かない(今回は踏み台として使うだけなので)
ec2-user@<your-ip>:接続先です。ユーザー名:ec2-userで公開IPアドレスにアクセスします。
-L:ローカルポートフォワーディングです。
ローカルポート:接続先ホスト:接続先ポート
今回の場合
localhost:15432
↓
SSHトンネル
↓
RDS:5432
このコマンドを実行すると、
localhost:15432へのアクセスはAWS環境の<your-host>:5432へ接続されます。
※最初は以下のような確認メッセージが表示されます
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
③Mainタブの修正
①Mainタブに移動します。
②「Host」はlocalhostにします。
③「Port」は15432にします(被らなければ他でも大丈夫です。ただしSSH接続コマンドに合わせる必要があります)
④⑤このへんの値は修正しなくて大丈夫です。
⑥接続テストを行います。
無事に接続できました!「finish」を押して接続を完了します。
テーブルの中身も確認できました!
今回は以上になります!
最後までお読みいただきありがとうございました。



















