向EC2实例上运行的ElasticSearch服务发送请求

时间:2017-11-09 00:28:45

标签: rest amazon-web-services elasticsearch amazon-ec2

我是AWS和ElasticSearch的初学者,我正在玩ElasticSearch,希望能够更多地了解我如何在生产中使用它。我知道AWS有自己的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
}

但是,我一直在尝试远程发送相同的请求,并且超时:

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

当我创建EC2实例时,我确保在我的安全组中指定HTTP选项。我已附上以下截图: enter image description here

此外,我还测试过确保HTTP确实正常工作。我使用service httpd start启动了我自己的小型Apache服务器,并在index.html中放置了一个小/var/www/html个文件,只需一个简单的

  

您好,这是一种弹性搜索。

文字填充。当我访问我的EC2实例IP地址时,我得到了正确的index.html文本:

enter image description here

我知道AWS'自己的ElasticSearch服务直接为用户提供端点,没有端口号(或至少是默认端口号)。但令人惊讶的是,关于如何向远程ES服务发送请求的文档非常少(几乎所有这些服务都以localhost:9200为例)。

在EC2实例上向ElasticSearch服务发送请求的正确协议是什么?

2 个答案:

答案 0 :(得分:2)

您还需要在安全组中打开端口9200。您的示例是使用端口9200进行连接。

答案 1 :(得分:2)

我在搜索了几篇SO帖子后找到了答案,最终得到了Kimberly W在post中的解决方案。在我的elasticsearch.yml中,修改以下配置:

network:
  host: 0.0.0.0
http:
  port: 9200

然后,转到您的AWS Security组设置并编辑您的入站规则以包含:

enter image description here

这将允许到9200的传入连接。

然后,重新启动ElasticSearch服务。关键问题是我正在ping正确的位置,但如果没有人正在侦听端口9200,那么没有人会响应。