Поделиться через


Использование управляемых дисков 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 управление учетными записями хранения больше не требуется. В результате масштабируемые 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()

См. также