Utilizzo di un client Java per connettersi a un'istanza database Neptune - Amazon Neptune

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Utilizzo di un client Java per connettersi a un'istanza database Neptune

La sezione seguente illustra l'esecuzione di un esempio Java completo che si connette a un'istanza DB di Neptune ed esegue un attraversamento di Gremlin utilizzando il client Apache Gremlin. TinkerPop

Queste istruzioni devono essere seguite da un'EC2istanza Amazon nello stesso cloud privato virtuale (VPC) dell'istanza Neptune DB.

Per connettersi a Neptune tramite Java
  1. Installa Apache Maven sulla tua istanza. EC2 Per aggiungere un archivio con un pacchetto Maven, immettere prima quanto segue:

    sudo wget https://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo

    Per impostare il numero di versione per i pacchetti, immettere quanto segue.

    sudo sed -i s/\$releasever/6/g /etc/yum.repos.d/epel-apache-maven.repo

    Potrai quindi utilizzare yum per installare Maven:

    sudo yum install -y apache-maven
  2. Installare Java. Le librerie Gremlin richiedono Java 8 o 11. Puoi installare Java 11 nel modo seguente:

    • Se utilizzi Amazon Linux 2 (AL2):

      sudo amazon-linux-extras install java-openjdk11
    • Se utilizzi Amazon Linux 2023 (AL2023):

      sudo yum install java-11-amazon-corretto-devel
    • Per altre distribuzioni, usa l'opzione appropriata tra le seguenti:

      sudo yum install java-11-openjdk-devel

      oppure:

      sudo apt-get install openjdk-11-jdk
  3. Imposta Java 11 come runtime predefinito sulla tua EC2 istanza: inserisci quanto segue per impostare Java 8 come runtime predefinito sull'EC2istanza:

    sudo /usr/sbin/alternatives --config java

    Quando richiesto, immetti il numero per Java 11.

  4. Crea una nuova directory denominata gremlinjava:

    mkdir gremlinjava cd gremlinjava
  5. Nella directory gremlinjava, creare un file pom.xml, quindi aprirlo in un editor di testo:

    nano pom.xml
  6. Copiare quanto segue nel file pom.xml e salvare:

    <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>
    Nota

    Se stai modificando un progetto Maven esistente, la dipendenza necessaria è evidenziata nel codice precedente.

  7. Creare sottodirectory per il codice sorgente di esempio (src/main/java/com/amazonaws/) digitando quanto segue nella riga di comando:

    mkdir -p src/main/java/com/amazonaws/
  8. Nella directory src/main/java/com/amazonaws/, creare un file denominato App.java, quindi aprirlo in un editor di testo.

    nano src/main/java/com/amazonaws/App.java
  9. Copiare quanto segue nel file App.java. Replace (Sostituisci) your-neptune-endpoint con l'indirizzo della tua istanza DB di Neptune. Non includere il prefisso https:// nel metodo addContactPoint.

    Nota

    Per informazioni su come trovare il nome host dell'istanza database Neptune, consulta Connessione agli endpoint 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(); } }

    Per informazioni sulla connessione a Neptune SSL conTLS/(che è obbligatorio), vedere. SSL/configurazione TLS

  10. Compilare ed eseguire il campione usando il comando Maven seguente:

    mvn compile exec:exec

L'esempio precedente restituisce una mappa della chiave e i valori di ogni proprietà per i primi due vertici nel grafo utilizzando l'attraversamento g.V().limit(3).elementMap(). Per eseguire query per qualcos'altro, sostituirla con un altro attraversamento Gremlin con uno dei metodi finali appropriati.

Nota

La parte finale della query Gremlin, .toList() è obbligatoria per inviare l'attraversamento al server per la valutazione. Se non includi quel metodo o un altro metodo equivalente, la query non viene inviata all'istanza database Neptune.

È inoltre necessario aggiungere una chiusura appropriata quando si aggiunge un vertice o un arco, ad esempio quando si utilizza il passaggio addV( ).

I metodi riportati sotto inviano la query all'istanza database Neptune:

  • toList()

  • toSet()

  • next()

  • nextTraverser()

  • iterate()

SSL/TLSconfigurazione per il client Java Gremlin

Neptune SSL richiede cheTLS/sia abilitato per impostazione predefinita. In genere, se il driver Java è configurato con enableSsl(true), può connettersi a Neptune senza dover impostare trustStore() o keyStore() con una copia locale di un certificato. Nelle versioni precedenti era TinkerPop consigliato l'uso di keyCertChainFile() per configurare un .pem file memorizzato localmente, ma questa opzione è diventata obsoleta e non è più disponibile dopo la versione 3.5.x. Se stavi usando tale configurazione con un certificato pubblico, usando SFSRootCAG2.pem, ora puoi rimuovere la copia locale.

Tuttavia, se l'istanza con cui ti stai connettendo non dispone di una connessione Internet tramite la quale verificare un certificato pubblico o se il certificato che stai utilizzando non è pubblico, puoi effettuare le seguenti operazioni per configurare una copia locale del certificato:

Configurazione di una copia locale del certificato per abilitare/SSLTLS
  1. Scarica e installa keytool da Oracle. Ciò renderà molto più semplice la configurazione dell'archivio chiavi locale.

  2. Scarica il certificato SFSRootCAG2.pem CA (il Gremlin Java SDK richiede un certificato per verificare il certificato remoto):

    wget https://www.amazontrust.com/repository/SFSRootCAG2.pem
  3. Crea un archivio di chiavi in uno dei seguenti formati. JKS PKCS12 Questo esempio usa JKS. Rispondi alle domande che seguono al prompt. La password che crei qui sarà necessaria in seguito:

    keytool -genkey -alias (host name) -keyalg RSA -keystore server.jks
  4. Importa il file SFSRootCAG2.pem che hai scaricato nell'archivio chiavi appena creato:

    keytool -import -keystore server.jks -file .pem
  5. Configura l'oggetto Cluster a livello di codice:

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

    Si può fare la stessa cosa in un file di configurazione, come è possibile fare con la console 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 }}