Пример. Создание виртуальной машины с помощью библиотек Azure
Из этой статьи вы узнаете, как использовать библиотеки управления пакетом SDK Azure в скрипте Python для создания группы ресурсов, содержащей виртуальную машину Linux.
Все описанные в этой статье команды работают одинаково как в Bash для Linux или macOS, так и в командных оболочках для Windows, если не указано иное.
Эквивалентные команды Azure CLI перечислены далее в этой статье. Если вы предпочитаете использовать портал Azure, см. статью "Создание виртуальной машины Linux" и "Создание виртуальной машины Windows".
Примечание.
Создание виртуальной машины с помощью кода — это многоэтапный процесс, который включает подготовку ряда других ресурсов, необходимых виртуальной машине. Если вы выполняете код из командной строки, проще будет использовать команду az vm create
, которая автоматически подготавливает эти вспомогательные ресурсы, задавая значения по умолчанию всем параметрам, которые вы не указываете. Единственными обязательными аргументами являются группа ресурсов, имя виртуальной машины, имя образа и учетные данные для входа. Дополнительные сведения см. в статье Быстрое создание виртуальной машины с помощью Azure CLI.
1. Настройка локальной среды разработки
Если вы еще не сделали этого, настройте среду, в которой можно запустить этот код. Ниже приведено несколько вариантов:
Настройте виртуальную среду Python с помощью
venv
или выбранного средства. Вы можете создать виртуальную среду локально или в Azure Cloud Shell и запустить код там. Обязательно активируйте виртуальную среду, чтобы начать использовать ее.Используйте среду conda.
Используйте контейнер разработки в Visual Studio Code или GitHub Codespaces.
2. Установка необходимых пакетов библиотек Azure
Создайте файл requirements.txt, в котором перечислены библиотеки управления, используемые в этом примере.
azure-mgmt-resource
azure-mgmt-compute
azure-mgmt-network
azure-identity
Затем в терминале или командной строке с активированной виртуальной средой установите библиотеки управления, перечисленные в requirements.txt:
pip install -r requirements.txt
3. Написание кода для создания виртуальной машины
Создайте файл Python с именем provision_vm.py с приведенным ниже кодом. Подробные объяснения даны в комментариях:
# Import the needed credential and management objects from the libraries.
import os
from azure.identity import DefaultAzureCredential
from azure.mgmt.compute import ComputeManagementClient
from azure.mgmt.network import NetworkManagementClient
from azure.mgmt.resource import ResourceManagementClient
print(
"Provisioning a virtual machine...some operations might take a \
minute or two."
)
# Acquire a credential object.
credential = DefaultAzureCredential()
# 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.
resource_client = ResourceManagementClient(credential, subscription_id)
# Constants we need in multiple places: the resource group name and
# the region in which we provision resources. You can change these
# values however you want.
RESOURCE_GROUP_NAME = "PythonAzureExample-VM-rg"
LOCATION = "westus2"
# 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: 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"
SUBNET_NAME = "python-example-subnet"
IP_NAME = "python-example-ip"
IP_CONFIG_NAME = "python-example-ip-config"
NIC_NAME = "python-example-nic"
# 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,
"address_space": {"address_prefixes": ["10.0.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.0.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
poller = network_client.public_ip_addresses.begin_create_or_update(
RESOURCE_GROUP_NAME,
IP_NAME,
{
"location": 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,
"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"
USERNAME = "azureuser"
PASSWORD = "ChangePa$$w0rd24"
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 DS1 v2 plan 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,
"storage_profile": {
"image_reference": {
"publisher": "Canonical",
"offer": "UbuntuServer",
"sku": "16.04.0-LTS",
"version": "latest",
}
},
"hardware_profile": {"vm_size": "Standard_DS1_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}")
Проверка подлинности в коде
Далее в этой статье вы войдите в Azure с помощью Azure CLI, чтобы запустить пример кода. Если у вашей учетной записи есть разрешения на создание групп ресурсов и сетевых и вычислительных ресурсов в подписке Azure, код будет выполнен успешно.
Чтобы использовать такой код в рабочем скрипте, можно задать переменные среды для использования метода на основе субъекта-службы для проверки подлинности. Дополнительные сведения см. в статье "Проверка подлинности приложений Python с помощью служб Azure". Необходимо убедиться, что субъект-служба имеет достаточные разрешения для создания групп ресурсов и сетевых и вычислительных ресурсов в подписке, назначив ей соответствующую роль в Azure, например роль участника в подписке.
Ссылки на справку о классах, используемых в коде
- DefaultAzureCredential (azure.identity)
- ResourceManagementClient (azure.mgmt.resource)
- NetworkManagementClient (azure.mgmt.network)
- ComputeManagementClient (azure.mgmt.compute)
4. Запуск скрипта
Если вы еще не сделали этого, войдите в Azure с помощью Azure CLI:
az login
Задайте для переменной
AZURE_SUBSCRIPTION_ID
среды идентификатор подписки. (Вы можете запустить команду az account show и получить идентификатор подписки изid
свойства в выходных данных):Запустите скрипт:
python provision_vm.py
Процесс подготовки занимает несколько минут.
5. Проверка ресурсов
Откройте портал Azure, перейдите к группе ресурсов PythonAzureExample-VM-rg и запишите виртуальную машину, виртуальный диск, группу безопасности сети, общедоступный IP-адрес, сетевой интерфейс и виртуальную сеть.
Вы также можете использовать Azure CLI для проверки наличия виртуальной машины с помощью команды az vm list :
az vm list --resource-group PythonAzureExample-VM-rg
Эквивалентные команды Azure CLI
rem Provision the resource group
az group create -n PythonAzureExample-VM-rg -l westus2
rem Provision a virtual network and subnet
az network vnet create -g PythonAzureExample-VM-rg -n python-example-vnet ^
--address-prefix 10.0.0.0/16 --subnet-name python-example-subnet ^
--subnet-prefix 10.0.0.0/24
rem Provision a public IP address
az network public-ip create -g PythonAzureExample-VM-rg -n python-example-ip ^
--allocation-method Dynamic --version IPv4
rem Provision a network interface client
az network nic create -g PythonAzureExample-VM-rg --vnet-name python-example-vnet ^
--subnet python-example-subnet -n python-example-nic ^
--public-ip-address python-example-ip
rem Provision the virtual machine
az vm create -g PythonAzureExample-VM-rg -n ExampleVM -l "westus2" ^
--nics python-example-nic --image UbuntuLTS --public-ip-sku Standard ^
--admin-username azureuser --admin-password ChangePa$$w0rd24
Если возникает ошибка об ограничениях емкости, можно попробовать другой размер или регион. Дополнительные сведения см. в разделе "Устранение ошибок для номера SKU" недоступно.
6. Очистка ресурсов
Оставьте ресурсы на месте, если вы хотите продолжить использовать виртуальную машину и сеть, созданную в этой статье. В противном случае выполните команду az group delete , чтобы удалить группу ресурсов.
Группы ресурсов не несут никаких текущих расходов в подписке, но ресурсы, содержащиеся в группе, например виртуальные машины, могут продолжать взиматься. Рекомендуется очистить любую группу, которую вы не используете. Аргумент --no-wait
позволяет команде выполнять возврат без задержки, не ожидая завершения операции.
az group delete -n PythonAzureExample-VM-rg --no-wait
Для удаления группы ресурсов с помощью кода также можно использовать метод ResourceManagementClient.resource_groups.begin_delete
. Код в примере: создание группы ресурсов демонстрирует использование.
См. также
- Пример. Создание группы ресурсов
- Пример. Перечисление групп ресурсов в подписке
- Пример. Создание служба хранилища Azure
- Пример. Использование служба хранилища Azure
- Пример. Создание веб-приложения и развертывание кода
- Пример. Создание и запрос базы данных
- Использование Управляемых дисков Azure с виртуальными машинами
- Пройдите короткий опрос об Azure SDK для Python
Более подробные примеры использования Python для создания виртуальной машины см. в следующих ресурсах:
- Примеры кода для управления виртуальными машинами Azure — Python (GitHub). В примере показаны дополнительные операции управления, такие как запуск и перезапуск виртуальной машины, остановка и удаление виртуальной машины, увеличение размера диска и управление дисками данных.