チュートリアル: Python SDK を使用した Azure パブリック MEC への仮想マシンのデプロイに関する記事
このチュートリアルでは、Python SDK を使用して、Azure パブリック マルチアクセス エッジ コンピューティング (MEC) にリソースをデプロイします。 このチュートリアルでは、仮想マシン (VM) とその依存関係を Azure パブリック MEC にデプロイする Python コードを示します。
Python SDK について詳しくは、「Python 用 Azure ライブラリの使用パターン」を参照してください。
このチュートリアルでは、以下の内容を学習します。
- 必要な Azure ライブラリ パッケージをインストールする
- 仮想マシンのプロビジョニング
- 開発環境でスクリプトを実行する
- 関連付けられているリージョンにジャンプ サーバーを作成する
- VM にアクセスする
前提条件
Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。
許可リストに登録されているサブスクリプションを Azure アカウントに追加します。これにより、Azure パブリック MEC にリソースをデプロイできます。 許可されたアクティブなサブスクリプションがない場合、Azure パブリック MEC の製品チームにお問い合わせください。
「Azure 用のローカル Python 開発環境を構成する」の手順に従い、ローカル開発環境で Python を設定します。 必ず、ローカル開発用のサービス プリンシパルを作成し、このチュートリアル プロジェクト用の仮想環境を作成してアクティブ化してください。
Azure Cloud Shell で Bash 環境を使用します。 詳細については、「Azure Cloud Shell の Bash のクイックスタート」を参照してください。
CLI リファレンス コマンドをローカルで実行する場合、Azure CLI をインストールします。 Windows または macOS で実行している場合は、Docker コンテナーで Azure CLI を実行することを検討してください。 詳細については、「Docker コンテナーで Azure CLI を実行する方法」を参照してください。
ローカル インストールを使用する場合は、az login コマンドを使用して Azure CLI にサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、Azure CLI でのサインインに関するページを参照してください。
初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、Azure CLI で拡張機能を使用する方法に関するページを参照してください。
az version を実行し、インストールされているバージョンおよび依存ライブラリを検索します。 最新バージョンにアップグレードするには、az upgrade を実行します。
必要な Azure ライブラリ パッケージをインストールする
この例で使用する管理ライブラリをリストした requirements.txt という名前のファイルを作成します。
azure-mgmt-resource azure-mgmt-compute azure-mgmt-network azure-identity azure-mgmt-extendedlocation==1.0.0b2
仮想環境をアクティブにした状態でコマンド プロンプトを開き、requirements.txt にリストされている管理ライブラリをインストールします。
pip install -r requirements.txt
仮想マシンのプロビジョニング
provision_vm_edge.py という名前の Python ファイルを作成し、次の Python スクリプトを設定します。 このスクリプトにより、VM とそれに関連する依存関係が Azure パブリック MEC にデプロイされます。 スクリプト内のコメントで詳細が説明されています。
# Import the needed credential and management objects from the libraries. from azure.identity import AzureCliCredential from azure.mgmt.resource import ResourceManagementClient from azure.mgmt.network import NetworkManagementClient from azure.mgmt.compute import ComputeManagementClient import os print(f"Provisioning a virtual machine...some operations might take a minute or two.") # Acquire a credential object using CLI-based authentication. credential = AzureCliCredential() # Retrieve subscription ID from environment variable. subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"] # Step 1: Provision a resource group # Obtain the management object for resources, using the credentials from the CLI login. resource_client = ResourceManagementClient(credential, subscription_id) # Constants we need in multiple places: the resource group name, the region and the public mec location # in which we provision resources. Populate the variables with appropriate values. RESOURCE_GROUP_NAME = "PythonAzureExample-VM-rg" LOCATION = "<region>" PUBLIC_MEC_LOCATION = "<edgezone id>" USERNAME = "azureuser" PASSWORD = "<password>" # Provision the resource group. rg_result = resource_client.resource_groups.create_or_update(RESOURCE_GROUP_NAME, { "location": LOCATION } ) print(f"Provisioned resource group {rg_result.name} in the {rg_result.location} region") # For details on the previous code, see Example: Use the Azure libraries to provision a resource group # at https://learn.microsoft.com/azure/developer/python/azure-sdk-example-resource-group # Step 2: Provision a virtual network # A virtual machine requires a network interface client (NIC). A NIC requires # a virtual network and subnet along with an IP address. Therefore, we must provision # these downstream components first, then provision the NIC, after which we # can provision the VM. # Network and IP address names VNET_NAME = "python-example-vnet-edge" SUBNET_NAME = "python-example-subnet-edge" IP_NAME = "python-example-ip-edge" IP_CONFIG_NAME = "python-example-ip-config-edge" NIC_NAME = "python-example-nic-edge" # Obtain the management object for networks network_client = NetworkManagementClient(credential, subscription_id) # Provision the virtual network and wait for completion poller = network_client.virtual_networks.begin_create_or_update(RESOURCE_GROUP_NAME, VNET_NAME, { "location": LOCATION, "extendedLocation": {"type": "EdgeZone", "name": PUBLIC_MEC_LOCATION}, "address_space": { "address_prefixes": ["10.1.0.0/16"] } } ) vnet_result = poller.result() print(f"Provisioned virtual network {vnet_result.name} with address prefixes {vnet_result.address_space.address_prefixes}") # Step 3: Provision the subnet and wait for completion poller = network_client.subnets.begin_create_or_update(RESOURCE_GROUP_NAME, VNET_NAME, SUBNET_NAME, { "address_prefix": "10.1.0.0/24" } ) subnet_result = poller.result() print(f"Provisioned virtual subnet {subnet_result.name} with address prefix {subnet_result.address_prefix}") # Step 4: Provision an IP address and wait for completion # Only the standard public IP SKU is supported at EdgeZones poller = network_client.public_ip_addresses.begin_create_or_update(RESOURCE_GROUP_NAME, IP_NAME, { "location": LOCATION, "extendedLocation": {"type": "EdgeZone", "name": PUBLIC_MEC_LOCATION}, "sku": { "name": "Standard" }, "public_ip_allocation_method": "Static", "public_ip_address_version" : "IPV4" } ) ip_address_result = poller.result() print(f"Provisioned public IP address {ip_address_result.name} with address {ip_address_result.ip_address}") # Step 5: Provision the network interface client poller = network_client.network_interfaces.begin_create_or_update(RESOURCE_GROUP_NAME, NIC_NAME, { "location": LOCATION, "extendedLocation": {"type": "EdgeZone", "name": PUBLIC_MEC_LOCATION}, "ip_configurations": [ { "name": IP_CONFIG_NAME, "subnet": { "id": subnet_result.id }, "public_ip_address": {"id": ip_address_result.id } }] } ) nic_result = poller.result() print(f"Provisioned network interface client {nic_result.name}") # Step 6: Provision the virtual machine # Obtain the management object for virtual machines compute_client = ComputeManagementClient(credential, subscription_id) VM_NAME = "ExampleVM-edge" print(f"Provisioning virtual machine {VM_NAME}; this operation might take a few minutes.") # Provision the VM specifying only minimal arguments, which defaults to an Ubuntu 18.04 VM # on a Standard DSv2-series with a public IP address and a default virtual network/subnet. poller = compute_client.virtual_machines.begin_create_or_update(RESOURCE_GROUP_NAME, VM_NAME, { "location": LOCATION, "extendedLocation": {"type": "EdgeZone", "name": PUBLIC_MEC_LOCATION}, "storage_profile": { "image_reference": { "publisher": 'Canonical', "offer": "UbuntuServer", "sku": "18.04-LTS", "version": "latest" } }, "hardware_profile": { "vm_size": "Standard_DS2_v2" }, "os_profile": { "computer_name": VM_NAME, "admin_username": USERNAME, "admin_password": PASSWORD }, "network_profile": { "network_interfaces": [{ "id": nic_result.id, }] } } ) vm_result = poller.result() print(f"Provisioned virtual machine {vm_result.name}")
スクリプトを実行する前に、スクリプトの Step 1 セクションで使用されるこれらの変数を設定します。
変数名 説明 LOCATION Azure パブリック MEC の場所に関連する Azure リージョン PUBLIC_MEC_LOCATION Azure パブリック MEC の場所 ID/EdgeZone ID PASSWORD VM へのサインインに使用するパスワード Note
各 Azure パブリック MEC サイトは、Azure リージョンに関連付けられています。 リソースをデプロイする必要がある Azure パブリック MEC の場所に基づいて、作成するリソース グループに適したリージョン値を選択してください。 詳細については、Azure パブリック MEC の主要概念に関する記事を参照してください。
開発環境でスクリプトを実行する
前のセクションからコピーした Python スクリプトを実行します。
python provision_vm_edge.py
VM とサポート リソースが作成されるまで数分間待機します。
次の出力例では、成功した VM 作成操作を示します。
(.venv) C:\Users >python provision_vm_edge.py Provisioning a virtual machine...some operations might take a minute or two. Provisioned resource group PythonAzureExample-VM-rg in the <region> region Provisioned virtual network python-example-vnet-edge with address prefixes ['10.1.0.0/16'] Provisioned virtual subnet python-example-subnet-edge with address prefix 10.1.0.0/24 Provisioned public IP address python-example-ip-edge with address <public ip> Provisioned network interface client python-example-nic-edge Provisioning virtual machine ExampleVM-edge; this operation might take a few minutes. Provisioned virtual machine ExampleVM-edge
python-example-ip-edge フィールドの出力で、自分の publicIpAddress をメモします。 このアドレスは、次のセクションで VM にアクセスするために使用します。
関連付けられているリージョンにジャンプ サーバーを作成する
SSH を使用して Azure パブリック MEC 内の VM に接続する場合、最適な方法は、前のセクションでリソース グループをデプロイした Azure リージョンにジャンプ ボックスをデプロイする方法です。
「Azure ライブラリを使用して仮想マシンをプロビジョニングする」の手順に従ってください。
ジャンプ サーバー VM の python-example-ip フィールドの出力で、自分の publicIpAddress をメモします。 このアドレスは、次のセクションで VM にアクセスするために使用します。
VM にアクセスする
SSH を使用して、先ほどメモした IP アドレスで、リージョンにデプロイしたジャンプ ボックス VM に接続します。
ssh azureuser@<python-example-ip>
ジャンプ ボックスから、SSH を使用して、先ほどメモした IP アドレスで、Azure パブリック MEC に作成した VM に接続します。
ssh azureuser@<python-example-ip-edge>
Azure ネットワーク セキュリティ グループで、作成する VM へのポート 22 アクセスを許可する必要があります。
リソースをクリーンアップする
このチュートリアルでは、Python SDK を使用して Azure パブリック MEC に VM を作成しました。 今後これらのリソースが必要ない場合は、az group delete コマンドを使用して、リソース グループ、スケール セット、関連するすべてのリソースを削除してください。 --yes
パラメーターを使用すると、確認プロンプトなしでリソースが削除されます。
az group delete --name PythonAzureExample-VM-rg --yes
次のステップ
Azure パブリック MEC について質問がある場合は、製品チームにお問い合わせください。