AWS 无法连接到 opensearch 服务器,使用 python 收到错误“Session”对象没有属性“token”

AWS cannot connect to opensearch severless, getting error 'Session' object has no attribute 'token' using python

提问人:user2214162 提问时间:11/18/2023 更新时间:11/20/2023 访问量:31

问:

我正在尝试在新的 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 上创建一个测试索引

Python Boto3 开放搜索

答:

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
那奏效了,非常感谢。