我有以下基于文档的代码...
@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帐户添加密钥?
答案 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/netty
或io.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群集。