如何使用Java连接到Neptune

时间:2018-06-28 03:41:07

标签: amazon-neptune

我有以下基于文档的代码...

@Controller
@RequestMapping("neptune")
public class NeptuneEndpoint {
    @GetMapping("")
    @ResponseBody
    public String test(){
        Cluster.Builder builder = Cluster.build();
        builder.addContactPoint("...endpoint...");
        builder.port(8182);

        Cluster cluster = builder.create();

        GraphTraversalSource g = EmptyGraph.instance()
                                           .traversal()
                                           .withRemote(
                                               DriverRemoteConnection.using(cluster)
                                           );

        GraphTraversal t = g.V().limit(2).valueMap();

        t.forEachRemaining(
                e ->  System.out.println(e)
        );

        cluster.close();
        return "Neptune Up";
    }
}

但是当我尝试运行时,我得到了...

  

java.util.concurrent.TimeoutException:等待可用主机时超时-如果此消息仍然存在,请检查客户端配置和与服务器的连接

我还要如何从AWS IAM帐户添加密钥?

5 个答案:

答案 0 :(得分:3)

Neptune不允许您从本地计算机连接到数据库实例。您只能通过与Neptune(demo)相同的VPC内的EC2连接到Neptune。

尝试使此代码可运行的jar并在ec2中运行,该代码应该可以正常工作。如果您要尝试从本地系统调试某些内容,请使用PuTTY实例隧道连接到ec2,然后将其转发到neptune群集。

答案 1 :(得分:1)

您是否创建了启用了IAM身份验证的实例?

如果是,则必须使用SigV4签署请求。 https://docs.aws.amazon.com/neptune/latest/userguide/iam-auth-connecting-gremlin-java.html

提供了有关如何使用SigV4进行连接的更多信息(和示例)。

以上文档中提供的examples还包含有关如何使用IAM凭据连接到Neptune群集的信息。

答案 2 :(得分:1)

我只是遇到了同样的问题,根本原因是与Netty的依赖版本冲突,不幸的是这是一个非常普遍的依赖。 Gremlin 3.3.2使用io.netty/netty-all版本4.0.56.Final。您可能会发现您的项目依赖于另一个Netty jar,例如io.netty/nettyio.netty/netty-handler,两者都可能导致问题,因此您需要将它们从POM中的其他依赖项中排除,或者使用托管依赖项来设置。项目级别的Netty版本。

答案 3 :(得分:0)

另一个选择是使用AWS SigV4签名代理,该代理充当Neptune与您本地开发环境之间的桥梁。这些代理之一是https://github.com/monken/aws4-proxy

npm install --global aws4-proxy
# have your credentials exported as AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY
aws4-proxy --service neptune-db --endpoint cluster-die4eenu.cluster-eede5pho.eu-west-1.neptune.amazonaws.com --region eu-west-1
wscat localhost:3000/gremlin

答案 4 :(得分:0)

引用this

注意:您必须位于同一VPC中才能访问Neptune群集。