Rest 向EC2实例上运行的ElasticSearch服务发送请求
我是AWS和ElasticSearch的初学者,我正在尝试ElasticSearch,希望能更多地了解如何在生产中使用它。我知道AWS有自己的ElasticSearch产品,但我想启动自己的EC2实例,自己建立ElasticSearch,只是为了了解更多 我已经通过以下方法在我的EC2实例上启动并运行了ElasticSearch。我启动了ES服务并执行了一个curl命令:Rest 向EC2实例上运行的ElasticSearch服务发送请求,rest,amazon-web-services,elasticsearch,amazon-ec2,Rest,Amazon Web Services,elasticsearch,Amazon Ec2,我是AWS和ElasticSearch的初学者,我正在尝试ElasticSearch,希望能更多地了解如何在生产中使用它。我知道AWS有自己的ElasticSearch产品,但我想启动自己的EC2实例,自己建立ElasticSearch,只是为了了解更多 我已经通过以下方法在我的EC2实例上启动并运行了ElasticSearch。我启动了ES服务并执行了一个curl命令: $ curl localhost:9200/_cluster/health?pretty 我得到了一个有效的答复: {
$ 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选项。我在下面附上了一个截图:
此外,我还进行了测试,以确保HTTP实际工作。我使用服务httpd start
启动了自己的小Apache服务器,并在/var/www/html
中放置了一个小的index.html
文件,其中包含一个简单的
您好,这是一个弹性搜索
文本填充。当我访问EC2实例IP地址时,我得到了正确的index.html文本:
我知道AWS自己的ElasticSearch服务直接为用户提供端点,没有端口号(或者至少是默认端口号)。但令人惊讶的是,关于如何向远程ES服务发送请求的文档很少(例如,几乎所有这些服务都有localhost:9200
)
向EC2实例上的ElasticSearch服务发送请求的正确协议是什么?您还需要打开安全组中的端口9200。您的示例使用端口9200进行连接。您还需要在安全组中打开端口9200。您的示例是使用端口9200进行连接。我在浏览了几篇SO帖子后找到了答案,最终由Kimberly W在这篇文章中找到了解决方案。在my
elasticsearch.yml
中,编辑以下配置:
network:
host: 0.0.0.0
http:
port: 9200
然后,转到AWS安全组设置并编辑入站规则以包括:
这将允许到9200
的传入连接
然后,重新启动ElasticSearch服务。关键问题是我正在ping正确的位置,但是如果没有人在监听端口9200,那么就没有人会响应 我在浏览了几篇SO帖子后找到了答案,最终金伯利W在这篇文章中找到了解决方案。在my
elasticsearch.yml
中,编辑以下配置:
network:
host: 0.0.0.0
http:
port: 9200
然后,转到AWS安全组设置并编辑入站规则以包括:
这将允许到9200
的传入连接
然后,重新启动ElasticSearch服务。关键问题是我正在ping正确的位置,但是如果没有人在监听端口9200,那么就没有人会响应 谢谢。为什么我能够通过
localhost
连接到ElasticSearch服务,然后连接到端口9200而没有问题?Woops-nevermind。我把你的答案解释错了。您刚才说我需要将HTTP端口9200添加到入站安全组。谢谢。为什么我能够通过localhost
连接到ElasticSearch服务,然后连接到端口9200而没有问题?Woops-nevermind。我把你的答案解释错了。你刚才说我需要将HTTP端口9200添加到入站安全组。我想你误解了一些事情。安全组是防火墙。当您通过ssh在实例内部时,您也在防火墙内部,因此可以自由访问localhost
上的任何端口。安全组设置在此处无效。一旦离开安全组,您必须通过防火墙。现在真正重要的是端口号和TCP与UDP。在您的情况下,需要为端口9200添加“自定义TCP规则”。“HTTP”只是在端口80上指定TCP的快捷方式,不需要到达端口9200上的elasticsearch服务器,即使它也使用HTTP协议。谢谢。这是非常有帮助的。如果你继续写这篇文章作为回答,我可以接受他最全面、最好的解释。我想你误解了一些事情。安全组是防火墙。当您通过ssh在实例内部时,您也在防火墙内部,因此可以自由访问localhost
上的任何端口。安全组设置在此处无效。一旦离开安全组,您必须通过防火墙。现在真正重要的是端口号和TCP与UDP。在您的情况下,需要为端口9200添加“自定义TCP规则”。“HTTP”只是在端口80上指定TCP的快捷方式,不需要到达端口9200上的elasticsearch服务器,即使它也使用HTTP协议。谢谢。这是非常有帮助的。如果你继续写这篇文章作为回答,我可以接受他最全面、最好的解释。