def get(logger):
elasticsearch_endpoint = os.getenv("DSS_ES_ENDPOINT", "localhost")
elasticsearch_port = int(os.getenv("DSS_ES_PORT", "443"))
client = ElasticsearchClient._es_client.get((elasticsearch_endpoint, elasticsearch_port), None)
if client is None:
try:
logger.debug("Connecting to Elasticsearch at host: {}".format(elasticsearch_endpoint))
if elasticsearch_endpoint.endswith(".amazonaws.com"):
session = boto3.session.Session()
# TODO (akislyuk) Identify/resolve why use of AWSV4Sign results in an AWS auth error
# when Elasticsearch scroll is used. Work around this by using the
# requests_aws4auth package as described here:
# https://elasticsearch-py.readthedocs.io/en/master/#running-on-aws-with-iam
# es_auth = AWSV4Sign(session.get_credentials(), session.region_name, service="es")
# Begin workaround
current_credentials = session.get_credentials().get_frozen_credentials()
es_auth = AWS4Auth(current_credentials.access_key, current_credentials.secret_key,
session.region_name, "es", session_token=current_credentials.token)
# End workaround
client = Elasticsearch(
hosts=[{'host': elasticsearch_endpoint, 'port': elasticsearch_port}],
use_ssl=True,
verify_certs=True,
connection_class=RequestsHttpConnection,
http_auth=es_auth)
else:
client = Elasticsearch(
[{'host': elasticsearch_endpoint, 'port': elasticsearch_port}],
use_ssl=False
)
ElasticsearchClient._es_client[(elasticsearch_endpoint, elasticsearch_port)] = client
except Exception as ex:
logger.error("Unable to connect to Elasticsearch endpoint {}. Exception: {}".format(
elasticsearch_endpoint, ex)
)
raise ex
return client
评论列表
文章目录