Freigeben über


Verwenden verwalteter Azure-Datenträger mit den Azure-Bibliotheken (SDK) für Python

Azure Managed Disks sind leistungsstarke, langlebige Blockspeicher, die für die Verwendung mit Azure Virtual Machines und Azure VMware Solution entwickelt wurden. Azure Managed Disks bieten vereinfachte Datenträgerverwaltung, verbesserte Skalierbarkeit, verbesserte Sicherheit und bessere Skalierung, ohne direkt mit Speicherkonten arbeiten zu müssen. Weitere Informationen finden Sie unter Azure Managed Disks.

Sie verwenden die azure-mgmt-compute Bibliothek, um verwaltete Datenträger für einen vorhandenen virtuellen Computer zu verwalten.

Ein Beispiel zum Erstellen eines virtuellen Computers mit der azure-mgmt-compute Bibliothek finden Sie unter Beispiel – Erstellen eines virtuellen Computers.

Die Codebeispiele in diesem Artikel veranschaulichen, wie Sie einige allgemeine Aufgaben mit verwalteten Datenträgern mithilfe der azure-mgmt-compute Bibliothek ausführen. Sie können nicht wie folgt ausgeführt werden, sondern sind für Sie konzipiert, um sie in Ihren eigenen Code zu integrieren. Sie können beispiel - Erstellen eines virtuellen Computers , um zu erfahren, wie Sie eine Instanz in azure.mgmt.compute ComputeManagementClient Ihrem Code erstellen, um die Beispiele auszuführen.

Ausführlichere Beispiele für die Verwendung der azure-mgmt-compute Bibliothek finden Sie unter Azure SDK für Python-Beispiele für die Berechnung in GitHub.

Eigenständige verwaltete Datenträger

Sie können eigenständige verwaltete Datenträger auf vielfältige Weise erstellen, wie in den folgenden Abschnitten dargestellt.

Erstellen eines leeren verwalteten Datenträgers

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

Erstellen eines verwalteten Datenträgers über den Blobspeicher

Der verwaltete Datenträger wird von einer virtuellen Festplatte (Virtual Hard Disk, VHD) erstellt, die als BLOB gespeichert ist.

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

Erstellen eines Images für einen verwalteten Datenträger über den Blobspeicher

Das verwaltete Datenträgerimage wird von einer virtuellen Festplatte (Virtual Hard Disk, VHD) erstellt, die als Blob gespeichert ist.

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

Erstellen eines verwalteten Datenträgers anhand eines eigenen Images

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

Virtuelle Computer mit verwalteten Datenträgern

Sie können einen virtuellen Computer mit einem impliziten verwalteten Datenträger für ein spezifisches Datenträgerimage erstellen. In diesem Fall müssen nicht sämtliche Details angegeben werden.

Ein verwalteter Datenträger wird implizit beim Erstellen eines virtuellen Computers aus einem Betriebssystemimage in Azure erstellt. Im Parameter storage_profile ist os_disk optional, und die Erstellung eines Speicherkontos ist keine Voraussetzung für die Erstellung eines virtuellen Computers.

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

Ein vollständiges Beispiel zum Erstellen eines virtuellen Computers mithilfe der Azure-Verwaltungsbibliotheken für Python finden Sie unter Beispiel – Erstellen eines virtuellen Computers. Im Create-Beispiel verwenden Sie den storage_profile Parameter.

Sie können storage_profile auch mithilfe eines eigenen Images erstellen:

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

Sie können auf einfache Weise einen zuvor bereitgestellten verwalteten Datenträger anfügen:

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

Skalierungsgruppen für virtuelle Computer mit Managed Disks

Vor der Einführung von verwalteten Datenträgern mussten Sie manuell ein Speicherkonto für alle virtuellen Computer erstellen, die in der Skalierungsgruppe enthalten sein sollten, und anschließend mit dem Auflistungsparameter vhd_containers den vollständigen Speicherkontonamen an die REST-API der Skalierungsgruppe übergeben.

Da Sie keine Speicherkonten mit azure Managed Disks verwalten müssen, können Ihre storage_profileVm-Skalierungssätze jetzt genau mit dem von der VM-Erstellung verwendeten identisch sein:

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

Das vollständige Beispiel sieht wie folgt aus:

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

Andere Vorgänge mit Managed Disks

Ändern der Größe eines verwalteten Datenträgers

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

Aktualisieren des Speicherkontotyps der verwalteten Datenträger

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

Erstellen eines Images über den Blobspeicher

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

Erstellen einer Momentaufnahme eines verwalteten Datenträgers, der derzeit an einen virtuellen Computer angefügt ist

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

Weitere Informationen