このブラウザーはサポートされなくなりました。
Microsoft Edge にアップグレードすると、最新の機能、セキュリティ更新プログラム、およびテクニカル サポートを利用できます。
この例では、Azure SDK for Python 管理ライブラリを使用して、Azure Database for MySQL フレキシブル サーバーと対応するデータベースをプログラムで作成する方法を示します。 また、mysql-connector-python ライブラリ (Azure SDK の一部ではない) を使用してデータベースに接続してクエリを実行する基本的なスクリプトも含まれています。
この例を調整して、関連する SDK のインポートと API 呼び出しを変更することで、Azure Database for PostgreSQL フレキシブル サーバーを作成できます。
Azure CLI を使用する場合は、この記事の後半で同等の Azure CLI コマンド を提供します。 グラフィカル エクスペリエンスについては、Azure portal のドキュメントを参照してください。
特に指定しない限り、すべての例とコマンドは、Linux/macOS bash および Windows コマンド シェル間で一貫して動作します。
まだ行っていない場合は、コードを実行できる環境を設定します。 いくつかのオプションを次に示します。
venv
または任意のツールを使用して Python 仮想環境を構成します。 仮想環境の使用を開始するには、必ずアクティブ化してください。 Python をインストールするには、「Python のインストール」を参照してください。
#!/bin/bash# Create a virtual environmentpython -m venv .venv# Activate the virtual environmentsource .venv/Scripts/activate # only required for Windows (Git Bash)
conda 環境を使用します。 Conda をインストールするには、「Miniconda のインストール」を参照してください。
Visual Studio Code またはGitHub Codespaces で開発コンテナーを使用します。
この手順では、データベースの作成に必要な Azure SDK ライブラリをインストールします。
コンソールで、次の例で使用する管理ライブラリを一覧表示するrequirements.txt ファイルを作成します。
azure-mgmt-resourceazure-mgmt-rdbmsazure-identitymysql-connector-python
注
mysql-connector-python
ライブラリは Azure SDK の一部ではありません。 これは、MySQL データベースへの接続に使用できるサードパーティのライブラリです。PyMySQL
やSQLAlchemy
などの他のライブラリを使用して、MySQL データベースに接続することもできます。
仮想環境がアクティブ化された本体に、次の要件をインストールします。
pip install -r requirements.txt
注
Windows では、mysql ライブラリを 32 ビット Python ライブラリにインストールしようとすると、mysql.h ファイルに関するエラーが発生します。 この場合は、64 ビット バージョンの Python をインストールして、もう一度やり直してください。
この手順では、この記事のコードで使用する環境変数を設定します。 このコードでは、os.environ
メソッドを使用して値を取得します。
#!/bin/bashexport AZURE_RESOURCE_GROUP_NAME=<ResourceGroupName> # Change to your preferred resource group nameexport LOCATION=<Location> # Change to your preferred regionexport 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 nameexport DB_ADMIN_NAME=<DB_Admin_Name> # Change to your preferred admin nameexport DB_ADMIN_PASSWORD=<DB_Admin_Passwrod> # Change to your preferred admin passwordexport DB_NAME=<DB_Name> # Change to your preferred database nameexport DB_PORT=3306export version=ServerVersion.EIGHT0_21
この手順では、次のコードを使用して、provision_blob.py という名前の Python ファイルを作成します。 この Python スクリプトでは、Azure SDK for Python 管理ライブラリを使用して、リソース グループ、MySQL フレキシブル サーバー、およびそのサーバー上にデータベースを作成します。
import random, osfrom azure.identity import DefaultAzureCredentialfrom azure.mgmt.resource import ResourceManagementClientfrom azure.mgmt.rdbms.mysql_flexibleservers import MySQLManagementClientfrom azure.mgmt.rdbms.mysql_flexibleservers.models import Server, ServerVersion# Acquire a credential object using CLI-based authentication.credential = DefaultAzureCredential()# Retrieve subscription ID from environment variablesubscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]# Retrieve resource group name and location from environment variablesRESOURCE_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 variablesdb_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 objectmysql_client = MySQLManagementClient(credential, subscription_id)# Provision the server and wait for the resultserver_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 connectRULE_NAME = "allow_ip"ip_address = os.environ["PUBLIC_IP_ADDRESS"]# Provision the rule and wait for completionpoller = 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 serverdb_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 CLI を使用して Azure にサインインしてサンプル コードを実行します。 アカウントに、Azure サブスクリプションでリソース グループとストレージ リソースを作成するための十分なアクセス許可がある場合、スクリプトは追加の構成なしで正常に実行されます。
運用環境で使用する場合は、適切な環境変数を設定してサービス プリンシパルで認証することをお勧めします。 このアプローチにより、自動化に適した安全で非対話型のアクセスが可能になります。 セットアップ手順については、Azure サービスで Python アプリを認証する方法に関するページを参照してください。
サブスクリプションまたはリソース グループ レベルの共同作成者ロールなど、適切なアクセス許可を持つロールがサービス プリンシパルに割り当てられていることを確認します。 ロールの割り当ての詳細については、Azure でのロールベースのアクセス制御 (RBAC) に関するページを参照してください。
PostreSQL データベース サーバーについては、次を参照してください。
まだサインインしていない場合は、Azure CLI を使用して Azure にサインインします。
az login
次のスクリプトを実行します。
python provision_db.py
スクリプトの完了には 1 ~ 2 分かかります。
この手順では、データベースにテーブルを作成し、レコードを挿入します。 mysql-connector ライブラリを使用してデータベースに接続し、SQL コマンドを実行できます。
次のコードを使用して、use_db.py という名前のファイルを作成します。
このコードは MySQL でのみ機能します。PostgreSQL 用に異なるライブラリを使用します。
import osimport mysql.connectordb_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.txtimport pyodbcdriver = "{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()
このコードはすべて mysql.connector API を使用します。 Azure 固有の部分は、MySQL サーバー (mysql.database.azure.com) の完全なホスト ドメインのみです。
次に、TSL/SSL 経由で Azure Database for MySQL サーバーと通信するために必要な証明書をダウンロードします。 詳細については、Azure Database for MySQL ドキュメントのSSL 証明書の取得 に関するページを参照してください。
#!/bin/bash# Download Baltimore CyberTrust Root certificate required for Azure MySQL SSL connectionsCERT_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
正しく定義していることを確認してください。 間違った IP アドレスで MySQL サーバーを既に作成している場合は、Azure portal で別の IP アドレスを追加できます。 ポータルで MySQL サーバーを選択し、[接続のセキュリティ] を選択します。 ワークステーションの IP アドレスを、許可されている IP アドレスの一覧に追加します。
この例で作成したリソース グループとストレージ リソースを保持する必要がない場合は、az group delete コマンドを実行します。
リソース グループではサブスクリプションで継続的な料金は発生しませんが、リソース グループ内のストレージ アカウントなどのリソースには引き続き料金が発生する可能性があります。 アクティブに使用していないグループをクリーンアップすることをお勧めします。--no-wait
引数を使用すると、操作の完了を待たずにコマンドをすぐに返すことができます。
#!/bin/bashaz group delete -n $AZURE_RESOURCE_GROUP_NAME --no-wait
ResourceManagementClient.resource_groups.begin_delete
メソッドを使用して、コードからリソース グループを削除することもできます。「例: リソース グループを作成する」のコードは、使用方法を示しています。
次の Azure CLI コマンドは、Python スクリプトと同じプロビジョニング手順を実行します。 PostgreSQL データベースの場合は、az postgres flexible-server
コマンドを使用します。
#!/bin/bash#!/bin/bash# Set variablesexport LOCATION=<Location> # Change to your preferred regionexport AZURE_RESOURCE_GROUP_NAME=<ResourceGroupName> # Change to your preferred resource group nameexport DB_SERVER_NAME=<DB_Server_Name> # Change to your preferred DB server nameexport DB_ADMIN_NAME=<DB_Admin_Name> # Change to your preferred admin nameexport DB_ADMIN_PASSWORD=<DB_Admin_Password> # Change to your preferred admin passwordexport DB_NAME=<DB_Name> # Change to your preferred database nameexport DB_SERVER_VERSION="5.7"# Get public IP addressexport PUBLIC_IP_ADDRESS=$(curl -s https://api.ipify.org)# Provision the resource groupecho "Creating resource group: $AZURE_RESOURCE_GROUP_NAME"az group create \ --location "$LOCATION" \ --name "$AZURE_RESOURCE_GROUP_NAME"# Provision the MySQL Flexible Serverecho "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 addressecho "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 databaseecho "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."
このページはお役に立ちましたか?
このページはお役に立ちましたか?