Använda Azure Managed Disks med Azure-bibliotek (SDK) för Python

Azure Managed Disks är högpresterande, hållbar blocklagring som är utformad för att användas med Azure Virtual Machines och Azure VMware Solution. Azure Managed Disks ger förenklad diskhantering, förbättrad skalbarhet, förbättrad säkerhet och bättre skalning utan att behöva arbeta direkt med lagringskonton. Mer information finns i Azure Managed Disks.

Du använder azure-mgmt-compute biblioteket för att administrera hanterade diskar för en befintlig virtuell dator.

Ett exempel på hur du skapar en virtuell dator med biblioteket finns i azure-mgmt-compute Exempel – Skapa en virtuell dator.

Kodexemplen i den här artikeln visar hur du utför några vanliga uppgifter med hanterade diskar med hjälp av azure-mgmt-compute biblioteket. De kan inte köras som de är, men är utformade för att du ska kunna införliva dem i din egen kod. Du kan läsa Exempel – Skapa en virtuell dator för att lära dig hur du skapar en instans av azure.mgmt.compute ComputeManagementClient i koden för att köra exemplen.

Mer fullständiga exempel på hur du använder biblioteket finns i azure-mgmt-compute Azure SDK för Python-exempel för beräkning i GitHub.

Fristående hanterade diskar

Du kan skapa fristående hanterade diskar på många sätt, vilket visas i följande avsnitt.

Skapa en tom hanterad disk

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

Skapa en hanterad disk från bloblagring

Den hanterade disken skapas från en virtuell hårddisk (VHD) som lagras som en blob.

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

Skapa en Hanterad disk-avbildning från Blob Storage

Avbildningen av den hanterade disken skapas från en virtuell hårddisk (VHD) som lagras som en blob.

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

Skapa en hanterad disk från din egen avbildning

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

Virtuell dator med hanterade diskar

Du kan skapa en virtuell dator med en implicit hanterad disk för en viss diskavbildning, vilket gör att du inte kan ange all information.

En hanterad disk skapas implicit när du skapar en virtuell dator från en OS-avbildning i Azure. I parametern storage_profile är det os_disk valfritt och du behöver inte skapa ett lagringskonto som nödvändig förutsättning för att skapa en virtuell dator.

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

Ett fullständigt exempel på hur du skapar en virtuell dator med hjälp av Azure-hanteringsbiblioteken finns i Exempel – Skapa en virtuell dator för Python. I exemplet skapa använder du parametern storage_profile .

Du kan också skapa en storage_profile från din egen avbildning:

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

Du kan enkelt koppla en tidigare etablerad hanterad disk:

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

Vm-skalningsuppsättningar med hanterade diskar

Innan hanterade diskar behövde du skapa ett lagringskonto manuellt för alla virtuella datorer som du ville använda i skalningsuppsättningen och sedan använda listparametern vhd_containers för att ange alla lagringskontonamn till RestAPI för skalningsuppsättning.

Eftersom du inte behöver hantera lagringskonton med Azure Managed Disks kan skalningsuppsättningarna storage_profile för virtuella datorer nu vara exakt samma som de som används för att skapa virtuella datorer:

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

Det fullständiga exemplet är följande:

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

Andra åtgärder med hanterade diskar

Ändra storlek på en hanterad disk

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

Uppdatera lagringskontotypen för hanterade diskar

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

Skapa en avbildning från Blob Storage

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

Skapa en ögonblicksbild av en hanterad disk som för närvarande är ansluten till en virtuell dator

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

Se även