Uso de Azure Managed Disks con las bibliotecas de Azure (SDK) para Python
Azure Managed Disks son un almacenamiento en bloques duradero y de alto rendimiento diseñado para usarse con Azure Virtual Machines y Azure VMware Solution. Azure Managed Disks proporciona administración simplificada de discos, escalabilidad mejorada, seguridad mejorada y mejor escalado sin tener que trabajar directamente con cuentas de almacenamiento. Para más información, consulte Azure Managed Disks.
La biblioteca se usa azure-mgmt-compute
para administrar Managed Disks para una máquina virtual existente.
Para obtener un ejemplo de cómo crear una máquina virtual con la azure-mgmt-compute
biblioteca, consulte Ejemplo: Creación de una máquina virtual.
Los ejemplos de código de este artículo muestran cómo realizar algunas tareas comunes con discos administrados mediante la azure-mgmt-compute
biblioteca. No se pueden ejecutar tal como está, pero están diseñados para incorporarse en su propio código. Puede consultar Ejemplo: Creación de una máquina virtual para obtener información sobre cómo crear una instancia de azure.mgmt.compute ComputeManagementClient
en el código para ejecutar los ejemplos.
Para obtener ejemplos más completos de cómo usar la azure-mgmt-compute
biblioteca, consulte Ejemplos de Azure SDK para Python para el proceso en GitHub.
Discos administrados independientes
Puede crear discos administrados independientes de muchas maneras, como se muestra en las secciones siguientes.
Crear un disco administrado vacío
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()
Crear un disco administrado a partir de Blob Storage
El disco administrado se crea a partir de un disco duro virtual (VHD) almacenado como un 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()
Crear una imagen de disco administrado a partir de Blob Storage
La imagen de disco administrado se crea a partir de un disco duro virtual (VHD) almacenado como un 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()
Crear un disco administrado a partir de una imagen de su propiedad
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 discos administrados
Puede crear una máquina virtual con un disco administrado implícito para una imagen de disco específica, lo que le evita tener que especificar todos los detalles.
Un disco administrado se crea implícitamente al crear una máquina virtual a partir de una imagen del sistema operativo en Azure. En el parámetro storage_profile
, el elemento os_disk
es opcional y no es necesario crear una cuenta de almacenamiento como condición previa necesaria para crear una máquina virtual.
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 sobre 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 el ejemplo de creación, se usa el storage_profile
parámetro .
También puede crear una storage_profile
con sus propias imágenes.
# 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 los discos administrados, había que crear manualmente una cuenta de almacenamiento para todas las máquinas virtuales que quería dentro del conjunto de escalado y, a continuación, usar el parámetro de lista vhd_containers
para proporcionar el nombre de todas las cuentas de almacenamiento a la API de REST del conjunto de escalado.
Dado que no tiene que administrar cuentas de almacenamiento con Azure Managed Disks, el storage_profile
para virtual Machine Scale Sets ahora puede ser exactamente el mismo que el usado en la creación de máquinas virtuales:
'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 discos administrados
Cambio del tamaño de un disco administrado
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 los discos administrados
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()
Crear una imagen a partir de un almacenamiento de blobs
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é asociado actualmente a una máquina virtual
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
- Ejemplo: Creación de una máquina virtual
- Ejemplo: Creación de un grupo de recursos
- Ejemplo: Enumeración de grupos de recursos en una suscripción
- Ejemplo: Creación de Azure Storage
- Ejemplo: Uso de Azure Storage
- Ejemplo: Creación y uso de una base de datos MySQL
- Realización de una breve encuesta sobre el SDK de Azure para Python