AsyncElasticsearch 客户端不接受与 AWS Elasticsearch 的连接 - AttributeError:“AWS4Auth”对象没有属性“encode”

Har*_*hit 8 amazon-web-services python-3.x elasticsearch aws-elasticsearch

我在项目中使用 AWS Elasticsearch 和 async elasticsearch-py 包来连接集群。

AWS Elasticsearch 版本 7.9

Python包elasticsearch[async]==7.12.0

我无法使用该AWS4Auth库初始化异步 Elasticsearch 客户端(官方 AWS ES 客户端 Python 文档中提到)

它应该成功与客户端连接。但是,它给了我这个错误:

AttributeError: 'AWS4Auth' object has no attribute 'encode'
Run Code Online (Sandbox Code Playgroud)

分享我的代码片段:

AttributeError: 'AWS4Auth' object has no attribute 'encode'
Run Code Online (Sandbox Code Playgroud)

小智 1

我认为使用 AWS4Auth 您必须绑定到 RequestsHttpConnection。

默认连接类基于 urllib3,它比可选的基于请求的类更具性能和轻量级。仅当您需要任何请求高级功能(例如自定义身份验证插件等)时才使用 RequestsHttpConnection。

来自https://elasticsearch-py.readthedocs.io/en/master/transports.html

尝试:

es = AsyncElasticsearch(
     hosts=[{'host': host, 'port': 443}],
     http_auth=awsauth,
     use_ssl=True,
     verify_certs=True,
     connection_class=RequestsHttpConnection
)
Run Code Online (Sandbox Code Playgroud)

或非异步版本(如果上面的代码不起作用):

es = Elasticsearch(
     hosts=[{'host': host, 'port': 443}],
     http_auth=awsauth,
     use_ssl=True,
     verify_certs=True,
     connection_class=RequestsHttpConnection
)
Run Code Online (Sandbox Code Playgroud)