Contoh: Menggunakan pustaka Azure untuk membuat database
Contoh ini menunjukkan cara menggunakan pustaka manajemen Azure SDK dalam skrip Python untuk membuat instans dan database server fleksibel Azure Database for MySQL. Ini juga menyediakan skrip sederhana untuk mengkueri database menggunakan pustaka konektor mysql (bukan bagian dari Azure SDK). Anda dapat menggunakan kode serupa untuk membuat instans dan database server fleksibel Azure Database for PostgreSQL.
Perintah Azure CLI yang setara tersedia nanti di artikel ini. Jika Anda lebih suka menggunakan portal Azure, lihat Membuat server MySQL atau Membuat server PostgreSQL.
Semua perintah dalam artikel ini bekerja secara sama di bash Linux/macOS dan shell perintah Windows kecuali ada catatan.
1: Siapkan lingkungan pengembangan lokal Anda
Jika Anda belum melakukannya, siapkan lingkungan tempat Anda dapat menjalankan kode. Berikut ini adalah beberapa opsi:
Mengonfigurasi lingkungan virtual Python. Anda dapat membuat lingkungan virtual secara lokal atau di Azure Cloud Shell dan menjalankan kode di sana. Pastikan untuk mengaktifkan lingkungan virtual untuk mulai menggunakannya.
Gunakan lingkungan conda.
Gunakan Kontainer Dev di Visual Studio Code atau GitHub Codespaces.
2: Instal paket pustaka Azure yang diperlukan
Buat file bernama requirements.txt dengan konten berikut:
azure-mgmt-resource
azure-mgmt-rdbms
azure-identity
mysql-connector-python
Di terminal dengan lingkungan virtual diaktifkan, instal persyaratan:
pip install -r requirements.txt
Catatan
Pada Windows, mencoba menginstal pustaka mysql ke pustaka Python 32-bit menghasilkan kesalahan tentang file mysql.h. Dalam hal ini, instal Python versi 64-bit dan coba lagi.
3: Menulis kode untuk membuat database
Buat file Python bernama provision_db.py dengan kode berikut. Komentar akan menjelaskan detailnya. Secara khusus, tentukan variabel lingkungan untuk AZURE_SUBSCRIPTION_ID
dan PUBLIC_IP_ADDRESS
. Variabel terakhir adalah alamat IP stasiun kerja Anda agar sampel ini dapat dijalankan. Anda dapat menggunakan WhatsIsMyIP untuk menemukan alamat IP Anda.
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"]
# Constants we need in multiple places: the resource group name and the region
# in which we provision resources. You can change these values however you want.
RESOURCE_GROUP_NAME = 'PythonAzureExample-DB-rg'
LOCATION = "southcentralus"
# 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
# We use a random number to create a reasonably unique database server name.
# If you've already provisioned a database and need to re-run the script, set
# the DB_SERVER_NAME environment variable to that name instead.
#
# Also set DB_USER_NAME and DB_USER_PASSWORD variables to avoid using the defaults.
db_server_name = os.environ.get("DB_SERVER_NAME", f"python-azure-example-mysql-{random.randint(1,100000):05}")
db_admin_name = os.environ.get("DB_ADMIN_NAME", "azureuser")
db_admin_password = os.environ.get("DB_ADMIN_PASSWORD", "ChangePa$$w0rd24")
# Obtain the management client object
mysql_client = MySQLManagementClient(credential, subscription_id)
# Provision the server and wait for the result
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.FIVE7
)
)
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"]
# For the above code, create an environment variable named PUBLIC_IP_ADDRESS that
# contains your workstation's public IP address as reported by a site like
# https://whatismyipaddress.com/.
# 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}")
Autentikasi dalam kode
Kemudian dalam artikel ini, Anda masuk ke Azure dengan Azure CLI untuk menjalankan kode sampel. Jika akun Anda memiliki izin untuk membuat grup sumber daya dan sumber daya penyimpanan di langganan Azure Anda, kode akan berhasil dijalankan.
Untuk menggunakan kode tersebut dalam skrip produksi, Anda dapat mengatur variabel lingkungan untuk menggunakan metode berbasis perwakilan layanan untuk autentikasi. Untuk mempelajari selengkapnya, lihat Cara mengautentikasi aplikasi Python dengan layanan Azure. Anda perlu memastikan bahwa perwakilan layanan memiliki izin yang memadai untuk membuat grup sumber daya dan sumber daya penyimpanan dalam langganan Anda dengan menetapkan peran yang sesuai di Azure; misalnya, peran Kontributor pada langganan Anda.
Tautan referensi untuk kelas yang digunakan dalam kode ini
- ResourceManagementClient (azure.mgmt.resource)
- MySQLManagementClient (azure.mgmt.rdbms.mysql_flexibleservers)
- Server (azure.mgmt.rdbms.mysql_flexibleservers.models)
- ServerVersion (azure.mgmt.rdbms.mysql_flexibleservers.models)
Untuk server database PostreSQL, lihat:
4: Jalankan skrip
Jika Anda belum melakukannya, masuk ke Azure menggunakan Azure CLI:
az login
Atur
AZURE_SUBSCRIPTION_ID
variabel lingkungan danPUBLIC_IP_ADDRESS
. Anda dapat menjalankan perintah az account show untuk mendapatkan ID langganan Anda dariid
properti dalam output. Anda dapat menggunakan WhatsIsMyIP untuk menemukan alamat IP Anda.Secara opsional, atur
DB_SERVER_NAME
variabel lingkungan ,DB_ADMIN_NAME
, danDB_ADMIN_PASSWORD
; jika tidak, default kode digunakan.Jalankan skrip:
python provision_db.py
5: Menyisipkan catatan dan kueri database
Buat file bernama use_db.py dengan kode berikut. Perhatikan dependensi pada DB_SERVER_NAME
variabel lingkungan , , DB_ADMIN_NAME
dan DB_ADMIN_PASSWORD
. Anda mendapatkan nilai-nilai ini dari output menjalankan kode sebelumnya provision_db.py atau dalam kode itu sendiri.
Kode ini hanya berfungsi untuk MySQL; Anda menggunakan pustaka yang berbeda untuk PostgreSQL.
import os
import mysql.connector
db_server_name = os.environ["DB_SERVER_NAME"]
db_admin_name = os.getenv("DB_ADMIN_NAME", "azureuser")
db_admin_password = os.getenv("DB_ADMIN_PASSWORD", "ChangePa$$w0rd24")
db_name = os.getenv("DB_NAME", "example-db1")
db_port = os.getenv("DB_PORT", 3306)
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()
Semua kode ini menggunakan API mysql.connector. Satu-satunya bagian khusus Azure adalah domain host penuh untuk server MySQL (mysql.database.azure.com).
Selanjutnya, unduh sertifikat yang diperlukan untuk berkomunikasi melalui TSL/SSL dengan server Azure Database for MySQL Anda dari https://www.digicert.com/CACerts/BaltimoreCyberTrustRoot.crt.pem dan simpan file sertifikat ke folder yang sama dengan file Python. Untuk informasi selengkapnya, lihat Mendapatkan Sertifikat SSL di dokumentasi Azure Database for MySQL.
Terakhir, jalankan kode:
python use_db.py
Jika Anda melihat kesalahan bahwa alamat IP klien Anda tidak diizinkan, periksa apakah Anda menentukan variabel PUBLIC_IP_ADDRESS
lingkungan dengan benar. Jika Anda sudah membuat server MySQL dengan alamat IP yang salah, Anda dapat menambahkan yang lain di portal Azure. Di portal, pilih server MySQL, lalu pilih keamanan Koneksi ion. Tambahkan alamat IP stasiun kerja Anda ke daftar alamat IP yang diizinkan.
6: Membersihkan sumber daya
Jalankan perintah az group delete jika Anda tidak perlu menyimpan grup sumber daya dan sumber daya penyimpanan yang dibuat dalam contoh ini.
Grup sumber daya tidak dikenakan biaya berkelanjutan dalam langganan Anda, tetapi sumber daya, seperti akun penyimpanan, dalam grup sumber daya mungkin terus dikenakan biaya. Ini adalah praktik yang baik untuk membersihkan grup apa pun yang tidak Anda gunakan secara aktif. Argumen --no-wait
memungkinkan perintah untuk segera kembali alih-alih menunggu operasi selesai.
az group delete -n PythonAzureExample-DB-rg --no-wait
Anda juga dapat menggunakan metode ResourceManagementClient.resource_groups.begin_delete
untuk menghapus grup sumber daya dari kode. Kode dalam Contoh: Membuat grup sumber daya menunjukkan penggunaan.
Untuk referensi: perintah Azure CLI yang setara
Perintah Azure CLI berikut melengkapi langkah-langkah provisi yang sama dengan skrip Python. Untuk database PostgreSQL, gunakan az postgres flexible-server
perintah.
az group create --location southcentralus --name PythonAzureExample-DB-rg
az mysql flexible-server create --location southcentralus --resource-group PythonAzureExample-DB-rg ^
--name python-azure-example-mysql-12345 --admin-user azureuser --admin-password ChangePa$$w0rd24 ^
--sku-name Standard_B1ms --version 5.7 --yes
# Change the IP address to the public IP address of your workstation, that is, the address shown
# by a site like https://whatismyipaddress.com/.
az mysql flexible-server firewall-rule create --resource-group PythonAzureExample-DB-rg --name python-azure-example-mysql-12345 ^
--rule-name allow_ip --start-ip-address 10.11.12.13 --end-ip-address 10.11.12.13
az mysql flexible-server db create --resource-group PythonAzureExample-DB-rg --server-name python-azure-example-mysql-12345 ^
--database-name example-db1
Lihat juga
- Contoh: Membuat grup sumber daya
- Contoh: Cantumkan grup sumber daya dalam langganan
- Contoh: Membuat Azure Storage
- Contoh: Menggunakan Azure Storage
- Contoh: Membuat dan menyebarkan aplikasi web
- Contoh: Membuat komputer virtual
- Gunakan Azure Managed Disks dengan mesin virtual
- Menyelesaikan survei singkat tentang SDK Azure untuk Python
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk