複数の踏み台サーバ(AWS EC2)を経由したMySQL接続がしたい
AWS上にAPサーバー、DBサーバーを立てて、それを経由したDB接続を実装したいのですが、実装方法が分かりません。
以下のサイトを参考にEC2上のDBサーバ経由でMySQLに接続ができることは確認済みです。
しかし、AWS EC2の設定を、APサーバ⇒DBサーバー⇒MySQLのルートのみアクセスできるよう
設定したところ、接続ができなくなりました。(当たり前ですが。)
上記ルート(APサーバ⇒DBサーバー⇒MySQL)でDBからデータを取得するにはどう実装するのかご教示いただけると幸いです。
参考にしたサイト
該当のソースコード
Java
1import com.jcraft.jsch.JSch; 2import com.jcraft.jsch.JSchException; 3import com.jcraft.jsch.Session; 4 5import java.sql.*; 6 7public class TunnelTest { 8 // DBサーバー接続情報 9 String sshUser = "usename"; 10 String sshPassword = ""; 11 String sshHost = "xx.xx.xx.xx"; // DBサーバーのIPアドレス 12 int nSshPort = "22"; 13 14 // MySQL接続情報 15 String remoteHost = "xx.xx.xx.xx"; 16 String nLocalPort = "3306"; 17 String nRemotePort = "3306"; 18 19 public static void main(String[] args) throws ClassNotFoundException, SQLException, JSchException { 20 JSch jsch = new JSch(); 21 jsch.addIdentity("pemファイルのパス"); 22 23 Session session = jsch.getSession( sshUser, sshHost, nSshPort); 24 session.setPassword(sshPassword); 25 26 final Properties config = new Properties(); 27 config.put("StrictHostKeyChecking", "no"); 28 session.setConfig(config); 29 30 session.connect(); 31 32 try { 33 session.setPortForwardingL( nLocalPort, nRemotePort, remoteHost ); 34 Class.forName("com.mysql.cj.jdbc.Driver"); 35 Connection con = DriverManager.getConnection( 36 "jdbc:mysql://127.0.0.1:3306/test", 37 "usename", 38 "pw" 39 ); 40 41 try (Statement st = con.createStatement()) { 42 try (ResultSet resultSet = st.executeQuery("show databases")) { 43 while (resultSet.next()) { 44 System.out.println(resultSet.getString(1)); 45 } 46 } 47 } 48 } finally { 49 session.disconnect(); 50 } 51 } 52}
上記ソースにどのようなコードを追加して実装すべきか、
また、複数の踏み台サーバを経由するDB接続をしている記事など
参考になりそうなサイト等ありましたらご教示いただけると幸いです。
よろしくお願いいたします。
ここまでお読みいただきありがとうございました。
回答1件
あなたの回答
tips
プレビュー