python - Elasticsearch - 检查索引是否存在时的身份验证错误

标签 python python-3.x elasticsearch elasticsearch-py

我为 kibana 启用了 cognito 身份验证的 Elasticsearch 。这按预期工作正常。
在我的 python 脚本中,我通过在 http_auth() 中提供用户名/密码来连接到 elasticsearch,同时创建连接对象。但是当我尝试检查索引是否存在时,会出现身份验证错误吗?有人可以帮忙吗。这是您模拟的示例代码。

from __future__ import print_function
import json
import time
import urllib
import re
import sys
import requests
import base64
import time
from elasticsearch import Elasticsearch
from datetime import datetime

esEndpoint = ""
uname
pwd
indexName = 'index_1'

mappings_rds = {
    "settings": {
        "number_of_shards": 2,
        "number_of_replicas": 1
    },
    "mappings": {
      "properties" : {
         "tableName": {
            "type": "keyword"
          },
         "tableRows": {
            "type": "integer"
          },        
         "updatedTime": {
            "type": "date",
            "format":"date_optional_time||yyyy-MM-dd'T'HH:mm:ss"
          },
        "created_timestamp":{
            "type": "date",
            "format":"date_optional_time||yyyy-MM-dd'T'HH:mm:ss"
          }
      }
    }
}

esClient = Elasticsearch([esEndPoint],http_auth=(uname,pwd))

try:
      res = esClient.indices.exists(indexName)
      print(res)
      if res is False:
          r = esClient.indices.create(indexName, body=mapping_rds, ignore=400)
      return 1
  except Exception as E:
          print("Unable to Create Index {0}".format(indexName))

最佳答案

谢谢大家的意见。我就此与 AWS Support 团队进行了通话。发现问题是我使用的用户名和密码。我使用的是使用 AWS Cognito 创建的用户凭证。 AWS 支持团队确认,上述凭证仅用于 Kibana 访问,不能用于从 databricks/python 脚本连接到 Elasticsearch。
更多信息在这里:https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-request-signing.html
一旦我生成访问/ secret key ,并从我的 python 脚本中使用它,就能够连接到 elasticsearch 以创建索引。
共享示例代码以供将来引用:

session=boto3.session.Session(aws_access_key_id=akey, aws_secret_access_key=skey, region_name=region)
credentials = session.get_credentials()
awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service, session_token=credentials.token)
print(credentials.access_key, credentials.secret_key, credentials.token)
es = Elasticsearch(
    hosts = [{'host': esEndpoint, 'port': 443}],
    http_auth = awsauth,
    use_ssl = True,
    verify_certs = True,
    connection_class = RequestsHttpConnection
)
谢谢

关于python - Elasticsearch - 检查索引是否存在时的身份验证错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64423902/

相关文章:

python - MainWindow 不会同时处理事件和用户操作

elasticsearch - Elasticsearch定义通配符映射

javascript - 如何查询NPM REST API搜索以获得相关结果?

python - 使用递归动态规划时如何填充背包表

python - 无法在 Flask websocket 中使用 Jsonify

python - "click and hold"与 WebDriver

python - Keras 中的自定义 Hebbian 层实现 - 输入/输出暗淡和横向节点连接

python - 如何使用python将数组中的字符串切片到另一个数组中

python - 尝试加密文本文件会导致类型错误

elasticsearch - 有没有办法像其他编程语言一样用脚本迭代弹性数组文档