Maven でビルドしたアプリから DataStax の Cassandra ドライバーを使って Amazon Keyspaces に CQL を投げてみた。
手順
サーバーサイド(KeySpaces)
- テーブルを作成する
- マネコンから Amazon Keyspaces のトップページから [Getting started] をクリック、ウイザードに従って tutorialkeyspace.tutorialtable テーブルを作成
- IAM ユーザーを作成する
- ユーザー名: keyspaces_user
- IAMポリシー: AmazonKeyspacesFullAccess
- 作成した IAM ユーザーで KeySpaces 用のクレデンシャルを作成する
- IAM ユーザーを選択、[Security credentials] タブ-[Generate credentials] をクリック、クレデンシャルをダウンロードする
- ★ 後で application.conf の advanced.auth-provider に記述する
- IAM ユーザーを選択、[Security credentials] タブ-[Generate credentials] をクリック、クレデンシャルをダウンロードする
クライアントサイド(EC2)
- JDK をインストールする
- Starfield デジタル証明書をダウンロードする
$ curl https://certs.secureserver.net/repository/sf-class2-root.crt -O
- Starfield デジタル証明書を trustStore ファイルに変換する
$ openssl x509 -outform der -in sf-class2-root.crt -out temp_file.der $ keytool -import -alias cassandra -keystore cassandra_truststore.jks -file temp_file.der Enter keystore password: <6文字以上のパスワードを入力> ★ 後で application.conf の truststore-password に記述する Re-enter new password: <同じパスワードを再入力> Trust this certificate? [no]: y
- Maven をインストールする
$ sudo wget https://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo $ sudo sed -i s/\$releasever/6/g /etc/yum.repos.d/epel-apache-maven.repo $ sudo yum install -y apache-maven
- Maven プロジェクトを作成する
$ mvn -B archetype:generate \ -DarchetypeGroupId=org.apache.maven.archetypes \ -DgroupId=com.keySpacesTest \ -DartifactId=keySpacesTest $ ls keySpacesTest
- cassandra_truststore.jks を keySpacesTest/src/main/resources 以下にコピーする
- keySpacesTest/src/main/resources/application.conf 作成
datastax-java-driver { basic.contact-points = [ "cassandra.ap-northeast-1.amazonaws.com:9142"] ★東京リージョンを利用するので ap-northeast-1 advanced.auth-provider{ class = PlainTextAuthProvider username = "<ダウンロードした IAM ユーザーのクレデンシャルのユーザー名>" password = "<ダウンロードした IAM ユーザーのクレデンシャルのパスワード>" } basic.load-balancing-policy { local-datacenter = "ap-northeast-1" ★東京リージョンを利用するので ap-northeast-1 slow-replica-avoidance = false } advanced.ssl-engine-factory { class = DefaultSslEngineFactory truststore-path = "./src/main/resources/cassandra_truststore.jks" truststore-password = "<Starfield デジタル証明書を trustStore ファイルに変換時に入力したパスワード>" hostname-validation = false } basic.request { consistency = LOCAL_QUORUM } }
- ファイル構成
$ ls -1 keySpacesTest/src/main/resources/ application.conf cassandra_truststore.jks
package com.keySpacesTest; import com.datastax.oss.driver.api.core.CqlSession; import com.datastax.oss.driver.api.core.config.DriverConfigLoader; import com.datastax.oss.driver.api.core.cql.BatchStatement; import com.datastax.oss.driver.api.core.cql.PreparedStatement; import com.datastax.oss.driver.api.core.cql.DefaultBatchType; public class App { public static void main( String[] args ) { System.out.println( "Start to insert 2 rows into Amazon KeySpaces ..." ); DriverConfigLoader loader = DriverConfigLoader.fromClasspath("application.conf"); try (CqlSession session = CqlSession.builder() .withConfigLoader(loader) .build()) { PreparedStatement prepared = session.prepare("insert into tutorialkeyspace.tutorialtable(age, name, email) values (?, ?, ?)"); BatchStatement batch = BatchStatement.newInstance(DefaultBatchType.UNLOGGED, prepared.bind(28,"Oyama","yusuke@oyama.jp"), prepared.bind(29,"Otani","shohei@otani.com") ); session.execute(batch); } System.out.println( "Finished successfully!" ); } }
- keySpacesTest/pom.xml を編集する
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.keySpacesTest</groupId> <artifactId>keySpacesTest</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <name>keySpacesTest</name> <url>http://maven.apache.org</url> <properties> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.1.1</version> <configuration> <appendAssemblyId>false</appendAssemblyId> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>com.keySpacesTest.App</mainClass> </manifest> </archive> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.1.1</version> <executions> <execution> <id>copy-dependencies</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> <mainClass>com.keySpacesTest.App</mainClass> </manifest> </archive> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>com.datastax.oss</groupId> <artifactId>java-driver-core</artifactId> <version>4.17.0</version> </dependency> <dependency> <groupId>com.datastax.oss</groupId> <artifactId>java-driver-query-builder</artifactId> <version>4.17.0</version> </dependency> <dependency> <groupId>com.datastax.oss</groupId> <artifactId>native-protocol</artifactId> <version>1.5.1</version> </dependency> <dependency> <groupId>com.datastax.cassandra</groupId> <artifactId>cassandra-driver-core</artifactId> <version>4.0.0</version> </dependency> </dependencies> </project>
- アプリケーションをビルドする
$ mvn clean $ mvn package
- アプリケーションを実行する
[ec2-user@ip-172-17-3-232 keySpacesTest]$ java -jar target/keySpacesTest-1.0-SNAPSHOT.jar Start to insert 2 rows into Amazon KeySpaces ... SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. Finished successfully!
- 実行結果
参考
- Cassandra Java クライアントドライバーを使用した Amazon Keyspaces へのプログラムアクセス - Amazon Keyspaces (Apache Cassandra 向け)
- Spark Cassandra Connectorを使って、Amazon Linux 2 から Amazon Keyspacesに接続してみた | DevelopersIO
- DataStax Java Driver for Apache Cassandra :: DataStax Driver Matrix
- Cassandra Java クライアントドライバーを使用した Amazon Keyspaces へのプログラムアクセス - Amazon Keyspaces (Apache Cassandra 向け)
- Mavenで実行可能jarをビルドする方法 - Qiita
- mavenでコマンドラインアプリ作成 - Qiita
- DataStax Java Driver - INSERT
- com.datastax.oss.driver.api.core.CqlSession Java Exaples
- サンプルで学ぶCassandraアプリケーションの作り方