3
2

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】ローカルからプライベートサブネットにあるRDSに接続したい

Posted at

現在の構成

ローカルから踏み台サーバを経由してRDSに接続できるようになっています。
image.png

やりたいこと

javascriptでDB(MySQL)のコネクションを作ってデータをローカルで取得したい

現状だとRDSはプライベートサブネットにあるのでアクセスできない。
アクセスしようとするとエラーをはかれる

やること

SSHポートフォワーディングをする
1. EC2,RDSのセキュリティグループの設定

  • EC2のセキュリティグループ 仮セキュリティグループ名:EC2-sg
タイプ プロトコル ポート範囲 ソース
SSH TCP 22 カスタム 0.0.0.0/0
  • RDSのセキュリティグループ 仮セキュリティグループ名:RDS-sg
タイプ プロトコル ポート範囲 ソース
MySQL/Aurora TCP 3306 カスタム EC2-sg

EC2のセキュリティグループを指定します。

2. TeraTermを使ってポートフォワーディングする
TeraTermにSSH接続をします。
その後、設定からSSH転送をクリック

image.png

次に、ポート転送の追加をクリック
ローカルのポート:3306
リモート側のホスト:RDSのエンドポイント
ポート:3306
を入力してOK

image.png

3. MySQL WorkBenchで接続する
WorkBenchでは丸の3つを入力すれば接続できます。

image.png

4. javascriptのコードから確認
db.jsを作成して、node db.jsで動かしてみます

ポートは3100番を開けていて
http://localhost:3100/data
にアクセスすると正常に取得することができました。

また、TeraTerm(SSH)の接続を切ると取得することができなくなるので、セキュリティ面でもメリットがあると思います

コード↓

db.js
const mysql = require("mysql");
const express = require("express");
const app = express();

const connection = mysql.createConnection({
  user: "admin",
  password: "***",
  database: "***",
});

app.get("/data", function (req, res) {
  connection.connect(function (err) {
    if (err) throw err;
    connection.query(
      "SELECT * FROM DB名.テーブル名",
      function (err, result, fields) {
        if (err) throw err;
        res.json(result);
      }
    );
  });
});

app.listen(3100, function () {
  console.log("API listening on port 3100!");
});

参考

RDSにSSHポートフォワーディングを利用して接続してみた

3
2
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
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?