Как подключиться к Нептуну с помощью Java

У меня есть следующий код на основе документов ...

@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?


person Jackie    schedule 28.06.2018    source источник
comment
Вам нужна другая информация по этому вопросу?   -  person The-Big-K    schedule 24.10.2018


Ответы (5)


Neptune не позволяет вам подключаться к экземпляру db с вашего локального компьютера. Вы можете подключиться к Neptune только через EC2 внутри того же VPC, что и Neptune (документация по AWS).

Попробуйте создать исполняемый jar из этого кода и запустить его внутри ec2, код должен работать нормально. Если вы пытаетесь отладить что-то в своей локальной системе, используйте туннелирование экземпляра PuTTY для подключения к ec2, который затем будет перенаправлен в кластер neptune.

person Priyank Agrawal    schedule 28.07.2018

Вы создали экземпляр с включенной аутентификацией IAM?

Если да, вам нужно будет подписать свой запрос с помощью SigV4. Дополнительная информация (и примеры) о том, как подключиться с помощью SigV4, доступна по адресу https://docs.aws.amazon.com/neptune/latest/userguide/iam-auth-connecting-gremlin-java.html

примеры, приведенные в документации выше, также содержат информацию о том, как использовать ваши учетные данные IAM для подключения к кластеру Neptune.

person Divij Vaidya    schedule 01.07.2018

У меня была такая же проблема, и основной причиной был конфликт версии зависимости с Netty, который, к сожалению, является очень распространенной зависимостью. Gremlin 3.3.2 использует io.netty/netty-all версию 4.0.56.Final. Вы можете обнаружить, что ваш проект зависит от другого Netty jar, такого как io.netty/netty или io.netty/netty-handler, оба из которых могут вызвать проблемы, поэтому вам нужно будет исключить их из других зависимостей в вашем POM или использовать управляемые зависимости для установки версии Netty на уровне проекта.

person shooit    schedule 03.07.2018
comment
Для любого нового, столкнувшегося с той же проблемой, обновил все драйверы до последних версий и, похоже, работает OOB. следуйте инструкциям здесь docs.aws.amazon .com / neptune / latest / userguide / и используйте следующие зависимости. группа: 'org.apache.tinkerpop', имя: 'gremlin-driver', версия: '3.4.7' группа: 'com.amazonaws', имя: 'aws-java-sdk-core', версия: '1.11. 828 'группа:' com.amazonaws ', имя:' amazon-neptune-sigv4-signer ', версия:' 2.0.2 'группа:' com.amazonaws ', имя:' amazon-neptune-gremlin-java-sigv4 ' , версия: '2.0.2' - person sas1138; 30.07.2020

Другой вариант - использовать прокси-сервер подписи 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
person monken    schedule 12.03.2020