0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Redshiftでクラスター作成からローカルeclipseでSQL実行まで試した手順

Last updated at Posted at 2022-07-17

やってみたこと

AWS Redshift(無料トライアル)を利用してクラスターを作成し、ローカル環境のeclipseから
簡易Javaプログラム(JDBC経由)でSQL文の実行まで確認した手順を残したいと思います。

前提条件

  • Redshift
    • 無料トライアル版
  • eclipse
    • Version: 2021-06 (4.20.0)
    • Java11
    • JDBCドライバ(後述のJDBCドライバーを取得部分を参照)を利用してJavaからRedshiftに接続

Redshiftでクラスター作成

以下の手順にて、クラスターを作成します。
※体感ですが、10分程かかった気がします。
クラスタ作成①.PNG
クラスタ作成②.PNG

JDBCドライバーを取得

「Amazon Redshift」から「クラスター」を選択し、「▼ Redshiftクラスターへの接続」から
JDBCドライバーを取得する。
JDBCドライバ取得.PNG

ローカル環境向け、Redshiftパブリックアクセス設定

初期クラスター作成時はパブリックアクセスが許可されていないため、パブリックアクセスを許可します。
① 「Amazon Redshift」から「クラスター」を選択する。
 作成したクラスター名のリンクをクリック → 「アクション ▼」リンクから『パブリックアクセス可能な設定を変更』を選択。
パブリックアクセス設定①.PNG
② パブリックアクセス可能を有効化を選択し、「変更を保存」リンクをクリック。
※有効化になるまで、こちらも体感で10分程かかったような気がします。
パブリックアクセス設定②.PNG
③ ネットワークとセキュリティの設定でパブリックアクセス可能が有効化になっていればOK。
image.png

VPCセキュリティグループ設定

セキュリティグループのインバウンドルールにRedshiftを追加します。
① ネットワークとセキュリティの設定で「VPC セキュリティグループ」のリンクをクリック。
セキュリティグループ設定①.PNG
② インバウンドルールを編集し、Redshift設定を追加します。
セキュリティグループ設定②.PNG
参考:インバウンドのルールを編集
セキュリティグループ設定③.PNG

クエリエディタv2画面より、Javaから実行するSQLを確認

クエリエディタv2.PNG

Javaソースコード

import文は割愛
public class RedshiftSample {
	public static final String jdbcUrl = "[参考:JDBC URLの部分]";
	public static final String user = "[クラスター作成時の管理者ユーザー名]";
	public static final String password = "[クラスター作成時の管理者ユーザーパスワード]";
	Properties prop = new Properties();

	public static void main(String[] args) {
		RedshiftSample s = new RedshiftSample();
		s.init();
		s.execute();
	}

	public void init() {
		prop.setProperty("user", user);
		prop.setProperty("password", password);
	}

	public void execute() {
		try (Connection con = DriverManager.getConnection(jdbcUrl, prop)) {
			Class.forName("com.amazon.redshift.jdbc42.Driver"); // JDBC 4.2 互換ドライバー
			Statement st = con.createStatement();
			ResultSet rs = st.executeQuery("SELECT userid FROM USERS WHERE userid < 10 ORDER BY userid;");

			while (rs.next()) {
				String userid = rs.getString("userid");
				System.out.println("*** userid[" +userid +"]");
			}
		} catch (SQLException | ClassNotFoundException e) {
            e.printStackTrace();
		}
	}
}

参考:JDBC URL

参考:JDBC URL.PNG

Java実行結果

Java実行結果.PNG

お試しでハマった内容(備忘録)

AWSの知識がそこまで無かったため、Redshiftの初回クラスター作成後にパブリックアクセス可能を無効な状態で
ローカルeclipseからJava実行し、Redshiftとのコネクション失敗にハマりました・・・。

参考:Java実行時エラーログ

java.sql.SQLException: 接続試行は失敗しました	
	at com.amazon.redshift.util.RedshiftException.getSQLException(RedshiftException.java:48)
	at com.amazon.redshift.Driver.connect(Driver.java:303)
	at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:677)
	at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:228)
	at jp.co.my.redshift.RedshiftSample.execute2(RedshiftSample.java:57)
	at jp.co.my.redshift.RedshiftSample.main(RedshiftSample.java:20)
Caused by: java.net.SocketTimeoutException: connect timed out	
	at java.base/java.net.PlainSocketImpl.waitForConnect(Native Method)
	at java.base/java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:107)
	at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399)
	at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:242)
	at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:224)
	at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
	at java.base/java.net.Socket.connect(Socket.java:609)
	at com.amazon.redshift.core.RedshiftStream.<init>(RedshiftStream.java:86)
	at com.amazon.redshift.core.v3.ConnectionFactoryImpl.tryConnect(ConnectionFactoryImpl.java:101)
	at com.amazon.redshift.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:214)
	at com.amazon.redshift.core.ConnectionFactory.openConnection(ConnectionFactory.java:51)
	at com.amazon.redshift.jdbc.RedshiftConnectionImpl.<init>(RedshiftConnectionImpl.java:288)
	at com.amazon.redshift.Driver.makeConnection(Driver.java:466)
	at com.amazon.redshift.Driver.connect(Driver.java:279)
	... 4 more
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?