2017-11-09 5 views
0

私はAWSとElasticSearchの初心者で、実際にプロダクションでどのように使用できるかを理解するためにElasticSearchで遊んでいます。私はAWSに独自のElasticSearch製品があることを知っていますが、私は自分のEC2インスタンスをスピンアップし、ElasticSearchを自分で設定して詳細を知りたいと思っていました。EC2インスタンス上で実行されているElasticSearchサービスへのリクエストの送信

elastic.co's instructionsに従うことで、EC2インスタンスでElasticSearchを起動して実行しています。私は私のESサービスを開始し、curlコマンドを実行:

$ curl localhost:9200/_cluster/health?pretty 

を私は戻って有効な応答を得た:

{ 
    "cluster_name" : "elasticsearch", 
    "status" : "green", 
    "timed_out" : false, 
    "number_of_nodes" : 1, 
    "number_of_data_nodes" : 1, 
    "active_primary_shards" : 0, 
    "active_shards" : 0, 
    "relocating_shards" : 0, 
    "initializing_shards" : 0, 
    "unassigned_shards" : 0, 
    "delayed_unassigned_shards" : 0, 
    "number_of_pending_tasks" : 0, 
    "number_of_in_flight_fetch" : 0, 
    "task_max_waiting_in_queue_millis" : 0, 
    "active_shards_percent_as_number" : 100.0 
} 

しかし、私はリモートから同じ要求を送信しようとしてきた、とタイムアウトしています:私は私のEC2インスタンスを作成し

curl http://MY-EC2-INSTANCE-IP-ADDRESS:9200/_cluster/health?pretty 

curl: (7) Failed to connect to XX.XX.XXX.XX port 9200: Operation timed out 

が、私は私のセキュリティグループ内のHTTPオプションを指定してくださいました。以下のスクリーンショットを添付しました。 enter image description here

また、HTTPが実際に動作していることを確認しました。私はservice httpd startを使用して独自小さなApacheサーバを起動し、/var/www/htmlに小さなindex.htmlファイルを配置し、シンプルな

とこんにちは、これは弾性検索です。

テキストフィラー。私はAWS自身ElasticSearchサービスは、ポート番号のない(あるいは、して、ユーザーに直接エンドポイントを提供知っ

enter image description here

:私は私のEC2インスタンスのIPアドレスにアクセスすると、私は、レンダリングされた正しいindex.htmlのテキストを取得します少なくともデフォルトのポート番号)。しかし、リモートESサービス(ほとんどすべてがlocalhost:9200を例にしています)にリクエストを送信する方法について、驚くほどごくわずかなドキュメントがあります。

EC2インスタンス上のElasticSearchサービスにリクエストを送信するための適切なプロトコルは何ですか?

+1

あなたはいくつかのことを誤解していると思います。セキュリティグループはファイアウォールです。 ssh経由でインスタンスの中にいるときは、ファイアウォールの内側にあるので、 'localhost'上の任意のポートに自由にアクセスすることができます。セキュリティグループの設定には0の効果があります。セキュリティグループ外にいったん設定すると、ファイアウォールを通過する必要があります。実際には何が重要かは、ポート番号とTCPとUDPです。あなたのケースでは、ポート9200に「カスタムTCPルール」を追加する必要があります。「HTTP」はポート80でTCPを指定するためのショートカットであり、ポート9200でelasticsearchサーバーに到達する必要はありません。 HTTPプロトコル – zapl

+0

ありがとうございます。これは非常に役に立ちます。あなたが先に進み、これを答えとして書くなら、彼は最も包括的かつ最良の説明としてそれを受け入れることができます。 –

答えて

1

最終的にこのpostのKimberly Wによる解決に達すると、答えが見つかりました。私のelasticsearch.ymlでは、次の設定を編集します。

network: 
    host: 0.0.0.0 
http: 
    port: 9200 

次に、あなたのAWSセキュリティグループの設定に移動し、含まれるように、あなたのインバウンドルールを編集:

enter image description here

これは9200への着信接続を許可します。

次に、ElasticSearchサービスを再起動します。重要な問題は、私は正しい場所にpingをしていますが、誰もポート9200を聞いていなければ、誰も応答しないことです。

1

また、セキュリティグループでポート9200を開く必要があります。あなたの例は、ポート9200を使用して接続しています。

+0

ありがとうございます。どのようにしてElasticSearchサービスに接続し、次に 'localhost'経由でポート9200に問題なく接続できますか? –

+0

Woops- nevermind。私はあなたの答えを間違って解釈しました。インバウンドセキュリティグループにHTTPのポート9200を追加する必要があると言っていました。 –

関連する問題