提问人:user2214162 提问时间:11/18/2023 更新时间:11/20/2023 访问量:31
AWS 无法连接到 opensearch 服务器,使用 python 收到错误“Session”对象没有属性“token”
AWS cannot connect to opensearch severless, getting error 'Session' object has no attribute 'token' using python
问:
我正在尝试在新的 opensearch 设置上创建索引,因为我们将开始从 elasticsearch 迁移到 aws 中的 opensearch 无服务器。我有下面的配置,我能够毫无问题地获得aws_session_token,但是我无法实际连接到botosession。如果 botosession 配置中缺少某些内容,或者我需要为 botocore 配置某些内容,请告诉我?
botoclient = boto3.client('sts', region_name = region, aws_access_key_id=aws_access_key_id, aws_secret_access_key=aws_secret_access_key,verify = False)
response = botoclient.get_session_token()
aws_session_token = response["Credentials"]["SessionToken"]
session1 = boto3.Session(
aws_access_key_id=aws_access_key_id,
aws_secret_access_key=aws_secret_access_key,
aws_session_token=aws_session_token
)
auth = AWSV4SignerAuth(session1, region, service)
botosession = OpenSearch(
hosts = [{'host': host, 'port': 443}],
http_auth = auth,
use_ssl = True,
verify_certs = True,
connection_class = RequestsHttpConnection,
pool_maxsize = 20
)
index_name = 'python-test-index'
index_body = {
'settings': {
'index': {
'number_of_shards': 4
}
}
}
response1 = botosession.indices.create(index_name, body=index_body)
print('\nCreating index:')
print(response1)
我阅读了有关 opensearch、boto、botocore 和 boto.session 的文档,并取得了进展,但是我遇到了这个错误消息。我认为这与 botocore 有关,但我可能是错的。我对 aws 的访问权限也很有限,因此我可能缺少权限,但我认为情况并非如此。我希望能够在 opensearch 上创建一个测试索引
答:
1赞
Bert Blommers
11/20/2023
#1
-object 的第一个参数应该是 Session 的凭据,而不是 Session 本身。AWSV4SignerAuth
session1 = boto3.Session(
aws_access_key_id=aws_access_key_id,
aws_secret_access_key=aws_secret_access_key,
aws_session_token=aws_session_token
)
session1_creds = session1.get_credentials()
auth = AWSV4SignerAuth(session1_creds, region, service)
这是基于 OpenSearch-client 中的文档:https://opensearch.org/docs/latest/clients/python-low-level/
评论
0赞
user2214162
11/21/2023
那奏效了,非常感谢。
评论