Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Из этой статьи вы узнаете, как использовать библиотеки управления пакетом SDK Azure в скрипте Python для создания группы ресурсов, содержащей виртуальную машину Linux.
Эквивалентные команды Azure CLI перечислены далее в этой статье. Если вы предпочитаете использовать портал Azure, см. статью "Создание виртуальной машины Linux " и создание виртуальной машины Windows.
Замечание
Создание виртуальной машины с помощью кода — это многоэтапный процесс, который включает подготовку ряда других ресурсов, необходимых виртуальной машине. Если вы просто выполняете такой код из командной строки, то гораздо проще использовать az vm create
команду, которая автоматически подготавливает эти вторичные ресурсы с значениями по умолчанию для любого параметра, который вы решили пропустить. Единственными обязательными аргументами являются группа ресурсов, имя виртуальной машины, имя образа и учетные данные для входа. Дополнительные сведения см. в статье "Краткое создание виртуальной машины с помощью Azure CLI".
1. Настройка локальной среды разработки
Если вы еще не сделали этого, настройте среду, в которой можно запустить этот код. Ниже приведено несколько вариантов:
#!/bin/bash
# Create a virtual environment
python -m venv .venv
# Activate the virtual environment
source .venv/Scripts/activate # only required for Windows (Git Bash)
Используйте среду conda. Сведения об установке Conda см. в разделе "Установка Miniconda".
Используйте контейнер разработки в Visual Studio Code или GitHub Codespaces.
2. Установка необходимых пакетов библиотек Azure
Создайте файл "requirements.txt" , указывающий пакеты управления Azure SDK, необходимые для этого скрипта.
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".
Убедитесь, что субъект-служба назначена роль с достаточными разрешениями для создания групп ресурсов и учетных записей хранения. Например, назначение роли участника на уровне подписки обеспечивает необходимый доступ. Дополнительные сведения о назначениях ролей см. в статье "Управление доступом на основе ролей" (RBAC) в Azure.
Ссылки на классы, используемые в коде
- Defaultredential (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
в выходных данных):export AZURE_SUBSCRIPTION_ID=$(az account show --query id -o tsv)
Запустите скрипт:
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
# Provision the resource group
az group create -n PythonAzureExample-VM-rg -l westus2
# 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
# Provision a public IP address
az network public-ip create -g PythonAzureExample-VM-rg -n python-example-ip \
--allocation-method Dynamic --version IPv4
# 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
# 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 с виртуальными машинами
- Пройдите краткий опрос о пакете SDK Azure для Python
Следующие ресурсы содержат более подробные примеры с помощью Python для создания виртуальной машины:
- Примеры управления виртуальными машинами Azure — Python (GitHub). В примере показаны дополнительные операции управления, такие как запуск и перезапуск виртуальной машины, остановка и удаление виртуальной машины, увеличение размера диска и управление дисками данных.