Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом примере показано, как использовать библиотеки управления Azure SDK для Python для программного создания гибкого сервера Базы данных Azure для MySQL и соответствующей базы данных. Он также включает в себя базовый скрипт, использующий библиотеку mysql-connector-python (не часть пакета SDK Azure) для подключения к базе данных и запроса к ней.
Этот пример можно адаптировать для создания гибкого сервера Базы данных Azure для PostgreSQL, изменив соответствующие импорты пакета SDK и вызовы API.
Если вы предпочитаете использовать Azure CLI, в этой статье приведены эквивалентные команды Azure CLI . Сведения о графическом интерфейсе см. в документации по порталу Azure:
Если иное не указано, все примеры и команды работают согласованно в оболочках команд Linux или macOS bash и Windows.
1. Настройка локальной среды разработки
Если вы еще не сделали этого, настройте среду, в которой можно запустить код. Ниже приведено несколько вариантов:
Настройте виртуальную среду Python с помощью
venv
или выбранного средства. Чтобы начать использовать виртуальную среду, обязательно активируйте ее. Сведения об установке Python см. в разделе "Установка Python".#!/bin/bash # Create a virtual environment python -m venv .venv # Activate the virtual environment source .venv/Scripts/activate # only required for Windows (Git Bash)
Используйте среду conda. Сведения об установке Conda см. в разделе "Установка Miniconda".
Используйте контейнер разработки в Visual Studio Code или GitHub Codespaces.
2. Установка необходимых пакетов библиотек Azure
На этом шаге необходимо установить библиотеки пакета SDK Azure, необходимые для создания базы данных.
В консоли создайте файлrequirements.txt , в который перечислены библиотеки управления, используемые в этом примере:
azure-mgmt-resource azure-mgmt-rdbms azure-identity mysql-connector-python
Замечание
Библиотека
mysql-connector-python
не является частью пакета SDK Azure. Это сторонняя библиотека, которую можно использовать для подключения к базам данных MySQL. Вы также можете использовать другие библиотеки, такие какPyMySQL
илиSQLAlchemy
, чтобы подключиться к базам данных MySQL.В консоли с активированной виртуальной средой установите требования:
pip install -r requirements.txt
Замечание
В Windows попытка установить библиотеку mysql в 32-разрядную библиотеку Python выдает ошибку о файле mysql.h . В этом случае установите 64-разрядную версию Python и повторите попытку.
3. Установите переменные среды
На этом шаге вы устанавливаете переменные среды для использования в коде в этой статье. Код использует os.environ
метод для получения значений.
#!/bin/bash
export AZURE_RESOURCE_GROUP_NAME=<ResourceGroupName> # Change to your preferred resource group name
export LOCATION=<Location> # Change to your preferred region
export AZURE_SUBSCRIPTION_ID=$(az account show --query id --output tsv)
export PUBLIC_IP_ADDRESS=$(curl -s https://api.ipify.org)
export DB_SERVER_NAME=<DB_Server_Name> # Change to your preferred DB server name
export DB_ADMIN_NAME=<DB_Admin_Name> # Change to your preferred admin name
export DB_ADMIN_PASSWORD=<DB_Admin_Passwrod> # Change to your preferred admin password
export DB_NAME=<DB_Name> # Change to your preferred database name
export DB_PORT=3306
export version=ServerVersion.EIGHT0_21
4. Написание кода для создания и настройки гибкого сервера MySQL с базой данных
На этом шаге вы создадите файл Python с именем provision_blob.py со следующим кодом. Этот скрипт Python использует библиотеки управления Azure SDK для Python для создания группы ресурсов, гибкого сервера MySQL и базы данных на этом сервере.
import random, os
from azure.identity import DefaultAzureCredential
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.rdbms.mysql_flexibleservers import MySQLManagementClient
from azure.mgmt.rdbms.mysql_flexibleservers.models import Server, ServerVersion
# Acquire a credential object using CLI-based authentication.
credential = DefaultAzureCredential()
# Retrieve subscription ID from environment variable
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
# Retrieve resource group name and location from environment variables
RESOURCE_GROUP_NAME = os.environ["AZURE_RESOURCE_GROUP_NAME"]
LOCATION = os.environ["LOCATION"]
# Step 1: Provision the resource group.
resource_client = ResourceManagementClient(credential, subscription_id)
rg_result = resource_client.resource_groups.create_or_update(RESOURCE_GROUP_NAME,
{ "location": LOCATION })
print(f"Provisioned resource group {rg_result.name}")
# For details on the previous code, see Example: Provision a resource group
# at https://docs.microsoft.com/azure/developer/python/azure-sdk-example-resource-group
# Step 2: Provision the database server
# Retrieve server name, admin name, and admin password from environment variables
db_server_name = os.environ.get("DB_SERVER_NAME")
db_admin_name = os.environ.get("DB_ADMIN_NAME")
db_admin_password = os.environ.get("DB_ADMIN_PASSWORD")
# Obtain the management client object
mysql_client = MySQLManagementClient(credential, subscription_id)
# Provision the server and wait for the result
server_version = os.environ.get("DB_SERVER_VERSION")
poller = mysql_client.servers.begin_create(RESOURCE_GROUP_NAME,
db_server_name,
Server(
location=LOCATION,
administrator_login=db_admin_name,
administrator_login_password=db_admin_password,
version=ServerVersion[server_version] # Note: dictionary-style enum access
)
)
server = poller.result()
print(f"Provisioned MySQL server {server.name}")
# Step 3: Provision a firewall rule to allow the local workstation to connect
RULE_NAME = "allow_ip"
ip_address = os.environ["PUBLIC_IP_ADDRESS"]
# Provision the rule and wait for completion
poller = mysql_client.firewall_rules.begin_create_or_update(RESOURCE_GROUP_NAME,
db_server_name, RULE_NAME,
{ "start_ip_address": ip_address, "end_ip_address": ip_address }
)
firewall_rule = poller.result()
print(f"Provisioned firewall rule {firewall_rule.name}")
# Step 4: Provision a database on the server
db_name = os.environ.get("DB_NAME", "example-db1")
poller = mysql_client.databases.begin_create_or_update(RESOURCE_GROUP_NAME,
db_server_name, db_name, {})
db_result = poller.result()
print(f"Provisioned MySQL database {db_result.name} with ID {db_result.id}")
Аутентификация в коде
Далее в этой статье вы войдите в Azure с помощью Azure CLI для выполнения примера кода. Если у вашей учетной записи есть достаточные разрешения для создания групп ресурсов и ресурсов хранилища в подписке Azure, скрипт должен успешно выполняться без дополнительной настройки.
Для использования в рабочих средах мы рекомендуем выполнять аутентификацию с помощью учетной записи службы, задав соответствующие переменные среды. Такой подход обеспечивает безопасный, неинтерактивный доступ, подходящий для автоматизации. Инструкции по настройке см. в статье "Проверка подлинности приложений Python с помощью служб Azure".
Убедитесь, что субъект-служба назначена роль с соответствующими разрешениями, например роль участника на уровне подписки или группы ресурсов. Дополнительные сведения о назначении ролей см. в статье "Управление доступом на основе ролей" (RBAC) в Azure.
Ссылки на классы, используемые в коде
- ResourceManagementClient (azure.mgmt.resource)
- MySQLManagementClient (azure.mgmt.rdbms.mysql_flexibleservers)
- Сервер (azure.mgmt.rdbms.mysql_flexibleservers.models)
- ServerVersion (azure.mgmt.rdbms.mysql_flexibleservers.models)
Сведения о сервере базы данных PostreSQL см. в статье:
5. Запуск скрипта
Если вы еще не сделали этого, войдите в Azure с помощью Azure CLI:
az login
Запустите скрипт:
python provision_db.py
Выполнение скрипта занимает минуту или два.
6. Вставка записи и запрос базы данных
На этом шаге вы создадите таблицу в базе данных и вставьте запись. Библиотеку mysql-connector можно использовать для подключения к базе данных и выполнения команд SQL.
Создайте файл с именем use_db.py со следующим кодом.
Этот код работает только для MySQL; вы используете разные библиотеки для PostgreSQL.
import os import mysql.connector db_server_name = os.environ["DB_SERVER_NAME"] db_admin_name = os.getenv("DB_ADMIN_NAME") db_admin_password = os.getenv("DB_ADMIN_PASSWORD") db_name = os.getenv("DB_NAME") db_port = os.getenv("DB_PORT") connection = mysql.connector.connect(user=db_admin_name, password=db_admin_password, host=f"{db_server_name}.mysql.database.azure.com", port=db_port, database=db_name, ssl_ca='./BaltimoreCyberTrustRoot.crt.pem') cursor = connection.cursor() """ # Alternate pyodbc connection; include pyodbc in requirements.txt import pyodbc driver = "{MySQL ODBC 5.3 UNICODE Driver}" connect_string = f"DRIVER={driver};PORT=3306;SERVER={db_server_name}.mysql.database.azure.com;" \ f"DATABASE={DB_NAME};UID={db_admin_name};PWD={db_admin_password}" connection = pyodbc.connect(connect_string) """ table_name = "ExampleTable1" sql_create = f"CREATE TABLE {table_name} (name varchar(255), code int)" cursor.execute(sql_create) print(f"Successfully created table {table_name}") sql_insert = f"INSERT INTO {table_name} (name, code) VALUES ('Azure', 1)" insert_data = "('Azure', 1)" cursor.execute(sql_insert) print("Successfully inserted data into table") sql_select_values= f"SELECT * FROM {table_name}" cursor.execute(sql_select_values) row = cursor.fetchone() while row: print(str(row[0]) + " " + str(row[1])) row = cursor.fetchone() connection.commit()
Весь этот код использует API mysql.connector. Единственная часть, относящаяся к Azure, — это полный домен узла данного сервера MySQL (mysql.database.azure.com).
Затем скачайте сертификат, необходимый для обмена данными по протоколу TSL/SSL с сервером Базы данных Azure для MySQL. Дополнительные сведения см. в статье "Получение SSL-сертификата " в документации по Базе данных Azure для MySQL.
#!/bin/bash # Download Baltimore CyberTrust Root certificate required for Azure MySQL SSL connections CERT_URL="https://www.digicert.com/CACerts/BaltimoreCyberTrustRoot.crt.pem" CERT_FILE="BaltimoreCyberTrustRoot.crt.pem" echo "Downloading SSL certificate..." curl -o "$CERT_FILE" "$CERT_URL"
Наконец, запустите код:
python use_db.py
Если вы видите ошибку, связанную с тем, что IP-адрес вашего клиента не разрешен, убедитесь, что вы правильно определили переменную среды PUBLIC_IP_ADDRESS
. Если вы уже создали сервер MySQL с неправильным IP-адресом, вы можете добавить другой на портале Azure. На портале выберите сервер MySQL и выберите безопасность подключения. Добавьте IP-адрес рабочей станции в список разрешенных IP-адресов.
7. Очистка ресурсов
Выполните команду az group delete , если вам не нужно хранить группу ресурсов и ресурсы хранилища, созданные в этом примере.
Группы ресурсов не несут никаких текущих расходов в подписке, но ресурсы, такие как учетные записи хранения, в группе ресурсов могут по-прежнему влечь за собой расходы. Рекомендуется очистить любую группу, которую вы активно не используете. Аргумент --no-wait
позволяет команде немедленно вернуться, а не ожидать завершения операции.
#!/bin/bash
az group delete -n $AZURE_RESOURCE_GROUP_NAME --no-wait
Можно также использовать ResourceManagementClient.resource_groups.begin_delete
метод для удаления группы ресурсов из кода.
Код в примере: создание группы ресурсов демонстрирует использование.
Для справки: эквивалентные команды Azure CLI
Следующие команды Azure CLI выполняют те же действия по подготовке, что и скрипт Python. Для базы данных PostgreSQL используйте az postgres flexible-server
команды.
#!/bin/bash
#!/bin/bash
# Set variables
export LOCATION=<Location> # Change to your preferred region
export AZURE_RESOURCE_GROUP_NAME=<ResourceGroupName> # Change to your preferred resource group name
export DB_SERVER_NAME=<DB_Server_Name> # Change to your preferred DB server name
export DB_ADMIN_NAME=<DB_Admin_Name> # Change to your preferred admin name
export DB_ADMIN_PASSWORD=<DB_Admin_Password> # Change to your preferred admin password
export DB_NAME=<DB_Name> # Change to your preferred database name
export DB_SERVER_VERSION="5.7"
# Get public IP address
export PUBLIC_IP_ADDRESS=$(curl -s https://api.ipify.org)
# Provision the resource group
echo "Creating resource group: $AZURE_RESOURCE_GROUP_NAME"
az group create \
--location "$LOCATION" \
--name "$AZURE_RESOURCE_GROUP_NAME"
# Provision the MySQL Flexible Server
echo "Creating MySQL Flexible Server: $DB_SERVER_NAME"
az mysql flexible-server create \
--location "$LOCATION" \
--resource-group "$AZURE_RESOURCE_GROUP_NAME" \
--name "$DB_SERVER_NAME" \
--admin-user "$DB_ADMIN_NAME" \
--admin-password "$DB_ADMIN_PASSWORD" \
--sku-name Standard_B1ms \
--version "$DB_SERVER_VERSION" \
--yes
# Provision a firewall rule to allow access from the public IP address
echo "Creating firewall rule for public IP: $PUBLIC_IP_ADDRESS"
az mysql flexible-server firewall-rule create \
--resource-group "$AZURE_RESOURCE_GROUP_NAME" \
--name "$DB_SERVER_NAME" \
--rule-name allow_ip \
--start-ip-address "$PUBLIC_IP_ADDRESS" \
--end-ip-address "$PUBLIC_IP_ADDRESS"
# Provision the database
echo "Creating database: $DB_NAME"
az mysql flexible-server db create \
--resource-group "$AZURE_RESOURCE_GROUP_NAME" \
--server-name "$DB_SERVER_NAME" \
--database-name "$DB_NAME"
echo "MySQL Flexible Server and database created successfully."
См. также
- Пример. Создание группы ресурсов
- Пример. Перечисление групп ресурсов в подписке
- Пример. Создание службы хранилища Azure
- Пример. Использование службы хранилища Azure
- Пример. Создание и развертывание веб-приложения
- Пример. Создание виртуальной машины
- Использование управляемых дисков Azure с виртуальными машинами
- Пройдите краткий опрос о пакете SDK Azure для Python