Поделиться через


Руководство. Развертывание виртуальной машины в общедоступной среде MEC Azure с помощью пакета SDK для Python

В этом руководстве вы используете пакет SDK для Python для развертывания ресурсов в общедоступных пограничных вычислениях с несколькими доступами Azure (MEC). В этом руководстве представлен код Python для развертывания виртуальной машины и ее зависимостей в общедоступной среде MEC Azure.

Сведения о пакетах SDK для Python см. в статье Библиотеки Azure для шаблонов использования Python.

В этом руководстве описано следующее:

  • Установка необходимых пакетов библиотеки Azure
  • Подготовка виртуальной машины
  • Запуск скрипта в среде разработки
  • Создание сервера переходов в связанном регионе
  • Доступ к виртуальным машинам

Предварительные требования

  • Используйте среду Bash в Azure Cloud Shell. Дополнительные сведения см. в статье Краткое руководство по Bash в Azure Cloud Shell.

  • Если вы предпочитаете выполнять справочные команды CLI локально, установите Azure CLI. Если вы работаете в Windows или macOS, Azure CLI можно запустить в контейнере Docker. Дополнительные сведения см. в разделе Запуск Azure CLI в контейнере Docker.

    • Если вы используете локальную установку, выполните вход в Azure CLI с помощью команды az login. Чтобы выполнить аутентификацию, следуйте инструкциям в окне терминала. Сведения о других возможностях, доступных при входе, приведены в статье Вход с помощью 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. Создайте файл Python с именем provision_vm_edge.py и заполните его следующим скриптом Python. Сценарий развертывает виртуальную машину и связанную с ней зависимость в общедоступном mec Azure. Подробные сведения объясняются в комментариях в скрипте.

    # 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. Перед запуском скрипта заполните следующие переменные, используемые в разделе шага 1 скрипта:

    Имя переменной Описание
    LOCATION Регион Azure, связанный с общедоступным расположением Azure MEC
    PUBLIC_MEC_LOCATION Идентификатор общедоступного расположения MEC Azure или идентификатор пограничной зоны
    PASSWORD Пароль для входа в виртуальную машину

    Примечание

    Каждый общедоступный сайт Azure MEC связан с регионом Azure. В зависимости от общедоступного расположения Azure MEC, в котором необходимо развернуть ресурс, выберите соответствующее значение региона для создаваемой группы ресурсов. Дополнительные сведения см. в статье Основные понятия для общедоступного mec Azure.

Запуск скрипта в среде разработки

  1. Запустите скрипт Python, скопированный из предыдущего раздела.

    python provision_vm_edge.py
    
  2. Подождите несколько минут, пока виртуальная машина и вспомогательные ресурсы будут созданы.

    В следующем примере выходных данных показано, что виртуальная машина успешно создана.

    (.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. Используйте этот адрес для доступа к виртуальной машине в следующем разделе.

Создание сервера переходов в связанном регионе

Чтобы использовать SSH для подключения к виртуальной машине в общедоступном mec Azure, лучше всего развернуть поле перехода в регионе Azure, где была развернута группа ресурсов, описанная в предыдущем разделе.

  1. Выполните действия, описанные в статье Подготовка виртуальной машины с помощью библиотек Azure.

  2. Запишите собственный publicIpAddress в выходных данных из поля python-example-ip виртуальной машины сервера переходов. Используйте этот адрес для доступа к виртуальной машине в следующем разделе.

Доступ к виртуальным машинам

  1. Используйте SSH для подключения к виртуальной машине jump box, развернутой в регионе, с указанным ранее IP-адресом.

    ssh  azureuser@<python-example-ip>
    
  2. В поле перехода используйте SSH для подключения к виртуальной машине, созданной в общедоступной mec Azure, с указанным ранее IP-адресом.

    ssh azureuser@<python-example-ip-edge>
    
  3. Убедитесь, что группы безопасности сети Azure разрешают доступ через порт 22 к создаваемым виртуальным машинам.

Очистка ресурсов

В этом руководстве вы создали виртуальную машину в общедоступной среде MEC Azure с помощью пакета SDK для Python. Если вы не планируете использовать эти ресурсы в будущем, используйте команду az group delete , чтобы удалить группу ресурсов, масштабируемый набор и все связанные с ней ресурсы. --yes При использовании параметра ресурсы удаляются без запроса на подтверждение.

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

Дальнейшие действия

По вопросам об общедоступной mec Azure обратитесь к группе разработчиков: