自宅からAWS RDSへ直接接続する


概要

開発中アプリの動作確認のためにAWS RDSに作成したデータベースへ直接接続したかった。

自宅 → EC2 → RDS

とEC2を踏み台にする方法はすぐ見つかったが、

自宅 → RDS

と直接接続する方法を探すのに少し手こずったので、メモしておく。

※あくまでデバッグ用なので、用が済んだら自宅からのアクセス権は剥奪しておく方がよいかも。

RDSの設定 (パブリックアクセシビリティ)

もうデータベースは作成済みとして説明する。

まずはデータベースをパブリックアクセスできるようにする。
これをしてもすぐに誰でもアクセスできるようになるわけではないから大丈夫。

Amazon RDSのデータベースを開き、データベース一覧の左のラジオボタンで選択して変更ボタンを押す。
設定変更画面が開く。
※停止している場合、変更ボタンが押せないかもしれないので、そういう場合は起動して利用可能になるまで待つ。

ネットワーク & セキュリティの欄にあるパブリックアクセシビリティはいに設定して、変更を適用する。
データベースが落ちたりしても問題なければ、変更のスケジュールすぐに適用を選択してしまえば、変更がすぐに適用される。

RDSの設定 (セキュリティグループ)

次にセキュリティグループの設定を変更して、自宅のIPアドレスからアクセスできるようにする。
ここを適当に設定してしまうと誰でもウェルカムになってしまうから気をつけて。

再びAmazon RDSのデータベースを開き、データベース一覧のアクセスしたいデータベース名をクリックして、メニューを開く。
接続とセキュリティタブのセキュリティグループのルール欄に、現在データベースが所属しているセキュリティグループが表示されている。
今回は既存のセキュリティグループに自宅IPからのアクセス許可を追加してしまおうと思う。
セキュリティグループ名をクリック。

続いて開くセキュリティグループ一覧で、先程データベースが所属していたセキュリティグループのどれかにチェックを入れ、インバウンドルールの編集を開く。

ルールの追加を押し、タイプはMYSQL/Auroraを選択、ソースに自宅のIPアドレス/32を入力してルールの保存をする。
※自宅のIPアドレスは確認くんなどで調べる。

ここまででAWS RDSの設定は完了。自宅から直接アクセスできるようになった。

アクセス例 (Node.jsを使用)

アクセスしてみる。
ちょうど今勉強中のNode.jsを使ってみる。
確認できれば別になんでもOK

import mysql from 'mysql';

const dbConfig = {
    host: process.env.RDS_HOSTNAME!,        // RDSのエンドポイント
    user: process.env.RDS_USERNAME!,        // RDSのユーザ名
    password: process.env.RDS_PASSWORD!,    // RDSのパスワード
    database: process.env.RDS_DATABASE!,    // 接続するデータベース名
    port: 3306,
}

const connection = mysql.createConnection(dbConfig);
connection.connect(err => {
    if (err) {
        console.error('connection failed: ' + err.stack);
        return;
    }
    console.log('connected.');
});
connection.end();
connected.

できたみたい。