9

は私が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) 

私のコードは以下の通りです:AWS Elasticsearchから

//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; 

出力:

{ 
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では動作しません。ここで何が間違っていますか?

+0

そのAWSインスタンスでポート9300は開いていますか? – lmyers

+0

そのオープンしていない - しかし、私はすべてを介して検索したと私はそれを変更する設定を見つけられなかったと思う - 私はawsが別のデフォルトポートを使用している場合はわからない。 ああ、私elasticsearchサービスAWSを使用しています - あなたがアクセスポリシーを設定する必要があるかもしれませんように手動で設定されたEC2インスタンス –

+0

はルックスではない:http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide /es-gsg.html – lmyers

答えて

13

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

出典:ジョン・ラッセルは、上記に述べたようにhttps://forums.aws.amazon.com/thread.jspa?messageID=681938

+0

おかげでたくさん:(働いていない - 私は後でこの日、それを見ているだろうし、あなたに戻ってくる: –

+0

はい - これは動作します!ありがとうございました! –

1

、あなたのAWS弾性クラスタと通信するRESTクライアントを使用する必要があります。

Elasticは最近、独自のJava RESTクライアントのRC版をリリースしました。これは今でもオプションです。

クライアントのドキュメント: 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

Since the Elasticsearch Java SDK version 5.6利用可能REST Clientがあります。これにより、AWS上のElasticsearch Serviceに接続することができます。

現在、Elasticsearchサービスではバージョン5.5までのインストールが可能ですが、マイナーな制限付きで5.5クラスタに対して5.6 Java SDKを使用できます。

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

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); 
// [...] 
+0

どのようにリクエストに署名しますか? – user3100209

関連する問題