Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
In dit voorbeeld ziet u hoe u de Azure SDK voor Python-beheerbibliotheken gebruikt om programmatisch een flexibele Azure Database for MySQL-server en een bijbehorende database te maken. Het bevat ook een script dat gebruikmaakt van de mysql-connector-python bibliotheek (geen deel van de Azure SDK) om verbinding te maken met de database en er query's op uit te voeren.
U kunt dit voorbeeld aanpassen om een flexibele Azure Database for PostgreSQL-server te maken door de relevante SDK-import- en API-aanroepen te wijzigen.
Als u liever de Azure CLI gebruikt, vindt u equivalente Azure CLI-opdrachten verderop in dit artikel. Raadpleeg de documentatie van Azure Portal voor een grafische ervaring:
- Een MySQL-server maken
- Een PostgreSQL-server maken
- Een DocumentDB-cluster maken (met MongoDB-compatibiliteit)
Tenzij anders vermeld, werken alle voorbeelden en opdrachten in dit artikel consistent in Linux/macOS bash en Windows opdrachtshells.
1: Uw lokale ontwikkelomgeving instellen
Als u dat nog niet hebt gedaan, stelt u een omgeving in waar u de code kunt uitvoeren. Hieronder volgen een aantal opties:
Configureer een virtuele Python-omgeving met behulp van
venvof uw hulpprogramma naar keuze. Als u de virtuele omgeving wilt gaan gebruiken, moet u deze activeren. Om Python te installeren, zie Python installeren.#!/bin/bash # Create a virtual environment python -m venv .venv # Activate the virtual environment source .venv/Scripts/activate # only required for Windows (Git Bash)Gebruik een conda-omgeving. Zie Miniconda installeren om Conda te installeren.
Gebruik een Dev Container- in Visual Studio Code- of GitHub Codespaces.
2: De benodigde Azure-bibliotheekpakketten installeren
In deze stap installeert u de Azure SDK-bibliotheken die nodig zijn om de database te maken.
Maak in uw console een requirements.txt bestand met de beheerbibliotheken die in dit voorbeeld worden gebruikt:
azure-mgmt-resource azure-mgmt-rdbms azure-identity mysql-connector-pythonOpmerking
De
mysql-connector-pythonbibliotheek maakt geen deel uit van de Azure SDK. Het is een bibliotheek van derden die u kunt gebruiken om verbinding te maken met MySQL-databases. U kunt ook andere bibliotheken gebruiken, zoalsPyMySQLofSQLAlchemy.Installeer de vereisten in de console waarop de virtuele omgeving is geactiveerd:
pip install -r requirements.txtOpmerking
In Windows produceert een poging om de mysql-bibliotheek te installeren in een 32-bits Python-bibliotheek een fout over het bestand mysql.h . In dit geval installeert u een 64-bits versie van Python en probeert u het opnieuw.
3. Omgevingsvariabelen instellen
In deze stap stelt u omgevingsvariabelen in voor gebruik in de code in dit artikel. De code gebruikt de os.environ methode om de waarden op te halen.
#!/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_Password> # Change to your preferred admin password
export DB_NAME=<DB_Name> # Change to your preferred database name
export DB_PORT=3306
export DB_SERVER_VERSION=EIGHT0_21
4: Code schrijven om een Flexibele MySQL-server te maken en te configureren met een database
In deze stap maakt u een Python-bestand met de naam provision_db.py met de volgende code. Dit script maakt gebruik van de Azure SDK voor Python beheerbibliotheken om een resourcegroep, een flexibele MySQL-server en een database op die server te maken.
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://learn.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}")
Verificatie in de code
Verderop in dit artikel meldt u zich aan bij Azure met behulp van de Azure CLI om de voorbeeldcode uit te voeren. Als uw account voldoende machtigingen heeft om resourcegroepen en databaseresources te maken in uw Azure-abonnement, wordt het script uitgevoerd zonder extra configuratie.
Verifieer voor productieomgevingen met behulp van een service-principal en stel de juiste omgevingsvariabelen in. Deze aanpak maakt veilige, niet-interactieve toegang mogelijk die geschikt is voor automatisering. Zie Python-apps verifiëren met Azure-services voor installatie-instructies.
Zorg ervoor dat aan de service-principal een rol met voldoende machtigingen is toegewezen, zoals de rol Inzender op abonnements- of resourcegroepniveau. Zie op rollen gebaseerd toegangsbeheer (RBAC) in Azure voor meer informatie over het toewijzen van rollen.
Referentiekoppelingen voor klassen die in de code worden gebruikt
- ResourceManagementClient (azure.mgmt.resource)
- MySQLManagementClient (azure.mgmt.rdbms.mysql_flexibleservers)
- Server (azure.mgmt.rdbms.mysql_flexibleservers.models)
- Serverversie (azure.mgmt.rdbms.mysql_flexibleservers.models)
Zie voor PostgreSQL-databaseserver:
5: Het script uitvoeren
Als u dat nog niet hebt gedaan, meldt u zich aan bij Azure met behulp van de Azure CLI:
az loginVoer het script uit:
python provision_db.pyHet duurt een paar minuten voordat het script is voltooid.
6: Een record invoegen en een query uitvoeren op de database
In deze stap maakt u een tabel in de database en voegt u een record in. Gebruik de mysql-connector bibliotheek om verbinding te maken met de database en SQL-opdrachten uit te voeren.
Maak een bestand met de naam use_db.py met de volgende code.
Deze code werkt alleen voor MySQL. U gebruikt verschillende bibliotheken voor 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='./DigiCertGlobalRootG2.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()Al deze code maakt gebruik van de
mysql.connectorAPI. Het enige Azure-specifieke onderdeel is het volledige hostdomein voor MySQL-server (mysql.database.azure.com).Download vervolgens het basiscertificaat dat nodig is om via TLS/SSL te communiceren met uw Azure Database for MySQL-server. Azure MySQL Flexible Server maakt gebruik van het DigiCert Global Root G2-certificaat. Zie Verbinding maken met Azure Database for MySQL - Flexible Server met versleutelde verbindingen voor meer informatie.
#!/bin/bash # Download DigiCert Global Root G2 certificate required for Azure MySQL SSL connections CERT_URL="https://cacerts.digicert.com/DigiCertGlobalRootG2.crt.pem" CERT_FILE="DigiCertGlobalRootG2.crt.pem" echo "Downloading SSL certificate..." curl -o "$CERT_FILE" "$CERT_URL"Voer ten slotte de code uit:
python use_db.py
Als er een foutbericht wordt weergegeven dat het IP-adres van de client niet is toegestaan, controleert u of u de omgevingsvariabele PUBLIC_IP_ADDRESS juist hebt gedefinieerd. Als u de MySQL-server al met het verkeerde IP-adres hebt gemaakt, kunt u een andere server toevoegen in Azure Portal. Selecteer in de portal de MySQL-server en selecteer Vervolgens Netwerken. Voeg het IP-adres van uw werkstation toe aan de lijst met toegestane IP-adressen.
7: Resources opschonen
Voer de opdracht az group delete uit als u de resourcegroep en databaseresources die in dit voorbeeld zijn gemaakt, niet hoeft te behouden.
Er worden geen lopende kosten in rekening gebracht voor resourcegroepen binnen uw abonnement, maar voor resources in de resourcegroep kunnen wel kosten blijven ontstaan. Het is een goede gewoonte om een groep op te schonen die u niet actief gebruikt. Met het argument --no-wait kan de opdracht onmiddellijk worden geretourneerd in plaats van te wachten tot de bewerking is voltooid.
#!/bin/bash
az group delete -n $AZURE_RESOURCE_GROUP_NAME --no-wait
U kunt ook de methode ResourceManagementClient.resource_groups.begin_delete gebruiken om een resourcegroep uit code te verwijderen. De code in voorbeeld: Een resourcegroep maken laat het gebruik zien.
Ter referentie: equivalente Azure CLI-opdrachten
De volgende Azure CLI-opdrachten voeren dezelfde inrichtingsstappen uit als het Python-script. Gebruik az postgres flexible-server opdrachten voor een PostgreSQL-database.
#!/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="8.4"
# 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."
Zie ook
- Voorbeeld: Een resourcegroep maken
- voorbeeld: resourcegroepen weergeven in een abonnement
- voorbeeld: Azure Storage- maken
- voorbeeld: Azure Storage- gebruiken
- Voorbeeld: Een web-app maken en implementeren
- voorbeeld: een virtuele machine maken
- Azure Managed Disks gebruiken met virtuele machines
- Voltooi een korte enquête over de Azure SDK voor Python