Utiliser Azure Managed Disks avec les bibliothèques Azure (SDK) pour Python

Les disques managés Azure sont un stockage de blocs durable hautes performances conçu pour les machines virtuelles Azure et Azure VMware Solution. Azure Disques managés offre une gestion simplifiée des disques, une scalabilité améliorée, une sécurité améliorée et une meilleure mise à l’échelle sans avoir à travailler directement avec des comptes de stockage. Pour plus d’informations, consultez Azure Disques managés.

Vous utilisez la azure-mgmt-compute bibliothèque pour administrer Disques managés pour une machine virtuelle existante.

Pour obtenir un exemple de création d’une machine virtuelle avec la azure-mgmt-compute bibliothèque, consultez l’exemple - Créer une machine virtuelle.

Les exemples de code de cet article montrent comment effectuer des tâches courantes avec des disques managés à l’aide de la azure-mgmt-compute bibliothèque. Ils ne sont pas exécutables en l’état, mais sont conçus pour vous permettre d’incorporer dans votre propre code. Vous pouvez consulter l’exemple - Créer une machine virtuelle pour apprendre à créer une instance de azure.mgmt.compute ComputeManagementClient votre code pour exécuter les exemples.

Pour obtenir des exemples plus complets d’utilisation de la azure-mgmt-compute bibliothèque, consultez les exemples du Kit de développement logiciel (SDK) Azure pour Python pour le calcul dans GitHub.

Disques managés autonomes

Vous pouvez créer des Disques managés autonomes de plusieurs façons, comme illustré dans les sections suivantes.

Créer un disque managé vide

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

Créer un disque managé à partir du Stockage Blob

Le disque managé est créé à partir d’un disque dur virtuel stocké en tant qu’objet 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()

Créer une image de disque managé à partir du Stockage Blob

L’image de disque managé est créée à partir d’un disque dur virtuel stocké en tant qu’objet 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()

Créer un disque managé à partir de votre propre image

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

Machines virtuelles avec disques managés

Vous pouvez créer une machine virtuelle avec un disque managé implicite pour une image de disque spécifique, ce qui vous évite de spécifier tous les détails.

Un disque managé est créé implicitement lors de la création d’une machine virtuelle à partir d’une image de système d’exploitation dans Azure. Dans le paramètre storage_profile, os_disk est facultatif, et vous n’avez pas besoin de créer un compte de stockage pour créer une machine virtuelle.

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

Pour obtenir un exemple complet sur la création d’une machine virtuelle à l’aide des bibliothèques de gestion Azure, pour Python, consultez l’exemple - Créer une machine virtuelle. Dans l’exemple de création, vous utilisez le storage_profile paramètre.

Vous pouvez également créer un storage_profile à partir de votre propre image :

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

Vous pouvez facilement attacher un disque managé précédemment approvisionné :

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

Groupes de machines virtuelles identiques avec la fonctionnalité Disques managés

Avant la fonctionnalité Disques managés, il fallait créer un compte de stockage manuellement pour chaque machine virtuelle que vous vouliez placer dans votre groupe identique. Il fallait ensuite utiliser le paramètre de liste vhd_containers afin de fournir tous les noms de comptes de stockage à l’API REST du groupe identique.

Étant donné que vous n’avez pas besoin de gérer les comptes de stockage avec Azure Disques managés, votre storage_profile groupe de machines virtuelles identiques peut maintenant être exactement le même que celui utilisé dans la création de machines virtuelles :

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

Voici l’exemple complet :

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

Autres opérations avec disques managés

Redimensionnement d’un disque managé

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

Mettre à jour le type de compte de stockage des disques managés

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

Créer une image à partir du stockage Blob

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

Créer une capture instantanée d’un disque managé actuellement attaché à une machine virtuelle

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

Voir aussi