Java 클라이언트를 사용하여 Neptune DB 인스턴스에 연결 - Amazon Neptune

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Java 클라이언트를 사용하여 Neptune DB 인스턴스에 연결

다음 섹션에서는 Neptune DB 인스턴스에 연결하고 Apache Gremlin 클라이언트를 사용하여 Gremlin 탐색을 수행하는 전체 Java 샘플을 실행하는 방법을 안내합니다. TinkerPop

이 지침은 Neptune EC2 DB 인스턴스와 동일한 가상 사설 클라우드 (VPC) 에 있는 Amazon 인스턴스에서 따라야 합니다.

Java를 사용하여 Neptune에 연결하려면
  1. 인스턴스에 Apache Maven을 설치합니다. EC2 먼저, 다음을 입력하여 리포지토리에 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
    • 아마존 리눅스 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 인스턴스의 기본 런타임으로 설정: 다음을 입력하여 Java 8을 EC2 인스턴스의 기본 런타임으로 설정합니다.

    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 파일로 복사합니다. Replace 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(); } }

    TLS/(필수) 를 사용하여 SSL Neptune에 연결하는 데 도움이 필요하면 을 참조하십시오. SSL/구성 TLS

  10. 다음 Maven 명령을 사용하여 샘플을 컴파일하고 실행합니다.

    mvn compile exec:exec

이전 예에서는 g.V().limit(3).elementMap() 순회를 사용하여 그래프의 처음 두 버텍스의 각 속성의 키와 값 맵을 반환했습니다. 다른 것을 쿼리하려면 해당하는 종료 메서드 중 하나를 사용하여 다른 Gremlin 순회로 바꿉니다.

참고

Gremlin 쿼리의 최종 부분 .toList()에서 순회를 서버로 제출하여 평가를 받아야 합니다. 이 메서드 또는 이와 유사한 메서드를 포함시키지 않는 경우에는 쿼리가 Neptune DB 인스턴스로 제출되지 않습니다.

또한 addV( ) 단계를 사용할 때와 같이 버텍스 또는 엣지를 추가할 때도 적절한 종료를 추가해야 합니다.

다음 메서드는 쿼리를 Neptune DB 인스턴스로 제출합니다.

  • toList()

  • toSet()

  • next()

  • nextTraverser()

  • iterate()

SSL그렘린 TLS 자바 클라이언트의/구성

Neptune은 기본적으로 TLS /를 SSL 활성화해야 합니다. 일반적으로 Java 드라이버가 enableSsl(true)로 구성된 경우 인증서의 로컬 사본으로 trustStore() 또는 keyStore()를 설정하지 않고도 Neptune에 연결할 수 있습니다. 이전 버전에서는 로컬에 저장된 .pem 파일을 구성할 때 를 사용하는 keyCertChainFile() 것이 좋지만 3.5.x 이후에는 더 이상 사용되지 않아 더 이상 사용할 수 없습니다. TinkerPop 퍼블릭 인증서와 함께 해당 설정을 사용했다면 이제 SFSRootCAG2.pem을 사용하여 로컬 사본을 제거할 수 있습니다.

하지만 연결 중인 인스턴스가 퍼블릭 인증서를 확인하는 데 사용할 수 있는 인터넷 연결이 없거나 사용 중인 인증서가 퍼블릭 인증서가 아닌 경우에는 다음 단계에 따라 로컬 인증서 사본을 구성할 수 있습니다.

/를 활성화하기 위한 로컬 인증서 사본 설정 SSL TLS
  1. Oracle에서 keytool을 다운로드하여 설치합니다. 이렇게 하면 로컬 키 스토어를 훨씬 쉽게 설정할 수 있습니다.

  2. SFSRootCAG2.pemCA 인증서를 다운로드합니다 (Gremlin SDK Java에서는 원격 인증서를 확인하기 위한 인증서가 필요함).

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