Compartir a través de


Uso de Azure Managed Disks con las bibliotecas de Azure (SDK) para Python

Azure Managed Disks es un almacenamiento en bloques duradero y de alto rendimiento diseñado para su uso con Azure Virtual Machines y Azure VMware Solution. Simplifican la administración de discos, ofrecen mayor escalabilidad, mejoran la seguridad y eliminan la necesidad de administrar las cuentas de almacenamiento directamente. Para más información, consulte Azure Managed Disks.

Para las operaciones en Managed Disks asociadas a una máquina virtual existente, use la azure-mgmt-compute biblioteca .

En los ejemplos de código de este artículo se muestran las operaciones comunes con Managed Disks mediante la azure-mgmt-compute biblioteca. Estos ejemplos no están diseñados para ejecutarse como scripts independientes, sino para integrarse en su propio código. Para obtener información sobre cómo crear una ComputeManagementClient instancia desde azure.mgmt.compute en el script, consulte Ejemplo: Creación de una máquina virtual.

Para obtener ejemplos más completos de cómo usar la azure-mgmt-compute biblioteca, consulte Ejemplos de Azure SDK para Python relacionados con cómputo en GitHub.

Discos administrados independientes

En los ejemplos siguientes se muestran diferentes formas de aprovisionar Managed Disks independientes.

Creación de un disco administrado vacío

En este ejemplo se muestra cómo crear un disco administrado vacío. Puede usarlo como un disco en blanco para conectarse a una máquina virtual o como punto de partida para crear instantáneas o imágenes.

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

Creación de un disco administrado a partir de Blob Storage

En este ejemplo se muestra cómo crear un disco administrado a partir de un archivo VHD almacenado en Azure Blob Storage. Esto resulta útil cuando desea reutilizar o mover un disco duro virtual existente a 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()

Creación de una imagen de Managed Disk a partir de Blob Storage

En este ejemplo se muestra cómo crear una imagen de Managed Disk a partir de un archivo VHD almacenado en Azure Blob Storage. Esto resulta útil cuando desea crear una imagen reutilizable que se pueda usar para crear nuevas máquinas virtuales.

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

Creación de un disco administrado a partir de su propia imagen

En este ejemplo se muestra cómo crear un disco administrado mediante la copia de uno existente. Esto resulta útil cuando desea realizar una copia de seguridad o usar la misma configuración de disco en otra máquina virtual.

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

Máquina virtual con Managed Disks

Puede crear una máquina virtual con un disco administrado creado implícitamente en función de una imagen de disco específica, lo que elimina la necesidad de definir manualmente todos los detalles del disco.

Un disco administrado se crea implícitamente al crear una máquina virtual a partir de una imagen del sistema operativo en Azure. Azure controla automáticamente la cuenta de almacenamiento, por lo que no es necesario especificar storage_profile.os_disk ni crear manualmente una cuenta de almacenamiento.

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

Para obtener un ejemplo completo en el que se muestra cómo crear una máquina virtual mediante las bibliotecas de administración de Azure para Python, consulte Ejemplo: Creación de una máquina virtual. En este ejemplo se muestra cómo usar el storage_profile parámetro .

También puede crear un storage_profile a partir de su propia imagen.

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

Puede conectar fácilmente un disco administrado aprovisionado anteriormente:

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

Conjuntos de escalado de máquinas virtuales con discos administrados

Antes de Azure Managed Disks, tenías que crear manualmente una cuenta de almacenamiento para cada máquina virtual en tu Conjunto de Escala de Máquinas Virtuales y usar el parámetro vhd_containers para especificar esas cuentas de almacenamiento en la API REST del conjunto de escala.

Con Azure Managed Disks, la administración de cuentas de almacenamiento ya no es necesaria. Como resultado, los storage_profileconjuntos de escalado de máquinas virtuales usados para los conjuntos de escalado de máquinas virtuales ahora pueden coincidir con el usado para la creación de máquinas virtuales individuales:

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

El ejemplo completo es el siguiente:

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

Otras operaciones con Managed Disks

Cambio de tamaño de un disco administrado

En este ejemplo se muestra cómo hacer que un disco administrado existente sea mayor. Esto resulta útil cuando necesita más espacio para los datos o las aplicaciones.

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

Actualización del tipo de cuenta de almacenamiento de Managed Disks

En este ejemplo se muestra cómo cambiar el tipo de almacenamiento de un disco administrado y aumentar su tamaño. Esto resulta útil cuando necesita más espacio o un mejor rendimiento para los datos o las aplicaciones.

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

Creación de una imagen a partir de Blob Storage

En este ejemplo se muestra cómo crear una imagen de Managed Disk a partir de un archivo VHD almacenado en Azure Blob Storage. Esto resulta útil cuando desea crear una imagen reutilizable que puede usar para crear nuevas máquinas virtuales.

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

Creación de una instantánea de un disco administrado que está conectado actualmente a una máquina virtual

En este ejemplo se muestra cómo tomar una instantánea de un disco administrado que está conectado a una máquina virtual. Puede usar la instantánea para hacer una copia de seguridad del disco o restaurarlo más adelante si es necesario.

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

Consulte también