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

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

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

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

Более полные примеры использования библиотеки 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()

Создать управляемый диск из блоб-хранилища

В этом примере показано, как создать управляемый диск из VHD-файла, хранящегося в хранилище BLOB-объектов Azure. Этот метод полезен при повторном использовании или перемещении существующего виртуального жесткого диска в Azure.

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-файла, хранящегося в хранилище BLOB-объектов Azure. Этот метод полезен при создании повторно используемого образа, который можно использовать для создания новых виртуальных машин.

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. 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()

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

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

С помощью Azure Managed Disks вам больше не нужно управлять учетными записями хранения. В результате 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-хранилища

В этом примере показано, как создать образ управляемого диска из VHD-файла, хранящегося в Хранилище BLOB-объектов Azure. Этот метод полезен при создании повторно используемого образа, который можно использовать для создания новых виртуальных машин.

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()

См. также