Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Det här exemplet visar hur du använder Azure SDK för Python-hanteringsbibliotek för att programmatiskt skapa en flexibel Azure Database for MySQL-server och en motsvarande databas. Det innehåller också ett grundläggande skript som använder biblioteket mysql-connector-python (inte en del av Azure SDK) för att ansluta till och köra frågor mot databasen.
Du kan anpassa det här exemplet för att skapa en flexibel Azure Database for PostgreSQL-server genom att ändra relevanta SDK-importer och API-anrop.
Om du föredrar att använda Azure CLI tillhandahålls motsvarande Azure CLI-kommandon senare i den här artikeln. En grafisk upplevelse finns i dokumentationen för Azure-portalen:
Om inget annat anges fungerar alla exempel och kommandon konsekvent i Linux/macOS bash- och Windows-kommandogränssnitt.
1: Konfigurera din lokala utvecklingsmiljö
Om du inte redan har gjort det konfigurerar du en miljö där du kan köra koden. Här är några alternativ:
Konfigurera en virtuell Python-miljö med hjälp av
venveller valfritt verktyg. Om du vill börja använda den virtuella miljön måste du aktivera den. Information om hur du installerar Python finns i Installera 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)Använd en conda-miljö. Information om hur du installerar Conda finns i Installera Miniconda.
Använd en Dev-container i Visual Studio Code eller GitHub Codespaces.
2: Installera nödvändiga Azure-bibliotekspaket
I det här steget installerar du de Azure SDK-bibliotek som behövs för att skapa databasen.
I konsolen skapar du en requirements.txt fil som visar de hanteringsbibliotek som används i det här exemplet:
azure-mgmt-resource azure-mgmt-rdbms azure-identity mysql-connector-pythonAnmärkning
Biblioteket
mysql-connector-pythonär inte en del av Azure SDK. Det är ett bibliotek från tredje part som du kan använda för att ansluta till MySQL-databaser. Du kan också använda andra bibliotek, till exempelPyMySQLellerSQLAlchemy, för att ansluta till MySQL-databaser.Installera kraven i konsolen med den virtuella miljön aktiverad:
pip install -r requirements.txtAnmärkning
Om du försöker installera mysql-biblioteket i ett 32-bitars Python-bibliotek i Windows uppstår ett fel om filen mysql.h . I det här fallet installerar du en 64-bitarsversion av Python och försöker igen.
3. Ange miljövariabler
I det här steget anger du miljövariabler som ska användas i koden i den här artikeln. Koden använder os.environ metoden för att hämta värdena.
#!/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: Skriv kod för att skapa och konfigurera en flexibel MySQL-server med en databas
I det här steget skapar du en Python-fil med namnet provision_blob.py med följande kod. Det här Python-skriptet använder Azure SDK för Python-hanteringsbibliotek för att skapa en resursgrupp, en flexibel MySQL-server och en databas på den servern.
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}")
Autentisering i koden
Senare i den här artikeln loggar du in på Azure med Hjälp av Azure CLI för att köra exempelkoden. Om ditt konto har tillräcklig behörighet för att skapa resursgrupper och lagringsresurser i din Azure-prenumeration bör skriptet köras utan ytterligare konfiguration.
För användning i produktionsmiljöer rekommenderar vi att du autentiserar med tjänstens huvudnamn genom att ange lämpliga miljövariabler. Den här metoden möjliggör säker, icke-interaktiv åtkomst som lämpar sig för automatisering. Installationsinstruktioner finns i Autentisera Python-appar med Azure-tjänster.
Se till att tjänstens huvudprincip har tilldelats en roll med tillräckliga behörigheter, till exempel rollen Deltagare på prenumerationsnivå eller nivå för resursgrupp. Mer information om hur du tilldelar roller finns i Rollbaserad åtkomstkontroll (RBAC) i Azure.
Referenslänkar för klasser som används i koden
- ResourceManagementClient (azure.mgmt.resource)
- MySQLManagementClient (azure.mgmt.rdbms.mysql_flexibleservers)
- Server (azure.mgmt.rdbms.mysql_flexibleservers.models)
- ServerVersion (azure.mgmt.rdbms.mysql_flexibleservers.models)
Information om PostreSQL-databasservern finns i:
5: Kör skriptet
Logga in på Azure med hjälp av Azure CLI om du inte redan har gjort det.
az loginKör skriptet:
python provision_db.pySkriptet tar en minut eller två att slutföra.
6: Infoga en post och göra en sökning i databasen
I det här steget skapar du en tabell i databasen och infogar en post. Du kan använda biblioteket mysql-connector för att ansluta till databasen och köra SQL-kommandon.
Skapa en fil med namnet use_db.py med följande kod.
Den här koden fungerar endast för MySQL; du använder olika bibliotek för 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()All den här koden använder API:et mysql.connector. Den enda Azure-specifika delen är den fullständiga värddomänen för MySQL-servern (mysql.database.azure.com).
Ladda sedan ned certifikatet som behövs för att kommunicera via TSL/SSL med din Azure Database for MySQL-server. Mer information finns i Hämta ett SSL-certifikat i Dokumentation om 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"Kör slutligen koden:
python use_db.py
Om du ser ett fel om att klientens IP-adress inte är tillåten kontrollerar du att du har definierat miljövariabeln PUBLIC_IP_ADDRESS korrekt. Om du redan har skapat MySQL-servern med fel IP-adress kan du lägga till en annan i Azure-portalen. I portalen väljer du MySQL-servern och sedan Anslutningssäkerhet. Lägg till IP-adressen för din arbetsstation i listan över tillåtna IP-adresser.
7: Rensa resurser
Kör kommandot az group delete om du inte behöver behålla resursgruppen och lagringsresurserna som skapas i det här exemplet.
Resursgrupper debiteras inte några löpande avgifter i din prenumeration, men resurser, till exempel lagringskonton, i resursgruppen kan fortsätta att debiteras. Det är en bra idé att rensa alla grupper som du inte aktivt använder. Argumentet --no-wait gör att kommandot kan returneras omedelbart i stället för att vänta på att åtgärden ska slutföras.
#!/bin/bash
az group delete -n $AZURE_RESOURCE_GROUP_NAME --no-wait
Du kan också använda metoden ResourceManagementClient.resource_groups.begin_delete för att ta bort en resursgrupp från koden. Koden i Exempel: Skapa en resursgrupp visar användning.
Som referens: motsvarande Azure CLI-kommandon
Följande Azure CLI-kommandon utför samma etableringssteg som Python-skriptet. För en PostgreSQL-databas, använd az postgres flexible-server-kommandon.
#!/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."
Se även
- Exempel: Skapa en resursgrupp
- Exempel: Lista resursgrupper i en prenumeration
- Exempel: Skapa Azure Storage
- Exempel: Använda Azure Storage
- Exempel: Skapa och distribuera en webbapp
- Exempel: Skapa en virtuell dator
- Använda Azure Managed Disks med virtuella datorer
- Slutför en kort undersökning om Azure SDK för Python