使用 Java 和 Gremlin 及签名版本 4 签名连接到 Neptune - Amazon Neptune
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 Java 和 Gremlin 及签名版本 4 签名连接到 Neptune

使用 3.4.11 之前的 TinkerPop 版本通过 Sig4 签名连接到 Neptune

本部分介绍如何在使用 3.4.11 之前的 TinkerPop 版本时,如何使用具有签名版本 4 身份验证的 Grimlin Java API 连接到 Amazon Neptune。

请注意,如果你使用的是 TinkerPop 3.4.11 或更高版本,那么由 Neptune 支持引擎版本 1.0.5.0,你可以直接使用 TinkerPop 驱动程序来连接 Sig4 签名。请参阅展示如何做到这一点的例子.

注意

每个数据库实例的并发 WebSocket 连接数以及连接可以保持打开的时间长短有限制。有关更多信息,请参阅 Websocket 限制

Prerequisites

  • Java 8 或更高版本。

  • Apache Maven 3.3 或更高版本。

    有关在运行 Amazon Linux 的 Amazon EC2 实例上安装这些先决条件的信息,请参阅。Amazon Linux EC2 上的先决条件.

  • 用于对请求进行签名的 IAM 凭证。有关更多信息,请参阅 。使用默认凭证提供程序链中的Amazon SDK for Java开发人员指南.

    注意

    如果您使用的是临时凭证,这些凭证(包括会话令牌)将在指定时间间隔后到期。

    在请求新凭证时,您必须更新您的会话令牌。有关更多信息,请参阅 IAM 用户指南中的使用临时安全凭证以请求对 Amazon 资源的访问权限

  • 设置SERVICE_REGION变量为以下内容之一,以指示的是 Neptune 数据库实例的区域:

    • 美国东部(弗吉尼亚北部):us-east-1

    • 美国东部(俄亥俄):us-east-2

    • 美国西部(加利福尼亚北部):us-west-1

    • 美国西部(俄勒冈):us-west-2

    • 加拿大(中部):ca-central-1

    • 南美洲(圣保罗):sa-east-1

    • 欧洲(斯德哥尔摩):eu-north-1

    • 欧洲(爱尔兰):eu-west-1

    • 欧洲(伦敦):eu-west-2

    • 欧洲(巴黎):eu-west-3

    • 欧洲(法兰克福):eu-central-1

    • 中东(巴林):me-south-1

    • 亚太地区(香港):ap-east-1

    • 亚太地区(东京):ap-northeast-1

    • 亚太地区(首尔):ap-northeast-2

    • 亚太地区(新加坡):ap-southeast-1

    • 亚太地区(悉尼):ap-southeast-2

    • 亚太地区(孟买):ap-south-1

    • 中国(北京):cn-north-1

    • 中国(宁夏):cn-northwest-1

    • AmazonGovCloud(美国西部):us-gov-west-1

    • AmazonGovCloud(美国东部):us-gov-east-1

使用 Grimlin Java API 和签名版本 4 签名连接到 Neptune

  1. 从 GitHub 克隆示例存储库。

    git clone https://github.com/aws/amazon-neptune-gremlin-java-sigv4.git
  2. 更改到克隆的目录中。

    cd amazon-neptune-gremlin-java-sigv4
  3. 通过检出具有最新标签的分支获取项目的最新版本。

    git checkout $(git describe --tags `git rev-list --tags --max-count=1`)
  4. 重要

    您必须提供 IAM 凭证才能对请求进行签名。输入以下命令以将您的凭证设置为环境变量,替换与您的凭证相关的项目。

    export AWS_ACCESS_KEY_ID=access_key_id export AWS_SECRET_ACCESS_KEY=secret_access_key export SERVICE_REGION=us-east-1 or us-east-2 or us-west-1 or us-west-2 or ca-central-1 or eu-north-1 or eu-west-1 or eu-west-2 or eu-west-3 or eu-central-1 or me-south-1 or ap-northeast-1 or ap-northeast-2 or ap-southeast-1 or ap-southeast-2 or ap-south-1 or cn-north-1 or cn-northwest-1 or us-gov-east-1 or us-gov-west-1

    Neptune Version 4 Signer 使用默认凭证提供程序链。有关提供凭证的其他方法,请参阅。使用默认凭证提供程序链中的Amazon SDK for Java开发人员指南.

    SERVICE_REGION 变量是必需的,即使在使用凭证文件时也是如此。

  5. 输入以下命令以编译和运行示例代码。

    Replace你的海王星端点使用 Neptune 数据库实例的主机名或 IP 地址。默认端口为 8182。

    注意

    有关查找 Neptune 数据库实例的主机名的信息,请参阅连接到 Amazon Neptune 终端节点部分。

    mvn compile exec:java \ -Dexec.mainClass="com.amazon.neptune.gremlin.driver.example.NeptuneGremlinSigV4Example" \ -Dexec.args="-e your-neptune-endpoint -p 8182"
  6. 要查看示例的源代码,请参阅 NeptuneGremlinSigV4Example.java 目录中的 src/main/java/com/amazon/neptune/gremlin/driver/example 文件。

要在您自己的 Java 应用程序中使用 SigV4 签名驱动程序,请将以下内容添加到 pom.xml<dependencies> 部分。

<dependency> <groupId>org.apache.tinkerpop</groupId> <artifactId>gremlin-driver</artifactId> <version>3.4.8</version> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-core</artifactId> <version>1.11.307</version> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>amazon-neptune-sigv4-signer</artifactId> <version>2.1.1</version> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>amazon-neptune-gremlin-java-sigv4</artifactId> <version>2.1.1</version> </dependency>

使用 TinkerPop 3.4.11 或更高版本通过 Sig4 签名连接到 Neptune

以下是在使用 TinkerPop 3.4.11 或更高版本时如何使用 Gremlin Java API 与 Sig4 签名连接 Neptune 的示例。首先,定义依赖项:

<dependency> <groupId>com.amazonaws</groupId> <artifactId>amazon-neptune-sigv4-signer</artifactId> <version>2.4.0</version> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-core</artifactId> <version>1.12.9</version> </dependency>

然后,使用如下代码:

import com.amazonaws.auth.DefaultAWSCredentialsProviderChain; import com.amazonaws.neptune.auth.NeptuneNettyHttpSigV4Signer; ... System.setProperty("aws.accessKeyId","your-access-key"); System.setProperty("aws.secretKey","your-secret-key"); ... cluster = Cluster.build(your-cluster). enableSsl(true).keyCertChainFile(pem-file). handshakeInterceptor( r -> { NeptuneNettyHttpSigV4Signer sigV4Signer = new NeptuneNettyHttpSigV4Signer(region, new DefaultAWSCredentialsProviderChain()); sigV4Signer.signRequest(r); return r; }).create(); Client client = cluster.connect(); client.submit("g.V().has('code','IAD')").all().get();