使用 SSH 隧道从 django-haystack 连接到 AWS ElasticSearch 时遇到问题

问题描述

我有一个在 EC2 上运行的 Django 应用程序,它可以使用以下 django-haystack 配置连接到我的 AWS ElasticSearch:

haystack_CONNECTIONS = {
    'default': {
        'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine','URL': os.environ.get('ELASTICSEARCH_URL','http://elasticsearch').strip(),'INDEX_NAME': 'my_index'
    },}

if 'es.amazonaws.com' in haystack_CONNECTIONS['default']['URL']:
    haystack_CONNECTIONS['default']['kwargs'] = {
        'port': 443,'http_auth': AWS4AuthEncodingFix(
            os.environ.get('AWS_ACCESS_KEY_ID').strip(),os.environ.get('AWS_SECRET_ACCESS_KEY').strip(),os.environ.get('ELASTIC_SEARCH_AWS_REGION','us-east-1').strip(),'es'),'use_ssl': True,'verify_certs': True,'connection_class': Requestshttpconnection,}

这工作正常,但现在为了调试目的,我需要从我的本地开发机器连接到生产 ElasticSearch。

为此,我创建了一个 SSH 隧道:

ssh -v -N -L localhost:9200:${ELASTICSEARCH_ENDOINT}:443 -i my_secret_pem_file.pem ${EC2_USERNAME}@${EC2_IP}

从 SSH 日志中我可以看到连接已建立,并且工作正常:

10:26 $ curl -k -X GET 'https://localhost:9200/_cat/indices?v'
health status index     pri rep docs.count docs.deleted store.size pri.store.size 
yellow open   .kibana-4   1   1          2            0      9.5kb          9.5kb 
yellow open   my_index    5   1    1150327       547242      2.2gb          2.2gb 

(请注意,我必须将 -kcurl 一起使用才能绕过 SSL 验证,因为该证书对 localhost 无效。

为了从 django-haystack 连接,我在上面的配置中添加了以下 else 分支:

else:
    haystack_CONNECTIONS['default']['kwargs'] = {
        'port': 9200,'use_ssl': False,'verify_certs': False,}

当我启动我的 Django 应用程序并尝试执行搜索时,我看到 SSH 隧道上有一些活动:

debug1: Connection to port 9200 forwarding to ###REDACTED### port 443 requested.

但是,所有搜索都返回空结果集。

我错过了什么?

谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)