다음을 통해 공유


스토리지 계정의 특수한 VHD에서 VM 만들기

Powershell을 사용하여 특수한 비관리 디스크를 OS 디스크로 연결하여 새 VM을 만듭니다. 특수한 디스크는 기존 VM의 VHD 복사본으로 사용자 계정, 애플리케이션 및 원본 VM의 기타 상태 데이터를 유지합니다.

다음 두 가지 옵션을 사용할 수 있습니다.

옵션 1: 특수 VHD 업로드

Hyper-V와 같은 온-프레미스 가상화 도구를 사용하여 만든 특수한 VM 또는 다른 클라우드에서 내보낸 VM에서 VHD를 업로드할 수 있습니다.

VM 준비

온-프레미스 VM을 사용하여 만든 특수한 VHD 또는 다른 클라우드에서 내보낸 VHD를 업로드할 수 있습니다. 특수한 VHD는 사용자 계정, 애플리케이션 및 원본 VM의 다른 상태 데이터를 유지 관리합니다. 새 VM을 만드는데 VHD를 그대로 사용하려는 경우 다음 단계가 완료되었는지 확인합니다.

  • Azure에 업로드할 Windows VHD를 준비합니다. Sysprep을 사용하여 VM을 일반화하지 마십시오.
  • 모든 게스트 가상화 도구 및 VM에 설치된 에이전트를 제거합니다(예: VMware 도구).
  • VM이 DHCP를 통해 해당 IP 주소 및 DNS 설정을 가져오도록 구성되었는지 확인합니다. 이렇게 하면 서버를 시작할 때 VNet 내의 IP 주소를 가져옵니다.

스토리지 계정 가져오기

업로드한 VM 이미지를 저장할 Azure 스토리지 계정이 필요합니다. 기존 스토리지 계정을 사용하거나 새 계정을 만들 수 있습니다.

사용 가능한 스토리지 계정을 표시하려면 다음을 입력합니다.

Get-AzStorageAccount

기존 스토리지 계정을 사용하려면 VM 이미지 업로드 섹션으로 이동합니다.

스토리지 계정을 만들어야 하는 경우 다음 단계를 따릅니다.

  1. 스토리지 계정을 만들어야 하는 리소스 그룹의 이름을 알아야 합니다. 구독의 모든 리소스 그룹을 찾으려면 다음을 입력합니다.

    Get-AzResourceGroup
    

    미국 서부 지역에 myResourceGroup 이라는 이름의 리소스 그룹을 만들려면 다음을 입력합니다.

    New-AzResourceGroup -Name myResourceGroup -Location "West US"
    
  2. New-AzStorageAccount cmdlet을 사용하여 이 리소스 그룹에 mystorageaccount라는 이름의 스토리지 계정을 만듭니다.

    New-AzStorageAccount -ResourceGroupName myResourceGroup -Name mystorageaccount -Location "West US" `
        -SkuName "Standard_LRS" -Kind "Storage"
    

스토리지 계정에 VHD 업로드

Add-AzVhd cmdlet을 사용하여 스토리지 계정의 컨테이너에 이미지를 업로드합니다. 이 예제에서는 "C:\Users\Public\Documents\Virtual hard disks\"에서 myResourceGroup 리소스 그룹의 mystorageaccount라는 스토리지 계정에 파일 myVHD.vhd를 업로드합니다. 파일은 mycontainer라는 컨테이너에 배치되고 새 파일 이름은 myUploadedVHD.vhd가 됩니다.

$rgName = "myResourceGroup"
$urlOfUploadedImageVhd = "https://mystorageaccount.blob.core.windows.net/mycontainer/myUploadedVHD.vhd"
Add-AzVhd -ResourceGroupName $rgName -Destination $urlOfUploadedImageVhd `
    -LocalFilePath "C:\Users\Public\Documents\Virtual hard disks\myVHD.vhd"

성공하면 다음과 유사한 응답을 얻게 됩니다.

MD5 hash is being calculated for the file C:\Users\Public\Documents\Virtual hard disks\myVHD.vhd.
MD5 hash calculation is completed.
Elapsed time for the operation: 00:03:35
Creating new page blob of size 53687091712...
Elapsed time for upload: 01:12:49

LocalFilePath           DestinationUri
-------------           --------------
C:\Users\Public\Doc...  https://mystorageaccount.blob.core.windows.net/mycontainer/myUploadedVHD.vhd

이 명령은 네트워크 연결 및 VHD 파일의 크기에 따라 완료하는 데 다소 시간이 걸립니다.

옵션 2: 기존 Azure VM에서 VHD 복사

중복된 새 VM을 만들 때 사용할 다른 스토리지 계정에 VHD를 복사할 수 있습니다.

시작하기 전에

다음 사항을 확인합니다.

  • 원본 및 대상 스토리지 계정에 대한 정보가 있습니다. 원본 VM의 경우 스토리지 계정 및 컨테이너 이름이 필요합니다. 일반적으로 컨테이너 이름은 vhds가 됩니다. 또한 대상 스토리지 계정도 있어야 합니다. 아직 없는 경우 포털(모든 서비스> Storage 계정 > 추가)을 사용하거나 New-AzStorageAccount cmdlet을 사용하여 만들 수 있습니다.
  • AzCopy 도구를 다운로드 및 설치했습니다.

VM 할당을 취소합니다.

VM 할당을 취소하여 복사할 VHD를 해제합니다.

  • 포털: VirtualmachinesmyVM>> 중지 클릭
  • Powershell: Stop-AzVM을 사용하여 myResourceGroup 리소스 그룹에서 myVM으로 명명된 VM을 중지(할당 취소)합니다.
Stop-AzVM -ResourceGroupName myResourceGroup -Name myVM

Azure Portal의 VM에 대한 상태중지됨에서 중지됨(할당 취소됨) 으로 변경됩니다.

스토리지 계정 URL 가져오기

원본 및 대상 스토리지 계정의 URL이 필요합니다. URL은 https://<storageaccount>.blob.core.windows.net/<containerName>/ 형태입니다. 스토리지 계정 및 컨테이너 이름을 이미 알고 있는 경우 괄호 사이의 정보를 바꿔서 URL을 만듭니다.

Azure 포털 또는 Azure PowerShell을 사용하여 URL을 가져옵니다.

  • 포털: 모든 서비스>스토리지 계정>스토리지 계정>Blob에 대한 > 를 클릭하면 원본 VHD 파일이 vhds 컨테이너에 있을 것입니다. 컨테이너의 속성을 클릭하고 레이블이 URL인 텍스트를 복사합니다. 원본 및 대상 컨테이너의 URL이 모두 필요합니다.
  • Powershell: Get-AzVM을 사용하여 myResourceGroup 리소스 그룹에서 myVM으로 명명된 VM에 대한 정보를 가져옵니다. 결과에서 Vhd Uri에 대한 Storage 프로필 섹션을 살펴봅니다. Uri의 첫 번째 부분은 컨테이너에 대한 URL이고 마지막 부분은 VM에 대한 OS VHD 이름입니다.
Get-AzVM -ResourceGroupName "myResourceGroup" -Name "myVM"

스토리지 액세스 키 가져오기

원본 및 대상 스토리지 계정에 대한 액세스 키를 찾습니다. 액세스 키에 대한 자세한 내용은 Azure Storage 계정 방법을 참조하세요.

  • 포털: 모든 서비스>스토리지 계정>스토리지 계정>액세스 키를 클릭합니다. key1로 레이블이 지정된 키를 복사합니다.
  • Powershell: Get-AzStorageAccountKey를 사용하여 myResourceGroup 리소스 그룹에서 mystorageaccount 스토리지 계정에 대한 스토리지 키를 가져옵니다. key1로 레이블이 지정된 키를 복사합니다.
Get-AzStorageAccountKey -Name mystorageaccount -ResourceGroupName myResourceGroup

VHD 복사

AzCopy를 사용하여 스토리지 계정 간에 파일을 복사할 수 있습니다. 대상 컨테이너에 대해 지정된 컨테이너가 존재하지 않는 경우 컨테이너가 만들어집니다.

AzCopy를 사용하려면 로컬 컴퓨터에서 명령 프롬프트를 열고 AzCopy가 설치된 폴더로 이동합니다. 이 폴더는 C:\Program Files (x86)\Microsoft SDKs\Azure\AzCopy와 유사합니다.

컨테이너 내의 모든 파일을 복사하려면 /S 스위치를 사용합니다. 동일한 컨테이너에 있는 경우 OS VHD 및 모든 데이터 디스크를 복사하는 데 사용할 수 있습니다. 이 예에서는 mysourcestorageaccount 스토리지 계정의 mysourcecontainer 컨테이너에 있는 모든 파일을 mydestinationstorageaccount 스토리지 계정의 mydestinationcontainer 컨테이너로 복사하는 방법을 보여 줍니다. 스토리지 계정 및 컨테이너의 이름을 사용자 고유 값으로 바꿉니다. <sourceStorageAccountKey1><destinationStorageAccountKey1>을 사용자 고유 키로 바꿉니다.

AzCopy /Source:https://mysourcestorageaccount.blob.core.windows.net/mysourcecontainer `
    /Dest:https://mydestinationatorageaccount.blob.core.windows.net/mydestinationcontainer `
    /SourceKey:<sourceStorageAccountKey1> /DestKey:<destinationStorageAccountKey1> /S

여러 파일과 함께 컨테이너에서 특정 VHD를 복사하려면 /Pattern 스위치를 사용하여 파일 이름을 지정할 수도 있습니다. 이 예에서는 myFileName.vhd라는 파일만 복사됩니다.

AzCopy /Source:https://mysourcestorageaccount.blob.core.windows.net/mysourcecontainer `
  /Dest:https://mydestinationatorageaccount.blob.core.windows.net/mydestinationcontainer `
  /SourceKey:<sourceStorageAccountKey1> /DestKey:<destinationStorageAccountKey1> `
  /Pattern:myFileName.vhd

완료되면 다음과 유사한 메시지를 받게 됩니다.

Finished 2 of total 2 file(s).
[2016/10/07 17:37:41] Transfer summary:
-----------------
Total files transferred: 2
Transfer successfully:   2
Transfer skipped:        0
Transfer failed:         0
Elapsed time:            00.00:13:07

문제 해결

  • AZCopy를 사용하는 경우 “서버가 요청을 인증하지 못했습니다.”라는 오류 메시지가 표시되면 권한 부여 헤더의 값이 서명을 포함하여 올바른 형식으로 지정되었는지 확인합니다. 키 2 또는 보조 스토리지 키를 사용 중인 경우 주 또는 첫 번째 스토리지 키를 사용해 보세요.

새 VM 만들기

새 VM에서 사용할 네트워킹 및 기타 VM 리소스를 만들어야 합니다.

서브넷 및 VNet 만들기

가상 네트워크의 VNet 및 서브넷을 만듭니다.

  1. 서브넷을 만듭니다. 이 예제에서는 myResourceGroup 리소스 그룹에 mySubNet으로 명명된 서브넷을 만들고 10.0.0.0/24에 대한 서브넷 주소 접두사를 설정합니다.

    $rgName = "myResourceGroup"
    $subnetName = "mySubNet"
    $singleSubnet = New-AzVirtualNetworkSubnetConfig -Name $subnetName -AddressPrefix 10.0.0.0/24
    
  2. VNet을 만듭니다. 이 예제에서는 가상 네트워크 이름을 myVnetName으로, 위치를 미국 서부로, 가상 네트워크의 주소 접두사를 10.0.0.0/16으로 설정합니다.

    $location = "West US"
    $vnetName = "myVnetName"
    $vnet = New-AzVirtualNetwork -Name $vnetName -ResourceGroupName $rgName -Location $location `
        -AddressPrefix 10.0.0.0/16 -Subnet $singleSubnet
    

    네트워크 보안 그룹 및 RDP 규칙 만들기

    RDP를 사용하여 VM에 로그인할 수 있으려면 포트 3389에 대한 RDP 액세스를 허용하는 보안 규칙이 필요합니다. 새 VM의 VHD가 기존의 특수한 VM에서 생성되었기 때문에 VM이 만들어진 후에 RDP를 사용하여 로그온할 사용 권한을 갖고 있던 원본 가상 머신에서 기존 계정을 사용할 수 있습니다. 연결될 네트워크 인터페이스를 만들기 전에 완료해야 합니다.
    이 예제에서는 NSG 이름을 myNsg로 설정하고 RDP 규칙 이름을 myRdpRule로 설정합니다.

$nsgName = "myNsg"

$rdpRule = New-AzNetworkSecurityRuleConfig -Name myRdpRule -Description "Allow RDP" `
    -Access Allow -Protocol Tcp -Direction Inbound -Priority 110 `
    -SourceAddressPrefix Internet -SourcePortRange * `
    -DestinationAddressPrefix * -DestinationPortRange 3389
$nsg = New-AzNetworkSecurityGroup -ResourceGroupName $rgName -Location $location `
    -Name $nsgName -SecurityRules $rdpRule
	

엔드포인트 및 NSG 규칙에 대한 자세한 내용은 PowerShell을 사용하여 Azure에서 VM으로 포트 열기를 참조하세요.

공용 IP 주소 및 NIC 만들기

가상 네트워크에서 가상 머신과 통신하려면 공용 IP 주소 및 네트워크 인터페이스가 필요합니다.

  1. 공용 IP를 만듭니다. 이 예제에서는 공용 IP 주소 이름을 myIP로 설정합니다.

    $ipName = "myIP"
    $pip = New-AzPublicIpAddress -Name $ipName -ResourceGroupName $rgName -Location $location `
        -AllocationMethod Dynamic
    
  2. NIC 만들기. 이 예제에서는 NIC 이름을 myNicName으로 설정합니다. 또한 이번 단계에서는 앞에서 만든 네트워크 보안 그룹을 이 NIC와 연결합니다.

    $nicName = "myNicName"
    $nic = New-AzNetworkInterface -Name $nicName -ResourceGroupName $rgName `
     -Location $location -SubnetId $vnet.Subnets[0].Id -PublicIpAddressId $pip.Id -NetworkSecurityGroupId $nsg.Id
    

VM 이름 및 크기 설정

이 예에서는 VM 이름을 "myVM"으로 설정하고 VM 크기를 "Standard_A2"로 설정합니다.

$vmName = "myVM"
$vmConfig = New-AzVMConfig -VMName $vmName -VMSize "Standard_A2"

NIC 추가

$vm = Add-AzVMNetworkInterface -VM $vmConfig -Id $nic.Id

OS 디스크 구성

  1. 업로드하거나 복사한 VHD의 URI를 설정합니다. 이 예에서는 myOsDisk.vhd라는 VHD 파일을 myContainer라는 컨테이너의 myStorageAccount라는 스토리지 계정에 보관합니다.

    $osDiskUri = "https://myStorageAccount.blob.core.windows.net/myContainer/myOsDisk.vhd"
    
  2. OS 디스크를 추가합니다. 이 예제에서는 OS 디스크를 만들 때 VM 이름에 "osDisk"라는 용어가 추가되어 OS 디스크 이름이 생성됩니다. 또한 이 예에서는 이 Windows 기반 VHD를 VM에 OS 디스크로 연결해야 하는 것으로 지정합니다.

    $osDiskName = $vmName + "osDisk"
    $vm = Set-AzVMOSDisk -VM $vm -Name $osDiskName -VhdUri $osDiskUri -CreateOption attach -Windows
    

선택 사항: VM에 연결해야 하는 데이터 디스크가 있는 경우 데이터 VHD의 URL과 적절한 Lun(논리 단위 번호)을 사용하여 데이터 디스크를 추가합니다.

$dataDiskName = $vmName + "dataDisk"
$vm = Add-AzVMDataDisk -VM $vm -Name $dataDiskName -VhdUri $dataDiskUri -Lun 1 -CreateOption attach

스토리지 계정을 사용하는 경우 데이터 및 운영 체제 디스크 URL은 https://StorageAccountName.blob.core.windows.net/BlobContainerName/DiskName.vhd 형식입니다. 포털에서 대상 스토리지 컨테이너로 이동하고 운영 체제 또는 복사된 데이터 VHD를 클릭한 다음 URL의 내용을 복사하여 이 내용을 찾을 수 있습니다.

VM 완료

방금 만든 구성을 사용하여 VM을 만듭니다.

#Create the new VM
New-AzVM -ResourceGroupName $rgName -Location $location -VM $vm

이 명령에 성공할 경우 다음과 유사한 출력이 표시됩니다.

RequestId IsSuccessStatusCode StatusCode ReasonPhrase
--------- ------------------- ---------- ------------
                         True         OK OK   

VM이 만들어졌는지 확인

새로 만든 VM은 Azure Portal에서 모든 서비스>가상 머신에 표시되며 다음 PowerShell 명령을 사용해도 표시할 수 있습니다.

$vmList = Get-AzVM -ResourceGroupName $rgName
$vmList.Name

다음 단계

새 가상 머신에 로그인합니다. 자세한 내용은 Windows를 실행하는 Azure 가상 머신에 연결하고 로그온하는 방법을 참조하세요.