C# で踏み台サーバー経由で RDS for MySQLに接続する方法

概要

ローカル開発マシンから、C#を使用してSSHでBastion(踏み台)サーバーに接続し、ポートフォワードしてRDS for MySQLに接続してデータを取得する方法について説明します。
ポートフォワードの部分の設定が理解できなくて設定に迷って手間取ったのでした。
ポートフォワード元と先に何を設定すべきか。。。

設定手順

  1. Visual Studio で「プロジェクト」 → 「Nugetパッケージの管理」を選択する。
  2. 「mysql.data」と「ssh.net」をインストールする。
    • image.png
    • image.png
  3. SSHでAWSのBastionサーバー(踏み台)に接続し、ポートフォワードでRDS fro MySQL に接続する。
var pkFile = new PrivateKeyFile(@"E:\aws.pem", "");
var connBuilder = new MySqlConnectionStringBuilder
{
    AllowBatch = true,
    Server = "127.0.0.1",
    Port = 3306,
    UserID = "hoge",
    Password = "foo",
    Database = "fuga"
};
using (var client = new SshClient("54.65.***.***", 22, "ec2-user", pkFile))
{
    client.Connect();
    var forward = new ForwardedPortLocal("127.0.0.1", 3306, "rds-mysql.****.ap-northeast-1.rds.amazonaws.com", 3306);
    client.AddForwardedPort(forward);
    forward.Start();
    using (var connection = new MySqlConnection(connBuilder.ConnectionString))
    {
        connection.Open();
        using (var com = new MySqlCommand("SELECT * FROM t_user limit 1", connection))
        {
            com.CommandType = CommandType.Text;
            var ds = new DataSet();
            var da = new MySqlDataAdapter(com);
            da.Fill(ds);
            foreach (DataRow drow in ds.Tables[0].Rows)
            {
                Debug.WriteLine("From MySql: " + drow[1].ToString());
            }
        }
        forward.Stop();
    }
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です