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