Elasticsearch Python客户端连接AWS ES报非受支持发行版错误求助
错误原因分析
Elastic官方在2021年调整产品许可协议后,从7.14版本的Python elasticsearch 客户端开始内置了服务端发行版校验逻辑,会验证服务端是否为官方授权的Elasticsearch发行版。你所使用的AWS托管Elasticsearch服务(现更名为OpenSearch Service)7.10版本属于AWS基于Elasticsearch开源分支开发的衍生版本,无法通过官方客户端的校验,因此触发报错。首次运行成功是因为初始请求时校验逻辑还未完成结果缓存,后续请求触发缓存的校验结果就会抛出异常。
解决办法
- 方案一:降级Python elasticsearch客户端到无校验逻辑的7.13及以下版本,该版本和你服务端7.10的兼容性也更强,直接执行命令:
pip install elasticsearch==7.13.4 - 方案二:更换为AWS官方适配的
opensearch-py客户端,该客户端原生兼容AWS OpenSearch/Elasticsearch Service,不存在校验限制。替换后代码调整如下:
from opensearchpy import OpenSearch, RequestsHttpConnection from requests_aws4auth import AWS4Auth import boto3 import json host = '<url>.us-east-1.es.amazonaws.com' region = 'us-east-1' service = 'es' credentials = boto3.Session().get_credentials() awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service, session_token=credentials.token) es = OpenSearch( hosts = [{'host': host, 'port': 443}], http_auth = awsauth, use_ssl = True, verify_certs = True, connection_class = RequestsHttpConnection ) print(json.dumps(es.info(), indent=4, sort_keys=True))
安装依赖执行命令:pip install opensearch-py requests-aws4auth boto3
- 方案三:若必须使用7.14+版本的官方客户端,可临时屏蔽校验逻辑(不推荐生产环境使用,存在未知兼容性风险),在初始化Elasticsearch对象前添加如下代码:
from elasticsearch import Elasticsearch Elasticsearch._verified_elasticsearch = True
内容的提问来源于stack exchange,提问作者de1337ed
相关产品推荐
相关产品推荐

