概要
ローカル開発マシンから、C#を使用してSSHでBastion(踏み台)サーバーに接続し、ポートフォワードしてRDS for MySQLに接続してデータを取得する方法について説明します。
ポートフォワードの部分の設定が理解できなくて設定に迷って手間取ったのでした。
ポートフォワード元と先に何を設定すべきか。。。
設定手順
- Visual Studio で「プロジェクト」 → 「Nugetパッケージの管理」を選択する。
- 「mysql.data」と「ssh.net」をインストールする。
- 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();
}
}