web-dev-qa-db-ja.com

AWS Elasticsearchに接続するにはどうすればよいですか?

AWS Elasticsearchに接続しようとしていますが、常に次のエラーが発生します。

Exception in thread "main" org.elasticsearch.client.transport.NoNodeAvailableException: None of the configured nodes are available: []
at org.elasticsearch.client.transport.TransportClientNodesService.ensureNodesAreAvailable(TransportClientNodesService.Java:278)
at org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.Java:197)
at org.elasticsearch.client.transport.support.InternalTransportClient.execute(InternalTransportClient.Java:106)
at org.elasticsearch.client.support.AbstractClient.index(AbstractClient.Java:98)
at org.elasticsearch.client.transport.TransportClient.index(TransportClient.Java:334)
at org.elasticsearch.action.index.IndexRequestBuilder.doExecute(IndexRequestBuilder.Java:313)
at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.Java:91)
at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.Java:65)
at com.c_backendcrawler.utility.ElasticSearch.uploadObject(ElasticSearch.Java:25)
at com.c_backendcrawler.Start.main(Start.Java:34)

私のコードは次のとおりです:

 //Create Client
    Settings settings = ImmutableSettings.settingsBuilder().put("cluster.name", "zencubes-search").put("node.name","Darkhawk").build();
    TransportClient transportClient = new TransportClient(settings);
    transportClient.addTransportAddress(new InetSocketTransportAddress(
            "x.x.x.x",9300));
    return transportClient;

AWS Elasticsearchからの出力:

    {
status: 200,
name: "Darkhawk",
cluster_name: "817880037706:zencubes-search",
version: {
number: "1.5.2",
build_hash: "62ff9868b4c8a0c45860bebb259e21980778ab1c",
build_timestamp: "2015-04-27T09:21:06Z",
build_snapshot: false,
lucene_version: "4.10.4"
},
tagline: "You Know, for Search"
}

私は( https://search-zencubes-search-xxxxxxxx.eu-west-1.es.amazonaws.com/ )カールしようとしましたが、機能しますが、ポート9300では機能しません。ここで間違っている?

11
Fabian Lurz

ネイティブトランスポートプロトコルは、AWS Managed ElasticSearchの使用をサポートしておらず、RESTエンドポイントでのみ使用できます。RESTエンドポイントを使用するようにクライアントを切り替えることを検討してください。 https://github.com/searchbox-io/Jest

ソース: https://forums.aws.Amazon.com/thread.jspa?messageID=681938

16
John Russell

Elasticsearch Java SDKバージョン5.6 があるため、 RESTクライアント が使用可能です。これにより、AWSのElasticsearch Serviceに接続できます。

現在、Elasticsearch Serviceはバージョン5.5までのインストールを許可していますが、5.6 Java SDKを5.5クラスターに対して使用できますが、軽度の制限があります。

RestClientを初期化するときは、80ではなく、ポート443または9200をそれぞれ使用する必要があります。例えば。

RestClient restClient = RestClient.builder(
    new HttpHost("search-test-elasti-xxxx-xxxxx.us-east-1.es.amazonaws.com", 80, "http")).build();
RestHighLevelClient restHighLevelClient = new RestHighLevelClient(restClient); 
// [...]
5
H6.

John Russellが前述したように、AWS Elastic Clusterと通信するにはRESTクライアントを使用する必要があります。

Elasticは最近、独自の最初のRCバージョンをリリースしましたJava RESTクライアントなので、これもオプションになりました。

クライアントドキュメント: https://www.elastic.co/guide/en/elasticsearch/client/Java-rest/current/index.html

Mavenリポジトリ: http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22org.elasticsearch.client%22%20AND%20a%3A%22rest%22

2
Ivan Krumov