次の方法で共有


チュートリアル: 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 ライブラリ パッケージをインストールする

  1. この例で使用する管理ライブラリをリストした requirements.txt という名前のファイルを作成します。

    azure-mgmt-resource
    azure-mgmt-compute
    azure-mgmt-network
    azure-identity
    azure-mgmt-extendedlocation==1.0.0b2
    
  2. 仮想環境をアクティブにした状態でコマンド プロンプトを開き、requirements.txt にリストされている管理ライブラリをインストールします。

    pip install -r requirements.txt
    

仮想マシンのプロビジョニング

  1. 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}")
    
  2. スクリプトを実行する前に、スクリプトの Step 1 セクションで使用されるこれらの変数を設定します。

    変数名 説明
    LOCATION Azure パブリック MEC の場所に関連する Azure リージョン
    PUBLIC_MEC_LOCATION Azure パブリック MEC の場所 ID/EdgeZone ID
    PASSWORD VM へのサインインに使用するパスワード

    Note

    各 Azure パブリック MEC サイトは、Azure リージョンに関連付けられています。 リソースをデプロイする必要がある Azure パブリック MEC の場所に基づいて、作成するリソース グループに適したリージョン値を選択してください。 詳細については、Azure パブリック MEC の主要概念に関する記事を参照してください。

開発環境でスクリプトを実行する

  1. 前のセクションからコピーした Python スクリプトを実行します。

    python provision_vm_edge.py
    
  2. 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
    
  3. python-example-ip-edge フィールドの出力で、自分の publicIpAddress をメモします。 このアドレスは、次のセクションで VM にアクセスするために使用します。

関連付けられているリージョンにジャンプ サーバーを作成する

SSH を使用して Azure パブリック MEC 内の VM に接続する場合、最適な方法は、前のセクションでリソース グループをデプロイした Azure リージョンにジャンプ ボックスをデプロイする方法です。

  1. Azure ライブラリを使用して仮想マシンをプロビジョニングする」の手順に従ってください。

  2. ジャンプ サーバー VM の python-example-ip フィールドの出力で、自分の publicIpAddress をメモします。 このアドレスは、次のセクションで VM にアクセスするために使用します。

VM にアクセスする

  1. SSH を使用して、先ほどメモした IP アドレスで、リージョンにデプロイしたジャンプ ボックス VM に接続します。

    ssh  azureuser@<python-example-ip>
    
  2. ジャンプ ボックスから、SSH を使用して、先ほどメモした IP アドレスで、Azure パブリック MEC に作成した VM に接続します。

    ssh azureuser@<python-example-ip-edge>
    
  3. Azure ネットワーク セキュリティ グループで、作成する VM へのポート 22 アクセスを許可する必要があります。

リソースをクリーンアップする

このチュートリアルでは、Python SDK を使用して Azure パブリック MEC に VM を作成しました。 今後これらのリソースが必要ない場合は、az group delete コマンドを使用して、リソース グループ、スケール セット、関連するすべてのリソースを削除してください。 --yes パラメーターを使用すると、確認プロンプトなしでリソースが削除されます。

az group delete --name PythonAzureExample-VM-rg --yes

次のステップ

Azure パブリック MEC について質問がある場合は、製品チームにお問い合わせください。