GridDB クラウド v1.6の紹介 -- オンプレミスとの接続

WebベースのGridDBクラウドサービスがバージョン1.6にアップデートされ、GridDB CE 5.2がその基盤となりました。GridDBクラウドについては、以前にも[GridDBクラウドの紹介][1]や[GridDB クラウド Version 1.2 の紹介][2]で紹介しました。

この記事では、GridDBクラウドの新バージョンによってもたらされた新機能、すなわちクラウドと直接接続する新しい方法について解説します。これまでは、オンラインの[クラウド仮想ネットワーク][3]を使わずにGridDBクラウドにアクセスする唯一の方法は[Web API][4]でした。Web APIを利用することで、GETやPOSTのHTTPリクエストを行い、空のGridDBデータベースサーバにデータをPUTすることができます。この方法を使えば、Web APIを通じてSQLやTQLコマンドを実行することもできます。

バージョン1.6の登場により、GridDBクラウドにはJava、JDBC、ODBC、C言語を使ってローカルマシンからアクセスすることが出来るようになりました。この記事では、Java、そしてJDBCを使ってクラウドに接続するセットアップ方法と簡単な例について説明します。

```sh
$ git clone https://github.com/griddbnet/Blogs.git --branch griddb_cloud_1.6
```

## GridDBクラウドの設定管理

まず、クラウドのポータルのネットワーク部分にアクセスする必要があります。 そこで新しい設定を見ることができるのが 「GridDBアクセス」です。 このパネルでパブリックIPアドレスを例外リストに追加して、クラウドのファイアウォールを通過するためのわずかなスペースを作ることが出来ます。

[<img src="https://griddb.net/en/wp-content/uploads/2023/04/griddb_access.png" alt="" width="1104" height="539" class="aligncenter size-full wp-image-29531" />][5]

それが終わったら、サポートセクションに行き、必要な`.jar`ファイルをローカルマシンの環境にダウンロードしましょう。サポートページより、"GridDB Cloud Library and Plugin download "という見出しのファイルをダウンロードします。

この`.zip`ファイルには様々なファイルが含まれていますが、この記事に関連するファイルはJDBCフォルダの中にあります。ここから、`gridstore-5.2.0.jar`、`gridstore-jdbc-5.2.0.jar`、`gridstore-advanced-5.2.0.jar`が必要になります。

これらをダウンロードしたら、`$CLASSPATH`環境に追加し、Javaコマンドを実行するときに、これらの新しいAPIにアクセス出来るようにします。

## Javaでクラウドに接続する

始める前に、これらの`.jar`ファイルをCLASSPATHに追加しましょう。

```sh
export CLASSPATH=${CLASSPATH}:$PWD/gridstore-5.2.0.jar
export CLASSPATH=${CLASSPATH}:$PWD/gridstore-jdbc-5.2.0.jar
export CLASSPATH=${CLASSPATH}:$PWD/gridstore-advanced-5.2.0.jar
```

そして、GridDBクラウドサーバーと接続するためのJavaコードを書きます。

この記事の主旨ではないので、ソースコードについてはあまり触れないことにします。その代わりに、関連するコードスニペットについて説明します。

### 通知プロバイダー

Java経由で接続するには、GridDB通知プロバイダ・メソッドを使用します。これは、GridDBクラウドが通知プロバイダのURLを提供してくれるからで、これをGridDB Store変数に差し込むだけで良いのです。

GridBクラウドポータルに、「Notification Provider URL for external connection」という URL があります。そのURLをコピーしてJavaコード内で使用してください。

```java
String provider = "https://dbaasshareextconsta.blob.core.windows.net/dbaas-share-extcon-blob/trial1602.json?sv=2015-04-05&sr=b&st=2023-03-14T00%3A00%3A00.00Z&se=2073-03-14T00%3A00%3A00.0000000Z&sp=r&sig=h2VJ0xAqsnfdgfgdfgRsqWVgfgfg5CAS66RifPIZ1PDCJ0x%2FiXb2FOhA%3D";

Properties props = new Properties();
props.setProperty("notificationProvider", provider);
props.setProperty("clusterName", "clustername");
props.setProperty("user", "admin");
props.setProperty("password", "admin");
props.setProperty("database", "israel_db");
props.setProperty("sslMode", "PREFERRED");
props.setProperty("connectionRoute", "PUBLIC");
store = GridStoreFactory.getInstance().getGridStore(props);
```

通常FIXED_LISTを接続方式に使用する場合、notificationMemberを使用せず、notificationProviderを使用していることが分かりますが、それ以外にはプロパティに大きな変更はありません。

他の大きな*必須*の変更は、一番下にある `sslMode` と `connectionRoute` プロパティ・キーにあります。これらはSSLで保護されたウェブアドレスを使用するために必要です。これは、SSLがPREFERREDであり、connectionRouteがPUBLICであることを接続に伝える必要があることを意味します。

問題がなければ、Javaコードを実行すれば、GridDBクラウドに変更が反映されます。このコードを自分のマシンで実行したい場合は、もちろんGitHubページ（上記リンク）をチェックアウトして、認証情報とURLを使って自分のマシンでコードを実行できます。

```sh
$ javac *.java
$ java SimulateData 10 3
```

簡単なデモを紹介するために、ここで実行しているコードはJava用のIoTデータをシミュレートしています。つまり、ランダムなデータを入れたさまざまなコンテナをクラウドに配置しているのです。そして案の定、クラウドをチェックアウトすると、コンテナがデータとともに表示されます。

[<img src="https://griddb.net/en/wp-content/uploads/2023/04/query.png" alt="" width="1784" height="1185" class="aligncenter size-full wp-image-29529" />][6]

## JDBCを使用したGridDBクラウドへの接続

もちろん、GridDBでJDBCを使えば、SQLをフルに使うことができます。そして幸運なことに、クラウドに接続するためにJDBCを使用することは、Javaを使用することとほぼ同じなのです。主な違いは、`jdbc jar`をCLASSPATHにインクルードする必要があることと（すでにインクルード済み）、`jdbc url`を構築する必要があることです。

```java
try {
    String provider = "https://dbaasshareextconsta.blob.core.windows.net/dbaas-share-extcon-blob/trial1602.json?sv=2015-04-05&sr=b&st=2023-03-14T00%3A00%3A00.00Z&se=2073-03-14T00%3A00%3A00.0000000Z&sp=r&sig=h2VJ0xAqsnfdgfgdfgRsqWVgfgfg5CAS66RifPIZ1PDCJ0x%2FiXb2FOhA%3D";
    String encodeProviderUrl = URLEncoder.encode(provider, "UTF-8");
    String clusterName = "clustername";
    String encodeClusterName = URLEncoder.encode(clusterName, "UTF-8");
    String databaseName = "public";
    String encodeDatabaseName = URLEncoder.encode(databaseName, "UTF-8");
    String ssl = "&sslMode=VERIFY"; //Necessary
    String encodeSsl = URLEncoder.encode(ssl, "UTF-8");

    Properties props = new Properties();
    String jdbcUrl = "jdbc:gs:///" + encodeClusterName + "/" + encodeDatabaseName + "?notificationProvider="+encodeProviderUrl + encodeSsl;
    props.setProperty("user", "admin");
    props.setProperty("password", "admin");
    props.setProperty("loginTimeout", "60");
    props.setProperty("connectionRoute", "PUBLIC"); //Also a new necessary props for this

    System.out.println(jdbcUrl);
    conn = DriverManager.getConnection(jdbcUrl, props );
    System.out.println("Sucessfully connected!");

} catch (Exception e) {
    System.out.println("error connecting to DB: "+e);
}
```

完全なURLは次のようになります。

    jdbc:gs:///gs_clustertrial1602/public?notificationProvider=https%3A%2F%2Fdbaasshareextconsta.blob.core.windows.net%2Fdbaas-share-extcon-blob%2Ftrial1602.json%3Fsv%3D2015-04-05%26sr%3Db%26st%3D2023-03-14T00%253A00%253A00.0000000Z%26se%3D2073-03-14T00%2500%253A00.0Z%26sp%3Dr%26sig%3Dh2VJ0xAqsqWV5CAS66RifPIZ1PDCJ0x%252F2FOhA%253D%26sslMode%3DVERIFY
    

このJDBC URLを作成する際には、必ず`sslMode`を`PREFERRED`の値でURLに含め、さらに`connectionRoute`を`PREFERRED`の値で含める必要があります。

すべての情報がOKになると、あなたがファイル（"griddb-jdbc.properties"）に含めることを選んだSQLコードがクラウド上で実行されます。今回は、クラウド上に一連の[tpchテーブル][7]を作りました。

[<img src="https://griddb.net/en/wp-content/uploads/2023/04/tpch_tables.png" alt="" width="1848" height="797" class="aligncenter size-full wp-image-29530" />][8]

gridstore-jdbc.propertiesファイルの内容を好きなSQLの内容に変更するだけです。

## 結論

これで、ローカルマシンをGridDBクラウドのインスタンスに直接接続することに成功しました。GridDBクラウドをセットアップして使うことにより、サーバーの管理を心配する必要がなくなり、Javaアプリケーションを書くだけで、GridDBの素晴らしいパワーをフルに活用することができます。

 [1]: https://griddb.net/ja/blog/an-introduction-to-griddb-cloud/
 [2]: https://griddb.net/ja/blog/using-griddb-cloud-version-1-2/
 [3]: https://learn.microsoft.com/ja-jp/azure/virtual-network/virtual-networks-overview
 [4]: https://github.com/griddb/webapi
 [5]: https://griddb.net/en/wp-content/uploads/2023/04/griddb_access.png
 [6]: https://griddb.net/en/wp-content/uploads/2023/04/query.png
 [7]: https://github.com/dragansah/tpch-dbgen
 [8]: https://griddb.net/en/wp-content/uploads/2023/04/tpch_tables.png