Použití spravovaných disků Azure s knihovnami Azure (SDK) pro Python

Spravované disky Azure jsou vysoce výkonné odolné blokové úložiště navržené pro použití se službami Azure Virtual Machines a Řešení Azure VMware. Zjednodušují správu disků, nabízejí větší škálovatelnost, vylepšují zabezpečení a eliminují potřebu přímé správy účtů úložiště. Další informace najdete v tématu Spravované disky Azure.

Pro operace se spravovanými disky přidruženými k existujícímu virtuálnímu počítači použijte knihovnu azure-mgmt-compute .

Příklady kódu v tomto článku ukazují běžné operace se spravovanými disky pomocí azure-mgmt-compute knihovny. Tyto příklady nejsou určené ke spouštění jako samostatné skripty, ale spíše k integraci do vlastního kódu. Informace o tom, jak vytvořit ComputeManagementClient instanci ze azure.mgmt.compute skriptu, najdete v tématu Příklad – Vytvoření virtuálního počítače.

Podrobnější příklady použití azure-mgmt-compute knihovny najdete v ukázkách sady Azure SDK pro Python pro výpočty na GitHubu.

Samostatné spravované disky

Následující příklady ukazují různé způsoby zřízení samostatných spravovaných disků.

Vytvoření prázdného spravovaného disku

Tento příklad ukazuje, jak vytvořit nový prázdný spravovaný disk. Můžete ho použít jako prázdný disk pro připojení k virtuálnímu počítači nebo jako výchozí bod pro vytváření snímků nebo imagí.

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

Vytvořte spravovaný disk z úložiště typu blob

Tento příklad ukazuje, jak vytvořit spravovaný disk ze souboru VHD uloženého ve službě Azure Blob Storage. Tato metoda je užitečná, když chcete znovu použít nebo přesunout existující virtuální pevný disk do 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()

Vytvoření obrazu spravovaného disku z úložiště blobů

Tento příklad ukazuje, jak vytvořit image spravovaného disku ze souboru VHD uloženého ve službě Azure Blob Storage. Tato metoda je užitečná, když chcete vytvořit opakovaně použitelnou image, kterou můžete použít k vytvoření nových virtuálních počítačů.

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

Vytvořte spravovaný disk z vlastního obrazu

Tento příklad ukazuje, jak vytvořit nový spravovaný disk zkopírováním existujícího disku. Tato metoda je užitečná, když chcete vytvořit zálohu nebo použít stejné nastavení disku na jiném virtuálním počítači.

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

Virtuální počítač se spravovanými disky

Můžete vytvořit virtuální počítač s implicitně vytvořeným spravovaným diskem na základě konkrétní image disku, takže nemusíte ručně definovat všechny podrobnosti o disku.

Při vytváření virtuálního počítače z image operačního systému v Azure implicitně vytvoříte spravovaný disk. Azure automaticky zpracovává účet úložiště, takže ho nemusíte zadávat storage_profile.os_disk ani vytvářet ručně.

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

Úplný příklad, který ukazuje, jak vytvořit virtuální počítač pomocí knihoven pro správu Azure pro Python, najdete v tématu Příklad – Vytvoření virtuálního počítače. Tento příklad ukazuje, jak použít storage_profile parametr.

Můžete také vytvořit storage_profile z vlastního obrazu.

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

Dříve zřízený spravovaný disk můžete snadno připojit:

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

Škálovací sady virtuálních počítačů se spravovanými disky

Před spravovanými disky Azure jste museli ručně vytvořit účet úložiště pro každý virtuální počítač ve škálovací sadě virtuálních počítačů a pomocí parametru vhd_containers určit tyto účty úložiště v rozhraní REST API škálovací sady.

S Spravované disky Azure už nemusíte spravovat účty úložiště. V důsledku toho se nyní může storage_profile pro Virtual Machine Scale Sets shodovat s tím, který se používá při vytváření jednotlivých virtuálních počítačů:

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

Úplná ukázka je následující:

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

Další operace se spravovanými disky

Změna velikosti spravovaného disku

Tento příklad ukazuje, jak zvětšit existující spravovaný disk. Tato změna je užitečná, když potřebujete více místa pro vaše data nebo aplikace.

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

Aktualizace typu účtu úložiště spravovaných disků

Tento příklad ukazuje, jak změnit typ úložiště spravovaného disku a zvětšit ho. Tato změna je užitečná, když potřebujete více místa nebo lepšího výkonu pro vaše data nebo aplikace.

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

Vytvoření obrazu z blobového úložiště

Tento příklad ukazuje, jak vytvořit image spravovaného disku ze souboru VHD uloženého v Azure Blob Storage. Tato metoda je užitečná, když chcete vytvořit opakovaně použitelnou image, kterou můžete použít k vytvoření nových virtuálních počítačů.

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

Vytvoření snímku spravovaného disku, který je aktuálně připojený k virtuálnímu počítači

Tento příklad ukazuje, jak pořídit snímek spravovaného disku, který je připojený k virtuálnímu počítači. Snímek můžete použít k zálohování disku nebo jeho pozdějšímu obnovení v případě potřeby.

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

Viz také