如何从Flask应用程序连接到AWS上的远程Elasticsearch集群?

时间:2018-12-12 14:36:22

标签: python amazon-web-services elasticsearch flask

我有一个EC2服务器上运行的elasticsearch集群。尝试连接时,会收到各种不同的错误消息。

当前,在elasticsearch.yml文件中,所有运输项目都已被注释掉,但是我已经尝试过:

network.host: 0.0.0.0
and
network.host: ec2-xx-xxx-xxx.aws.instance.com

在我的烧瓶应用程序中,代码如下:

from datetime import datetime
from flask import Flask, jsonify, request
from elasticsearch import Elasticsearch

#es = Elasticsearch()http://34.245.51.240/
es = Elasticsearch(['ec2-34-xxx-xx-240.eu-west-1.compute.amazonaws.com','9200'])
#es = Elasticsearch(['34.245.51.240','9200'])

application = Flask(__name__)

@application.route('/', methods=['GET'])
def index():
    #results = es.get(index='contents', doc_type='title', id='my-new-slug')
    #return jsonify(results['_source'])
    doc = {
    'author': 'kimchy',
    'text': 'Elasticsearch: cool. bonsai cool.',
    'timestamp': datetime.now(),
    }
    res = es.index(index="test-index", doc_type='tweet', id=1, body=doc)
    print(res['res'])
    return res


#application.run(port=5000, debug=True)
if __name__ == '__main__':
    application.debug = True
    application.run()

我已经用Google搜索过多次,并尝试了所有可能找到的配置。

实现此目标的正确方法是什么?

谢谢。

1 个答案:

答案 0 :(得分:0)

我希望这会对其他人有所帮助。

elasticsearch的默认端口为9200,因此有必要在EC2服务器上打开这样的端口:

CustomTCP TCP 9200 0.0.0.0

这可以通过编辑设置服务器时设置安全组的安全组向导来完成。

然后在您的Python应用程序中,连接字符串为:

es = Elasticsearch("http://00.111.222.33")  //the public IP you can see on your EC2 dashboard

就是这样。数小时的痛苦和如此简单。