我在我的项目中使用AWS Elasticsearch和AWS Elasticsearch-py包来连接集群。
AWS Elasticsearch版本7.9
Python包:elasticsearch[async]==7.12.0
我无法使用AWS4Auth
库(在官方AWS ES客户端Python文档中提到)初始化Async Elasticsearch客户端。
它应该成功地连接到客户端。但是,它给了我这个错误:
AttributeError: 'AWS4Auth' object has no attribute 'encode'
分享我的代码片段:
from elasticsearch import AsyncElasticsearch, AIOHttpConnection
from requests_aws4auth import AWS4Auth
import asyncio
host = 'my-test-domain.us-east-1.es.amazonaws.com'
region = 'us-east-1'
service = 'es'
credentials = {
'access_key': "MY_ACCESS_KEY",
'secret_key': "MY_SECRET_KEY"
}
awsauth = AWS4Auth(credentials['access_key'], credentials['secret_key'], region, service)
es = AsyncElasticsearch(
hosts=[{'host': host, 'port': 443}],
http_auth=awsauth,
use_ssl=True,
verify_certs=True,
connection_class=AIOHttpConnection
)
async def test():
print(await es.info())
asyncio.run(test())
3条答案
按热度按时间fkaflof61#
anhgbhbe2#
我把@francojposa的答案上面和固定/适应它,我试图提交一个编辑他的答案,但“建议队列已满”或这样的
requirements.txt
:这是主要的定义
使用方法:
rqqzpn5f3#
我认为使用AWS4Auth,您将绑定到RequestsHttpConnection。
默认的连接类基于urllib3,它比可选的基于请求的类更高效和轻量级。只有当你需要任何请求高级功能,如自定义认证插件等时,才使用RequestsHttpConnection。
从https://elasticsearch-py.readthedocs.io/en/master/transports.html
试试看:
如果上面的代码不起作用,则使用非JavaScript版本: