Использование управляемых дисков Azure в сочетании с библиотеками (SDK) Azure для Python

Управляемые диски Azure — это высокопроизводительное и надежное блочное хранилище, предназначенное для использования с Виртуальными машинами Azure и Решением Azure VMware. Azure Управляемые диски обеспечивают упрощенное управление дисками, улучшенную масштабируемость, улучшенную безопасность и улучшение масштабирования без необходимости работать непосредственно с учетными записями хранения. Дополнительные сведения см. в Управляемые диски Azure.

Вы используете библиотеку azure-mgmt-compute для администрирования Управляемые диски для существующей виртуальной машины.

Пример создания виртуальной машины с azure-mgmt-compute библиотекой см. в разделе "Пример. Создание виртуальной машины".

В примерах кода в этой статье показано, как выполнять некоторые распространенные задачи с управляемыми дисками с помощью библиотеки azure-mgmt-compute . Они не выполняются как есть, но предназначены для внедрения в собственный код. Пример. Создание виртуальной машины, чтобы узнать, как создать экземпляр azure.mgmt.compute ComputeManagementClient в коде для выполнения примеров.

Дополнительные полные примеры использования azure-mgmt-compute библиотеки см. в пакете SDK Azure для Python для вычислений в GitHub.

Автономные управляемые диски

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

Создание пустого управляемого диска

from azure.mgmt.compute.models import DiskCreateOption

poller = compute_client.disks.begin_create_or_update(
    'my_resource_group',
    'my_disk_name',
    {
        'location': 'eastus',
        'disk_size_gb': 20,
        'creation_data': {
            'create_option': DiskCreateOption.empty
        }
    }
)
disk_resource = poller.result()

Создание управляемого диска из хранилища BLOB-объектов

Управляемый диск создается из виртуального жесткого диска (VHD), хранящегося в виде большого двоичного объекта.

from azure.mgmt.compute.models import DiskCreateOption

poller = compute_client.disks.begin_create_or_update(
    'my_resource_group',
    'my_disk_name',
    {
        'location': 'eastus',
        'creation_data': {
            'create_option': DiskCreateOption.IMPORT,
            'storage_account_id': '/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Storage/storageAccounts/<storage-account-name>',
            'source_uri': 'https://<storage-account-name>.blob.core.windows.net/vm-images/test.vhd'
        }
    }
)
disk_resource = poller.result()

Создание образа управляемого диска из хранилища BLOB-объектов

Образ управляемого диска создается из виртуального жесткого диска (VHD), хранящегося в виде большого двоичного объекта.

from azure.mgmt.compute.models import OperatingSystemStateTypes, HyperVGeneration

poller = compute_client.images.begin_create_or_update(
    'my_resource_group',
    'my_image_name',
    {
        'location': 'eastus',
        'storage_profile': {
           'os_disk': {
              'os_type': 'Linux',
              'os_state': OperatingSystemStateTypes.GENERALIZED,
              'blob_uri': 'https://<storage-account-name>.blob.core.windows.net/vm-images/test.vhd',
              'caching': "ReadWrite",
           },
        },
        'hyper_v_generation': HyperVGeneration.V2,
    }
)
image_resource = poller.result()

Создание управляемого диска из своего образа

from azure.mgmt.compute.models import DiskCreateOption

# If you don't know the id, do a 'get' like this to obtain it
managed_disk = compute_client.disks.get(self.group_name, 'myImageDisk')

poller = compute_client.disks.begin_create_or_update(
    'my_resource_group',
    'my_disk_name',
    {
        'location': 'eastus',
        'creation_data': {
            'create_option': DiskCreateOption.COPY,
            'source_resource_id': managed_disk.id
        }
    }
)

disk_resource = poller.result()

Виртуальная машина с управляемыми дисками

Вы можете создать виртуальную машину с неявным выбором управляемого диска для конкретного образа диска. Это позволяет обойтись без настройки подробных параметров.

Управляемый диск создается неявно при создании виртуальной машины из образа ОС в Azure. Для параметра storage_profile не обязательно указывать os_disk, и создание учетной записи хранения не является обязательным требованием для создания виртуальной машины.

storage_profile = azure.mgmt.compute.models.StorageProfile(
    image_reference = azure.mgmt.compute.models.ImageReference(
        publisher='Canonical',
        offer='UbuntuServer',
        sku='16.04-LTS',
        version='latest'
    )
)

Полный пример создания виртуальной машины с помощью библиотек управления Azure для Python см. в разделе "Пример. Создание виртуальной машины". В примере создания используется storage_profile параметр.

Можно также создать storage_profile с помощью собственного образа.

# If you don't know the id, do a 'get' like this to obtain it
image = compute_client.images.get(self.group_name, 'myImageDisk')

storage_profile = azure.mgmt.compute.models.StorageProfile(
    image_reference = azure.mgmt.compute.models.ImageReference(
        id = image.id
    )
)

Вы можете легко подключить ранее подготовленный управляемый диск:

vm = compute_client.virtual_machines.get(
    'my_resource_group',
    'my_vm'
)
managed_disk = compute_client.disks.get('my_resource_group', 'myDisk')

vm.storage_profile.data_disks.append({
    'lun': 12, # You choose the value, depending of what is available for you
    'name': managed_disk.name,
    'create_option': DiskCreateOptionTypes.attach,
    'managed_disk': {
        'id': managed_disk.id
    }
})

async_update = compute_client.virtual_machines.begin_create_or_update(
    'my_resource_group',
    vm.name,
    vm,
)
async_update.wait()

Масштабируемые наборы виртуальных машин с управляемыми дисками.

До выпуска службы "Управляемые диски" вам нужно было вручную создавать учетную запись хранения для всех необходимых виртуальных машин в масштабируемом наборе, а затем в REST API этого набора указывать параметр списка vhd_containers, чтобы предоставить всем виртуальным машинам имя учетной записи хранения.

Так как вам не нужно управлять учетными записями хранения с помощью Azure Управляемые диски, storage_profile теперь Масштабируемые наборы виртуальных машин можно точно совпадать с тем, что используется в создании виртуальной машины:

'storage_profile': {
    'image_reference': {
        "publisher": "Canonical",
        "offer": "UbuntuServer",
        "sku": "16.04-LTS",
        "version": "latest"
    }
},

Полный пример выглядит так:

naming_infix = "PyTestInfix"

vmss_parameters = {
    'location': self.region,
    "overprovision": True,
    "upgrade_policy": {
        "mode": "Manual"
    },
    'sku': {
        'name': 'Standard_A1',
        'tier': 'Standard',
        'capacity': 5
    },
    'virtual_machine_profile': {
        'storage_profile': {
            'image_reference': {
                "publisher": "Canonical",
                "offer": "UbuntuServer",
                "sku": "16.04-LTS",
                "version": "latest"
            }
        },
        'os_profile': {
            'computer_name_prefix': naming_infix,
            'admin_username': 'Foo12',
            'admin_password': 'BaR@123!!!!',
        },
        'network_profile': {
            'network_interface_configurations' : [{
                'name': naming_infix + 'nic',
                "primary": True,
                'ip_configurations': [{
                    'name': naming_infix + 'ipconfig',
                    'subnet': {
                        'id': subnet.id
                    }
                }]
            }]
        }
    }
}

# Create VMSS test
result_create = compute_client.virtual_machine_scale_sets.begin_create_or_update(
    'my_resource_group',
    'my_scale_set',
    vmss_parameters,
)
vmss_result = result_create.result()

Другие операции с управляемыми дисками

Изменение размера управляемого диска

managed_disk = compute_client.disks.get('my_resource_group', 'myDisk')
managed_disk.disk_size_gb = 25

async_update = self.compute_client.disks.begin_create_or_update(
    'my_resource_group',
    'myDisk',
    managed_disk
)
async_update.wait()

Обновление типа учетной записи хранения управляемых дисков

from azure.mgmt.compute.models import StorageAccountTypes

managed_disk = compute_client.disks.get('my_resource_group', 'myDisk')
managed_disk.account_type = StorageAccountTypes.STANDARD_LRS

async_update = self.compute_client.disks.begin_create_or_update(
    'my_resource_group',
    'myDisk',
    managed_disk
)
async_update.wait()

Создание образа из хранилища BLOB-объектов

async_create_image = compute_client.images.create_or_update(
    'my_resource_group',
    'myImage',
    {
        'location': 'eastus',
        'storage_profile': {
            'os_disk': {
                'os_type': 'Linux',
                'os_state': "Generalized",
                'blob_uri': 'https://<storage-account-name>.blob.core.windows.net/vm-images/test.vhd',
                'caching': "ReadWrite",
            }
        }
    }
)
image = async_create_image.result()

Создание моментального снимка управляемого диска, который сейчас подключен к виртуальной машине

managed_disk = compute_client.disks.get('my_resource_group', 'myDisk')

async_snapshot_creation = self.compute_client.snapshots.begin_create_or_update(
        'my_resource_group',
        'mySnapshot',
        {
            'location': 'eastus',
            'creation_data': {
                'create_option': 'Copy',
                'source_uri': managed_disk.id
            }
        }
    )
snapshot = async_snapshot_creation.result()

См. также