Как подключить Python cosmos_client к экземпляру Cosmos DB с помощью Cassandra API?
У меня настроен экземпляр Cosmos DB (Cassandra API), и я хотел бы управлять его пропускной способностью из приложения Python. Я могу создать azure.cosmos.cosmos_client, используя конечную точку cassandra и основной пароль, указанный в Azure, без ошибок, но все попытки взаимодействия с клиентом приводят к "azure.cosmos.errors.HTTPFailure: Код состояния: 404".
Я уже успешно взаимодействую с этой базой данных через cassandra-driver в Python, но я хотел бы получить доступ к клиенту cosmos для управления предоставлением пропускной способности через код. Я хочу автоматически масштабировать пропускную способность, поскольку использование базы данных колеблется между высоким уровнем использования и почти бездействием.
Для создания клиента cosmos_client требуется действующий URI со схемой (https/http/ftp и т. Д.). Конечная точка, указанная в azure, которая успешно использовалась для подключения через cqlsh, а также драйвер cassandra Python, не указала схему. Я добавил "https://" в начало предоставленной конечной точки и смог создать клиент в Python ("http://" приводит к ошибкам, также проверенные неверные адреса также приводят к ошибкам даже с "https://" "). Теперь, когда у меня создан объект клиента, при любом взаимодействии с ним я получаю 404 ошибки.
client = cosmos_client.CosmosClient(f'https://{COSMOS_CASSANDRA_ENDPOINT}', {'masterKey': COSMOS_CASSANDRA_PASSWORD} )
client.ReadEndpoint
#'https://COSMOS_CASSANDRA_ENDPOINT'
client.GetDatabaseAccount(COSMOS_CASSANDRA_ENDPOINT)
#azure.cosmos.errors.HTTPFailure: Status code: 404
client.ReadDatabase(EXISTING_KEYSPACE_NAME)
#azure.cosmos.errors.HTTPFailure: Status code: 404
Мне интересно, является ли использование cosmos_client правильным способом взаимодействия с экземпляром Cosmos Cassandra для изменения пропускной способности моего приложения Python. Если да, то как мне правильно настроить cosmos_client? Возможно, есть способ сделать это напрямую через модификацию базы данных, используя cassandra-driver.
1 ответ
После непродолжительного труда с попыткой и невозможностью доступа к базе данных через CosmosClient или DocumentClient в Python и.NET единственный способ, которым я мог установить выделенную пропускную способность из кода, был через выполнение cql непосредственно через драйвер cassandra, выполнив следующее (в Python):
from cassandra.cqlengine import connection
connection.setup(<CONNECTION_SETUP_ARGS>)
session = connection.get_session()
session.execute("use <CASSANDRA_NAMESPACE>")
session.execute("alter table <CASSANDRA_TABLE_NAME> with cosmosdb_provisioned_throughput=<DESIRED_THROUGHPUT>")
Я думаю, что я получил эту идею изначально отсюда.
В качестве альтернативы я думаю, что вы можете запускать команды через модуль подпроцесса для взаимодействия с базой данных через интерфейс командной строки Azure, но я не тестировал этот метод. Если бы вы могли сделать это таким образом, это обеспечило бы средства для выполнения широкого спектра взаимодействий управления базами данных из кода. Буду следить, если я попробую.