Облачная платформаAdvanced

Подключение к кластеру с помощью Python

Язык статьи: Русский
Показать оригинал
Страница переведена автоматически и может содержать неточности. Рекомендуем сверяться с английской версией.

При использовании кластеров Elasticsearch сервиса CSS для запросов и управления данными разработчики традиционно полагаются на языки программирования. Однако прямое взаимодействие с HTTP API Elasticsearch часто требует сложного и подверженного ошибкам кода. Чтобы упростить разработку, CSS Elasticsearch поддерживает официальный клиент Elasticsearch Python. Библиотека клиента (elasticsearch-py) предоставляет полное инкапсулирование API Elasticsearch, позволяя разработчикам выполнять управление индексами, операции CRUD (Create, Read, Update, Delete) и поиск документов через нативные API Python. Для получения дополнительной информации см. Elasticsearch Python Client.

Требования

  • Целевой кластер Elasticsearch доступен.
  • Сервер, на котором выполняется код Python, может взаимодействовать с кластером Elasticsearch.
  • В зависимости от используемого метода настройки сети получите адрес доступа к кластеру. Для получения подробностей см. Obtaining the Cluster Access Address.
  • Python 3 установлен на сервере.

Установка библиотеки клиента Python

Установите библиотеку клиента Python на сервер, на котором выполняется код Python. Чтобы обеспечить лучшую совместимость, используйте библиотеку клиента Python той же версии, что и целевой кластер Elasticsearch.

Замените 7.10 фактической версией клиента Python.

pip install Elasticsearch==7.10

Подключение к кластеру

Пример кода отличается в зависимости от настроек режима безопасности целевого кластера Elasticsearch. Выберите соответствующий справочный документ в соответствии с вашим сценарием обслуживания.

Подключение к кластеру Non-Security Mode с помощью Elasticsearch Python Client

Используйте Elasticsearch Python client для подключения к кластеру Elasticsearch, в котором режим безопасности отключён, и выполните запрос, существует ли индекс test.

Ниже приведён пример кода для создания экземпляра клиента с использованием информации о подключении к кластеру:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24from elasticsearch import Elasticsearch
class ElasticFactory(object):
def __init__(self, host: list, port: str, username: str, password: str):
self.port = port
self.host = host
self.username = username
self.password = password
def create(self) -> Elasticsearch:
addrs = []
for host in self.host:
addr = {'host': host, 'port': self.port}
addrs.append(addr)
if self.username and self.password:
elasticsearch = Elasticsearch(addrs, http_auth=(self.username, self.password))
else:
elasticsearch = Elasticsearch(addrs)
return elasticsearch
es = ElasticFactory(["{cluster address}"], "9200", None, None).create()
print(es.indices.exists(index='test'))

Этот фрагмент кода проверяет, существует ли индекс test в кластере. Если true (индекс существует) или false (индекс не существует) возвращается, это указывает на то, что кластер подключён.

Подключение к кластеру Security-Mode+HTTP с помощью Elasticsearch Python Client

Используйте Elasticsearch Python client для подключения к кластеру Elasticsearch в режиме security-mode, использующему HTTP, и выполните запрос, существует ли индекс test.

Ниже приведён пример кода для создания экземпляра клиента с использованием информации о подключении к кластеру:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24from elasticsearch import Elasticsearch
class ElasticFactory(object):
def __init__(self, host: list, port: str, username: str, password: str):
self.port = port
self.host = host
self.username = username
self.password = password
def create(self) -> Elasticsearch:
addrs = []
for host in self.host:
addr = {'host': host, 'port': self.port}
addrs.append(addr)
if self.username and self.password:
elasticsearch = Elasticsearch(addrs, http_auth=(self.username, self.password))
else:
elasticsearch = Elasticsearch(addrs)
return elasticsearch
es = ElasticFactory(["xxx.xxx.xxx.xxx"], "9200", "username", "password").create()
print(es.indices.exists(index='test'))
Table 2 Переменные

Параметр

Описание

Хост

IP-адрес для доступа к кластеру. Если указано несколько IP-адресов, разделите их запятой (,).

порт

Порт доступа к кластеру. Введите 9200.

Имя пользователя

Имя пользователя для доступа к кластеру.

пароль

Пароль пользователя.

Этот фрагмент кода проверяет, существует ли индекс test в кластере. Если возвращается true (индекс существует) или false (индекс не существует), это указывает на то, что кластер подключён.

Подключение к кластеру Security-Mode+HTTPS с Elasticsearch Python Client

Используйте Elasticsearch Python client для подключения к кластеру Elasticsearch в режиме security-mode, использующему HTTPS, и проверьте, существует ли индекс test.

Ниже приведён пример кода для создания экземпляра клиента с использованием информации о подключении к кластеру:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27from elasticsearch import Elasticsearch
import ssl
class ElasticFactory(object):
def __init__(self, host: list, port: str, username: str, password: str):
self.port = port
self.host = host
self.username = username
self.password = password
def create(self) -> Elasticsearch:
context = ssl._create_unverified_context()
addrs = []
for host in self.host:
addr = {'host': host, 'port': self.port}
addrs.append(addr)
if self.username and self.password:
elasticsearch = Elasticsearch(addrs, http_auth=(self.username, self.password), scheme="https", ssl_context=context)
else:
elasticsearch = Elasticsearch(addrs)
return elasticsearch
es = ElasticFactory(["xxx.xxx.xxx.xxx"], "9200", "username", "password").create()
print(es.indices.exists(index='test'))
Table 3 Переменные

Параметр

Описание

Хост

IP-адрес для доступа к кластеру. Если указано несколько IP-адресов, разделите их запятой (,).

порт

Порт доступа к кластеру. Введите 9200.

имя пользователя

Имя пользователя для доступа к кластеру.

пароль

Пароль пользователя.

Этот фрагмент кода проверяет, существует ли индекс test в кластере. Если возвращается true (индекс существует) или false (индекс не существует), это указывает на то, что кластер подключён.