Python용 Azure 라이브러리(SDK)와 함께 Azure Managed Disks 사용

Azure Managed Disks는 Azure Virtual Machines과 Azure VMware Solution을 통해 사용하도록 설계된 고성능 지속형 블록 스토리지입니다. Azure Managed Disks는 스토리지 계정으로 직접 작업하지 않고도 간소화된 디스크 관리, 향상된 확장성, 향상된 보안 및 더 나은 크기 조정을 제공합니다. 자세한 내용은 Azure Managed Disks를 참조 하세요.

라이브러리를 azure-mgmt-compute 사용하여 기존 가상 머신에 대한 Managed Disks를 관리합니다.

라이브러리를 사용하여 가상 머신을 만드는 방법의 예는 azure-mgmt-compute 예제 - 가상 머신 만들기를 참조 하세요.

이 문서의 코드 예제에서는 라이브러리를 사용하여 azure-mgmt-compute 관리 디스크에서 몇 가지 일반적인 작업을 수행하는 방법을 보여 줍니다. 실행 가능하지는 않지만 사용자 고유의 코드에 통합할 수 있도록 설계되었습니다. 예제 - 가상 머신을 만들어 코드에서 인스턴스 azure.mgmt.compute ComputeManagementClient 를 만들어 예제를 실행하는 방법을 알아볼 수 있습니다.

라이브러리를 사용하는 azure-mgmt-compute 방법에 대한 자세한 예제는 GitHub의 컴퓨팅에 대한 Python용 Azure SDK 샘플을 참조하세요.

독립 실행형 Managed Disks

다음 섹션에 설명된 대로 여러 가지 방법으로 독립 실행형 Managed Disks를 만들 수 있습니다.

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

Blob Storage에서 Managed Disk 만들기

관리 디스크는 Blob으로 저장된 VHD(가상 하드 디스크)에서 만들어집니다.

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

Blob Storage에서 Managed Disk 이미지 만들기

관리 디스크 이미지는 Blob으로 저장된 VHD(가상 하드 디스크)에서 만들어집니다.

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

사용자 고유의 이미지에서 Managed Disk 만들기

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

Managed Disks가 있는 가상 머신

특정 디스크 이미지에 대한 암시적 Managed Disk를 사용하여 Virtual Machine을 만들 수 있으므로 모든 세부 정보를 지정하지 못하게 됩니다.

Managed Disk는 Azure의 OS 이미지에서 VM을 만들 때 암시적으로 만들어집니다. 매개 변수에서 storage_profile 이 매개 변수 os_disk 는 선택 사항이며 Virtual Machine을 만드는 데 필요한 전제 조건으로 스토리지 계정을 만들 필요가 없습니다.

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

Azure 관리 라이브러리를 사용하여 가상 머신을 만드는 방법에 대한 전체 예제는 Python의 경우 예제 - 가상 머신 만들기를 참조 하세요. 만들기 예제에서는 매개 변수를 storage_profile 사용합니다.

사용자 고유의 storage_profile 이미지에서 만들 수도 있습니다.

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

이전에 프로비전된 Managed 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()

Managed Disks를 사용하는 Virtual Machine Scale Sets

Managed Disks 전에 확장 집합 내에서 원하는 모든 VM에 대해 스토리지 계정을 수동으로 만든 다음 목록 매개 변수 vhd_containers 를 사용하여 확장 집합 RestAPI에 모든 스토리지 계정 이름을 제공해야 했습니다.

Azure Managed Disks storage_profile 를 사용하여 스토리지 계정을 관리할 필요가 없으므로 이제 Virtual Machine Scale Sets에 대한 스토리지 계정이 VM 생성에 사용된 계정과 정확히 같을 수 있습니다.

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

전체 샘플은 다음과 같습니다.

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

Managed Disks를 사용하는 기타 작업

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

Managed Disks의 스토리지 계정 유형 업데이트

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

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

현재 가상 머신에 연결된 Managed Disk의 스냅샷 만들기

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

참고 항목