Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este ejemplo se muestra cómo usar las bibliotecas de administración de Azure SDK para Python para crear mediante programación un servidor flexible de Azure Database for MySQL y una base de datos correspondiente. También incluye un script básico que usa la biblioteca mysql-connector-python (no forma parte del SDK de Azure) para conectarse a la base de datos y consultarla.
Puede adaptar este ejemplo para crear un servidor flexible de Azure Database for PostgreSQL modificando las importaciones de SDK pertinentes y las llamadas API.
Si prefiere usar la CLI de Azure, los comandos equivalentes de la CLI de Azure se proporcionan más adelante en este artículo. Para obtener una experiencia gráfica, consulte la documentación de Azure Portal:
A menos que se especifique lo contrario, todos los ejemplos y comandos funcionan de forma coherente en los shells de comandos de Linux/macOS y Windows.
1: Configuración del entorno de desarrollo local
Si aún no lo ha hecho, configure un entorno en el que pueda ejecutar el código. Estas son algunas opciones:
Configure un entorno virtual de Python mediante
venv
o la herramienta que prefiera. Para empezar a usar el entorno virtual, asegúrese de activarlo. Para instalar Python, consulte Instalación de 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)
Use un entorno de Conda. Para instalar Conda, consulte Instalación de Miniconda.
Usa un contenedor de desarrollo en Visual Studio Code o en GitHub Codespaces .
2: Instalación de los paquetes de biblioteca de Azure necesarios
En este paso, instalará las bibliotecas del SDK de Azure necesarias para crear la base de datos.
En la consola, cree un archivo requirements.txt que muestre las bibliotecas de administración que se usan en este ejemplo:
azure-mgmt-resource azure-mgmt-rdbms azure-identity mysql-connector-python
Nota:
La
mysql-connector-python
biblioteca no forma parte del SDK de Azure. Es una biblioteca de terceros que puede usar para conectarse a bases de datos MySQL. También puede usar otras bibliotecas, comoPyMySQL
oSQLAlchemy
, para conectarse a bases de datos MySQL.En la consola con el entorno virtual activado, instale los requisitos:
pip install -r requirements.txt
Nota:
En Windows, al intentar instalar la biblioteca mysql en una biblioteca de Python de 32 bits se produce un error sobre el archivo mysql.h . En este caso, instale una versión de 64 bits de Python e inténtelo de nuevo.
3. Establecer variables de entorno
En este paso, establecerá las variables de entorno para usarlas en el código de este artículo. El código usa el os.environ
método para recuperar los valores.
#!/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: Escribir código para crear y configurar un servidor flexible de MySQL con una base de datos
En este paso, creará un archivo de Python denominado provision_blob.py con el código siguiente. Este script de Python usa el SDK de Azure para bibliotecas de administración de Python para crear un grupo de recursos, un servidor flexible de MySQL y una base de datos en ese servidor.
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}")
Autenticación en el código
Más adelante en este artículo, inicia sesión en Azure mediante la CLI de Azure para ejecutar el código de ejemplo. Si la cuenta tiene permisos suficientes para crear grupos de recursos y recursos de almacenamiento en la suscripción de Azure, el script debe ejecutarse correctamente sin configuración adicional.
Para su uso en entornos de producción, se recomienda autenticarse con una entidad de servicio estableciendo las variables de entorno adecuadas. Este enfoque permite el acceso seguro y no interactivo adecuado para la automatización. Para obtener instrucciones de configuración, consulte Autenticación de aplicaciones de Python con servicios de Azure.
Asegúrese de que a la entidad de servicio se le asigne un rol con permisos adecuados, como por ejemplo el rol de Colaborador a nivel de suscripción o grupo de recursos. Para más información sobre la asignación de roles, consulte Control de acceso basado en rol (RBAC) en Azure.
Vínculos de referencia para las clases usadas en el código
- ResourceManagementClient (azure.mgmt.resource)
- MySQLManagementClient (azure.mgmt.rdbms.mysql_flexibleservers)
- Servidor (azure.mgmt.rdbms.mysql_flexibleservers.models)
- ServerVersion (azure.mgmt.rdbms.mysql_flexibleservers.models)
Para el servidor de bases de datos PostreSQL, consulte:
5: Ejecutar el script
Si aún no lo ha hecho, inicie sesión en Azure mediante la CLI de Azure:
az login
Ejecuta el script:
python provision_db.py
El script tarda un minuto o dos en completarse.
6: Insertar un registro y consultar la base de datos
En este paso, creará una tabla en la base de datos e insertará un registro. Puede usar la biblioteca mysql-connector para conectarse a la base de datos y ejecutar comandos SQL.
Cree un archivo denominado use_db.py con el código siguiente.
Este código solo funciona para MySQL; se usan bibliotecas diferentes para 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()
Todo este código usa la API mysql.connector. La única parte específica de Azure es el dominio de host completo para el servidor MySQL (mysql.database.azure.com).
A continuación, descargue el certificado necesario para comunicarse a través de TSL/SSL con el servidor de Azure Database for MySQL. Para más información, consulte Obtención de un certificado SSL en la documentación de Azure Database for 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"
Por último, ejecute el código:
python use_db.py
Si ve un error que indica que la dirección IP del cliente no está permitida, compruebe que ha definido correctamente la variable PUBLIC_IP_ADDRESS
de entorno. Si ya ha creado el servidor MySQL con la dirección IP incorrecta, puede agregar otro en Azure Portal. En el portal, seleccione el servidor MySQL y, a continuación, seleccione Seguridad de conexión. Agregue la dirección IP de la estación de trabajo a la lista de direcciones IP permitidas.
7: Limpieza de recursos
Ejecute el comando az group delete si no es necesario mantener el grupo de recursos y los recursos de almacenamiento creados en este ejemplo.
Los grupos de recursos no incurren en cargos continuos en la suscripción, pero los recursos en el grupo de recursos, como las cuentas de almacenamiento, pueden seguir incurriendo en cargos. Se recomienda limpiar cualquier grupo que no se esté usando activamente. El argumento --no-wait
permite que el comando devuelva inmediatamente en lugar de esperar a que finalice la operación.
#!/bin/bash
az group delete -n $AZURE_RESOURCE_GROUP_NAME --no-wait
También puede usar el método ResourceManagementClient.resource_groups.begin_delete
para eliminar un grupo de recursos del código. El código de Ejemplo: Crear un grupo de recursos muestra el uso.
Como referencia: comandos equivalentes de la CLI de Azure
Los siguientes comandos de la CLI de Azure completan los mismos pasos de aprovisionamiento que el script de Python. Para una base de datos postgreSQL, use az postgres flexible-server
comandos.
#!/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."
Consulte también
- ejemplo de : creación de un grupo de recursos
- ejemplo: Enumeración de grupos de recursos en una suscripción
- Ejemplo : Creación de Azure Storage
- Ejemplo: Uso de Azure Storage
- Ejemplo: Creación e implementación de una aplicación web
- ejemplo de : creación de una máquina virtual
- Uso de Azure Managed Disks con máquinas virtuales
- Completar una breve encuesta sobre el SDK de Azure para Python