現在の構成
ローカルから踏み台サーバを経由してRDSに接続できるようになっています。
やりたいこと
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転送
をクリック
次に、ポート転送の追加をクリック
ローカルのポート:3306
リモート側のホスト:RDSのエンドポイント
ポート:3306
を入力してOK
3. MySQL WorkBenchで接続する
WorkBenchでは丸の3つを入力すれば接続できます。
4. javascriptのコードから確認
db.jsを作成して、node db.js
で動かしてみます
ポートは3100番を開けていて
http://localhost:3100/data
にアクセスすると正常に取得することができました。
また、TeraTerm(SSH)の接続を切ると取得することができなくなるので、セキュリティ面でもメリットがあると思います
コード↓
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!");
});