Руководство. Развертывание виртуальной машины в общедоступной среде MEC Azure с помощью пакета SDK для Python
В этом руководстве вы используете пакет SDK для Python для развертывания ресурсов в общедоступных пограничных вычислениях с несколькими доступами Azure (MEC). В этом руководстве представлен код Python для развертывания виртуальной машины и ее зависимостей в общедоступной среде MEC Azure.
Сведения о пакетах SDK для Python см. в статье Библиотеки Azure для шаблонов использования Python.
В этом руководстве описано следующее:
- Установка необходимых пакетов библиотеки Azure
- Подготовка виртуальной машины
- Запуск скрипта в среде разработки
- Создание сервера переходов в связанном регионе
- Доступ к виртуальным машинам
Предварительные требования
Если у вас еще нет подписки Azure, создайте бесплатную учетную запись, прежде чем начинать работу.
Добавьте подписку из списка разрешенных в учетную запись Azure, которая позволяет развертывать ресурсы в общедоступной среде MEC Azure. Если у вас нет активной разрешенной подписки, обратитесь к группе разработчиков общедоступной среды MEC Azure.
Настройте Python в локальной среде разработки, следуя инструкциям в разделе Настройка локальной среды разработки 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
Создайте файл с именем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
Подготовка виртуальной машины
Создайте файл 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}")
Перед запуском скрипта заполните следующие переменные, используемые в разделе шага 1 скрипта:
Имя переменной Описание LOCATION Регион Azure, связанный с общедоступным расположением Azure MEC PUBLIC_MEC_LOCATION Идентификатор общедоступного расположения MEC Azure или идентификатор пограничной зоны PASSWORD Пароль для входа в виртуальную машину Примечание
Каждый общедоступный сайт Azure MEC связан с регионом Azure. В зависимости от общедоступного расположения Azure MEC, в котором необходимо развернуть ресурс, выберите соответствующее значение региона для создаваемой группы ресурсов. Дополнительные сведения см. в статье Основные понятия для общедоступного mec Azure.
Запуск скрипта в среде разработки
Запустите скрипт Python, скопированный из предыдущего раздела.
python provision_vm_edge.py
Подождите несколько минут, пока виртуальная машина и вспомогательные ресурсы будут созданы.
В следующем примере выходных данных показано, что виртуальная машина успешно создана.
(.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. Используйте этот адрес для доступа к виртуальной машине в следующем разделе.
Создание сервера переходов в связанном регионе
Чтобы использовать SSH для подключения к виртуальной машине в общедоступном mec Azure, лучше всего развернуть поле перехода в регионе Azure, где была развернута группа ресурсов, описанная в предыдущем разделе.
Выполните действия, описанные в статье Подготовка виртуальной машины с помощью библиотек Azure.
Запишите собственный publicIpAddress в выходных данных из поля python-example-ip виртуальной машины сервера переходов. Используйте этот адрес для доступа к виртуальной машине в следующем разделе.
Доступ к виртуальным машинам
Используйте SSH для подключения к виртуальной машине jump box, развернутой в регионе, с указанным ранее IP-адресом.
ssh azureuser@<python-example-ip>
В поле перехода используйте SSH для подключения к виртуальной машине, созданной в общедоступной mec Azure, с указанным ранее IP-адресом.
ssh azureuser@<python-example-ip-edge>
Убедитесь, что группы безопасности сети Azure разрешают доступ через порт 22 к создаваемым виртуальным машинам.
Очистка ресурсов
В этом руководстве вы создали виртуальную машину в общедоступной среде MEC Azure с помощью пакета SDK для Python. Если вы не планируете использовать эти ресурсы в будущем, используйте команду az group delete , чтобы удалить группу ресурсов, масштабируемый набор и все связанные с ней ресурсы. --yes
При использовании параметра ресурсы удаляются без запроса на подтверждение.
az group delete --name PythonAzureExample-VM-rg --yes
Дальнейшие действия
По вопросам об общедоступной mec Azure обратитесь к группе разработчиков: