

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

# Java クライアントを使用して Neptune DB インスタンスに接続する
<a name="access-graph-gremlin-java"></a>

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

Neptune DB インスタンスと同じ仮想プライベートクラウド (VPC) の Amazon EC2 インスタンスからこれらの手順を実行してください。

**Java を使用して Neptune に接続するには**

1. Apache Maven を EC2 インスタンスにインストールします。Amazon Linux 2023 (推奨) を使用している場合は、以下の対象を使用します。

   ```
   sudo dnf update -y
   sudo dnf install maven -y
   ```

   Amazon Linux 2 を使用している場合は、[https://maven.apache.org/download.cgi:](https://maven.apache.org/download.cgi:) から最新のバイナリをダウンロードします。

   ```
   sudo yum remove maven -y
   wget https://dlcdn.apache.org/maven/maven-3/ <version>/binaries/apache-maven-<version>-bin.tar.gz
   sudo tar -xzf apache-maven-<version>-bin.tar.gz -C /opt/
   sudo ln -sf /opt/apache-maven-<version> /opt/maven
   echo 'export MAVEN_HOME=/opt/maven' >> ~/.bashrc
   echo 'export PATH=$MAVEN_HOME/bin:$PATH' >> ~/.bashrc
   source ~/.bashrc
   ```

1. **Java をインストールします。**Gremlin ライブラリには Java 8 または 11 が必要です。Java 11 は以下のようにインストールできます。
   + [Amazon Linux 2 (AL2)](https://aws.amazon.com/amazon-linux-2) を使用している場合:

     ```
     sudo amazon-linux-extras install java-openjdk11
     ```
   + [Amazon Linux 2023 (AL2023)](https://docs.aws.amazon.com/linux/al2023/ug/what-is-amazon-linux.html) を使用している場合:

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

     ```
     sudo yum install java-11-openjdk-devel
     ```

     または

     ```
     sudo apt-get install openjdk-11-jdk
     ```

1. **Java 11 を EC2 インスタンスのデフォルトランタイムとして設定:** 以下を入力して、Java 8 を EC2 インスタンスのデフォルトランタイムとして設定します。

   ```
   sudo /usr/sbin/alternatives --config java
   ```

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

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

   ```
   mkdir gremlinjava
   cd gremlinjava
   ```

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

   ```
   nano pom.xml
   ```

1. 以下の内容を `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.7.2</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 プロジェクトを変更する場合、必要な依存関係が前述のコードにおいて強調表示されます。

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

   ```
   mkdir -p src/main/java/com/amazonaws/
   ```

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

   ```
   nano src/main/java/com/amazonaws/App.java
   ```

1. `App.java` ファイルに次の内容をコピーします。*your-neptune-endpoint* を Neptune DB インスタンスのアドレスで置き換えます。`addContactPoint` メソッドに `https://` プレフィックスを含めることは*できません*。
**注記**  
Neptune DB インスタンスのホスト名を見つける方法については、[Amazon Neptune エンドポイントに接続する](feature-overview-endpoints.md) を参照してください。

   ```
   package com.amazonaws;
   import org.apache.tinkerpop.gremlin.driver.Cluster;
   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.process.traversal.dsl.graph.__;
   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 設定](#access-graph-gremlin-java-ssl)」を参照してください。

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

   ```
   mvn compile exec:exec
   ```

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

**注記**  
Gremlin クエリの最後の部分、`.toList()` では、評価のためにトラバーサルをサーバーに送信する必要があります。そのメソッドまたは別の同等のメソッドを含めない場合、クエリは Neptune DB インスタンスに送信されません。  
`addV( )` ステップの使用時などの頂点またはエッジを追加するときに、適切な終点を追加する必要もあります。

以下のメソッドは Neptune DB インスタンスにクエリを送信します。
+ `toList()`
+ `toSet()`
+ `next()`
+ `nextTraverser()`
+ `iterate()`

## Gremlin Java クライアントの SSL/TLS 設定
<a name="access-graph-gremlin-java-ssl"></a>

Neptune では、SSL/TLS をデフォルトで有効にする必要があります。通常、Java ドライバーが `enableSsl(true)` で設定されている場合、証明書のローカルコピーで `trustStore()` または `keyStore()` を設定しなくても、Neptune に接続できます。

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

**SSL/TLS を有効にするためのローカル証明書コピーの設定**

1. Oracle から [keytool](https://docs.oracle.com/javase/9/tools/keytool.htm#JSWOR-GUID-5990A2E4-78E3-47B7-AE75-6D1826259549) をダウンロードしてインストールします。これにより、ローカルキーストアのセットアップが大幅に簡単になります。

1. `SFSRootCAG2.pem` CA 証明書をダウンロードします (Gremlin Java SDK には、リモート証明書を検証する証明書が必要です)。

   ```
   wget https://www.amazontrust.com/repository/SFSRootCAG2.pem
   ```

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

   ```
   keytool -genkey -alias (host name) -keyalg RSA -keystore server.jks
   ```

1. ダウンロードした `SFSRootCAG2.pem` ファイルを、新しく作成したキーストアにインポートします。

   ```
   keytool -import -keystore server.jks -file .pem
   ```

1. `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.util.ser.GraphBinaryMessageSerializerV1, config: { serializeResultToString: true }}
   ```

## IAM 認証
<a name="access-graph-gremlin-java-iam"></a>

Neptune は、DB クラスターへのアクセスを制御するための [IAM 認証](iam-auth-enable.md)をサポートしています。IAM 認証が有効になっている場合は、署名バージョン 4 の署名を使用してリクエストを認証する必要があります。Java クライアントから接続するための詳細な手順とコード例については、「」を参照してください[Gremlin Java による IAM を使用した Amazon Neptune データベースへの接続](iam-auth-connecting-gremlin-java.md)。