Java クライアントを使用して Neptune DB インスタンスに接続する - Amazon Neptune

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Java クライアントを使用して Neptune DB インスタンスに接続する

次のセクションでは、Neptune DB インスタンスに接続し、Apache TinkerPop Gremlin クライアントを使用して Gremlin トラバーサルを実行する完全な Java サンプルの実行について説明します。

これらの手順は、Neptune DB EC2インスタンスと同じ仮想プライベートクラウド (VPC) の Amazon インスタンスから実行する必要があります。

Java を使用して Neptune に接続するには
  1. EC2インスタンスに Apache Maven をインストールします。最初に、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

    続いて、yum を使用して Maven をインストールします。

    sudo yum install -y apache-maven
  2. Java をインストールします。Gremlin ライブラリには Java 8 または 11 が必要です。Java 11 は以下のようにインストールできます。

    • Amazon Linux 2 (AL2) を使用している場合:

      sudo amazon-linux-extras install java-openjdk11
    • Amazon Linux 2023 (AL2023) を使用している場合:

      sudo yum install java-11-amazon-corretto-devel
    • 他のディストリビューションでは、以下のうち適切なものを使用してください。

      sudo yum install java-11-openjdk-devel

      または

      sudo apt-get install openjdk-11-jdk
  3. Java 11 をEC2インスタンスのデフォルトのランタイムとして設定する: 以下を入力して、EC2インスタンスのデフォルトのランタイムとして Java 8 を設定します。

    sudo /usr/sbin/alternatives --config java

    プロンプトが表示されたら、Java 11 の数を入力します。

  4. gremlinjava という名前の新しいディレクトリを作成します。

    mkdir gremlinjava cd gremlinjava
  5. gremlinjava ディレクトリで pom.xml ファイルを作成してから、テキストエディタで開きます。

    nano pom.xml
  6. 以下の内容を pom.xml ファイルにコピーして保存します。

    <project xmlns="https://maven.apache.org/POM/4.0.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd"> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <modelVersion>4.0.0</modelVersion> <groupId>com.amazonaws</groupId> <artifactId>GremlinExample</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <name>GremlinExample</name> <url>https://maven.apache.org</url> <dependencies> <dependency> <groupId>org.apache.tinkerpop</groupId> <artifactId>gremlin-driver</artifactId> <version>3.6.5</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.tinkerpop/gremlin-groovy (Not needed for TinkerPop version 3.5.2 and up) <dependency> <groupId>org.apache.tinkerpop</groupId> <artifactId>gremlin-groovy</artifactId> <version>3.6.5</version> </dependency> --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-jdk14</artifactId> <version>1.7.25</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.5.1</version> <configuration> <source>11</source> <target>11</target> </configuration> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.3</version> <configuration> <executable>java</executable> <arguments> <argument>-classpath</argument> <classpath/> <argument>com.amazonaws.App</argument> </arguments> <mainClass>com.amazonaws.App</mainClass> <complianceLevel>1.11</complianceLevel> <killAfter>-1</killAfter> </configuration> </plugin> </plugins> </build> </project>
    注記

    既存の Maven プロジェクトを変更する場合、必要な依存関係が前述のコードにおいて強調表示されます。

  7. コマンドラインで次のように入力して、ソースコード例 (src/main/java/com/amazonaws/) のサブディレクトリを作成します。

    mkdir -p src/main/java/com/amazonaws/
  8. src/main/java/com/amazonaws/ ディレクトリで App.java という名前のファイルを作成してから、テキストエディタで開きます。

    nano src/main/java/com/amazonaws/App.java
  9. App.java ファイルに次の内容をコピーします。置換 your-neptune-endpoint Neptune DB インスタンスのアドレス。addContactPoint メソッドに https:// プレフィックスを含めることはできません

    注記

    Neptune DB インスタンスのホスト名を見つける方法については、Amazon Neptune エンドポイントに接続する を参照してください。

    package com.amazonaws; import org.apache.tinkerpop.gremlin.driver.Cluster; import org.apache.tinkerpop.gremlin.driver.Client; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; import static org.apache.tinkerpop.gremlin.process.traversal.AnonymousTraversalSource.traversal; import org.apache.tinkerpop.gremlin.driver.remote.DriverRemoteConnection; import org.apache.tinkerpop.gremlin.structure.T; public class App { public static void main( String[] args ) { Cluster.Builder builder = Cluster.build(); builder.addContactPoint("your-neptune-endpoint"); builder.port(8182); builder.enableSsl(true); Cluster cluster = builder.create(); GraphTraversalSource g = traversal().withRemote(DriverRemoteConnection.using(cluster)); // Add a vertex. // Note that a Gremlin terminal step, e.g. iterate(), is required to make a request to the remote server. // The full list of Gremlin terminal steps is at https://tinkerpop.apache.org/docs/current/reference/#terminal-steps g.addV("Person").property("Name", "Justin").iterate(); // Add a vertex with a user-supplied ID. g.addV("Custom Label").property(T.id, "CustomId1").property("name", "Custom id vertex 1").iterate(); g.addV("Custom Label").property(T.id, "CustomId2").property("name", "Custom id vertex 2").iterate(); g.addE("Edge Label").from(__.V("CustomId1")).to(__.V("CustomId2")).iterate(); // This gets the vertices, only. GraphTraversal t = g.V().limit(3).elementMap(); t.forEachRemaining( e -> System.out.println(t.toList()) ); cluster.close(); } }

    SSL/TLS (必須) を使用して Neptune に接続する方法については、「」を参照してくださいSSL/TLS 設定

  10. 次の Maven コマンドを使用してサンプルをコンパイルおよび実行します。

    mvn compile exec:exec

前述の例では、g.V().limit(3).elementMap() トラバーサルを使用して最初の 2 つの頂点の各プロパティのキーと値のマップを返します。その他の対象にクエリを実行するには、いずれかの適切な終了メソッドを持つ Gremlin トラバーサルで置き換えます。

注記

Gremlin クエリの最後の部分、.toList() では、評価のためにトラバーサルをサーバーに送信する必要があります。そのメソッドまたは別の同等のメソッドを含めない場合、クエリは Neptune DB インスタンスに送信されません。

addV( ) ステップの使用時などの頂点またはエッジを追加するときに、適切な終点を追加する必要もあります。

以下のメソッドは Neptune DB インスタンスにクエリを送信します。

  • toList()

  • toSet()

  • next()

  • nextTraverser()

  • iterate()

SSLGremlin Java クライアントの /TLS 設定

Neptune では、デフォルトで SSL/TLS を有効にする必要があります。通常、Java ドライバーが enableSsl(true) で設定されている場合、証明書のローカルコピーで trustStore() または keyStore() を設定しなくても、Neptune に接続できます。以前のバージョンの では、 を使用してローカルkeyCertChainFile()に保存された.pemファイルを設定することが TinkerPop 推奨されていますが、3.5.x 以降は非推奨になり、使用できなくなります。このセットアップをパブリック証明書で使用していた場合は、SFSRootCAG2.pem を使用して、ローカルコピーを削除できるようになりました。

ただし、接続先のインスタンスがパブリック証明書を検証するためのインターネット接続を持っていない場合や、使用している証明書がパブリックでない場合は、次の手順を実行してローカル証明書のコピーを設定できます。

SSL/ を有効にするためのローカル証明書コピーの設定TLS
  1. Oracle から keytool をダウンロードしてインストールします。これにより、ローカルキーストアのセットアップが大幅に簡単になります。

  2. SFSRootCAG2.pemCA 証明書をダウンロードします (Gremlin Java では、リモート証明書を検証するための証明書SDKが必要です)。

    wget https://www.amazontrust.com/repository/SFSRootCAG2.pem
  3. キーストアを JKSまたは PKCS12形式で作成します。この例では JKS を使用します。プロンプトが表示されたら、次の質問に答えます。ここで作成したパスワードは後で必要になります。

    keytool -genkey -alias (host name) -keyalg RSA -keystore server.jks
  4. ダウンロードした SFSRootCAG2.pem ファイルを、新しく作成したキーストアにインポートします。

    keytool -import -keystore server.jks -file .pem
  5. Cluster オブジェクトをプログラムで設定します。

    Cluster cluster = Cluster.build("(your neptune endpoint)") .port(8182) .enableSSL(true) .keyStore(‘server.jks’) .keyStorePassword("(the password from step 2)") .create();

    Gremlin コンソールの場合と同じように、必要に応じて設定ファイルでも同じことを行うことができます。

    hosts: [(your neptune endpoint)] port: 8182 connectionPool: { enableSsl: true, keyStore: server.jks, keyStorePassword: (the password from step 2) } serializer: { className: org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1, config: { serializeResultToString: true }}