Azure에 VHD를 업로드하고 새 VM을 만드는 샘플 스크립트
이 스크립트는 일반화된 VM에서 로컬 .vhd 파일을 가져와서 Azure에 업로드하고, Managed Disk 이미지를 만들고, 새 VM을 만드는 데 사용합니다.
이 샘플에는 Azure PowerShell Az 1.0 이상이 필요합니다.
Get-Module -ListAvailable Az
를 실행하여 설치된 버전을 확인합니다.
설치해야 하는 경우 Azure PowerShell 모듈 설치를 참조하세요.
Connect-AzAccount를 실행하여 Azure에 로그인합니다.
Azure를 구독하고 있지 않다면 시작하기 전에 Azure 체험 계정을 만듭니다.
샘플 스크립트
# Provide values for the variables
$resourceGroup = 'myResourceGroup'
$location = 'EastUS'
$storageaccount = 'mystorageaccount'
$storageType = 'Standard_LRS'
$containername = 'mycontainer'
$localPath = 'C:\Users\Public\Documents\Hyper-V\VHDs\generalized.vhd'
$vmName = 'myVM'
$imageName = 'myImage'
$vhdName = 'myUploadedVhd.vhd'
$diskSizeGB = '128'
$subnetName = 'mySubnet'
$vnetName = 'myVnet'
$ipName = 'myPip'
$nicName = 'myNic'
$nsgName = 'myNsg'
$ruleName = 'myRdpRule'
$computerName = 'myComputerName'
$vmSize = 'Standard_DS1_v2'
# Get the username and password to be used for the administrators account on the VM.
# This is used when connecting to the VM using RDP.
$cred = Get-Credential
# Upload the VHD
New-AzResourceGroup -Name $resourceGroup -Location $location
New-AzStorageAccount -ResourceGroupName $resourceGroup -Name $storageAccount -Location $location `
-SkuName $storageType -Kind "Storage"
$urlOfUploadedImageVhd = ('https://' + $storageaccount + '.blob.core.windows.net/' + $containername + '/' + $vhdName)
Add-AzVhd -ResourceGroupName $resourceGroup -Destination $urlOfUploadedImageVhd `
-LocalFilePath $localPath
# Note: Uploading the VHD may take awhile!
# Create a managed image from the uploaded VHD
$imageConfig = New-AzImageConfig -Location $location
$imageConfig = Set-AzImageOsDisk -Image $imageConfig -OsType Windows -OsState Generalized `
-BlobUri $urlOfUploadedImageVhd
$image = New-AzImage -ImageName $imageName -ResourceGroupName $resourceGroup -Image $imageConfig
# Create the networking resources
$singleSubnet = New-AzVirtualNetworkSubnetConfig -Name $subnetName -AddressPrefix 10.0.0.0/24
$vnet = New-AzVirtualNetwork -Name $vnetName -ResourceGroupName $resourceGroup -Location $location `
-AddressPrefix 10.0.0.0/16 -Subnet $singleSubnet
$pip = New-AzPublicIpAddress -Name $ipName -ResourceGroupName $resourceGroup -Location $location `
-AllocationMethod Dynamic
$rdpRule = New-AzNetworkSecurityRuleConfig -Name $ruleName -Description 'Allow RDP' -Access Allow `
-Protocol Tcp -Direction Inbound -Priority 110 -SourceAddressPrefix Internet -SourcePortRange * `
-DestinationAddressPrefix * -DestinationPortRange 3389
$nsg = New-AzNetworkSecurityGroup -ResourceGroupName $resourceGroup -Location $location `
-Name $nsgName -SecurityRules $rdpRule
$nic = New-AzNetworkInterface -Name $nicName -ResourceGroupName $resourceGroup -Location $location `
-SubnetId $vnet.Subnets[0].Id -PublicIpAddressId $pip.Id -NetworkSecurityGroupId $nsg.Id
$vnet = Get-AzVirtualNetwork -ResourceGroupName $resourceGroup -Name $vnetName
# Start building the VM configuration
$vm = New-AzVMConfig -VMName $vmName -VMSize $vmSize
# Set the VM image as source image for the new VM
$vm = Set-AzVMSourceImage -VM $vm -Id $image.Id
# Finish the VM configuration and add the NIC.
$vm = Set-AzVMOSDisk -VM $vm -DiskSizeInGB $diskSizeGB -CreateOption FromImage -Caching ReadWrite
$vm = Set-AzVMOperatingSystem -VM $vm -Windows -ComputerName $computerName -Credential $cred `
-ProvisionVMAgent -EnableAutoUpdate
$vm = Add-AzVMNetworkInterface -VM $vm -Id $nic.Id
# Create the VM
New-AzVM -VM $vm -ResourceGroupName $resourceGroup -Location $location
# Verify that the VM was created
$vmList = Get-AzVM -ResourceGroupName $resourceGroup
$vmList.Name
배포 정리
다음 명령을 실행하여 리소스 그룹, VM 및 모든 관련된 리소스를 제거할 수 있습니다.
Remove-AzResourceGroup -Name $resourceGroup
스크립트 설명
이 스크립트는 다음 명령을 사용하여 배포합니다. 테이블에 있는 각 항목은 명령에 해당하는 문서에 연결됩니다.
명령 | 메모 |
---|---|
New-AzResourceGroup | 모든 리소스가 저장되는 리소스 그룹을 만듭니다. |
New-AzStorageAccount | 스토리지 계정을 만듭니다. |
Add-AzVhd | 온-프레미스 가상 머신에서 Azure의 클라우드 스토리지 계정에 있는 blob으로 가상 하드 디스크를 업로드합니다. |
New-AzImageConfig | 구성 가능한 이미지 개체를 만듭니다. |
Set-AzImageOsDisk | 이미지 개체의 운영 체제 디스크 속성을 설정합니다. |
New-AzImage | 새 이미지를 만듭니다. |
New-AzVirtualNetworkSubnetConfig | 서브넷 구성을 만듭니다. 이 구성은 가상 네트워크 만들기 프로세스에서 사용됩니다. |
New-AzVirtualNetwork | 가상 네트워크를 만듭니다. |
New-AzPublicIpAddress | 공용 IP 주소를 만듭니다. |
New-AzNetworkInterface | 네트워크 인터페이스를 만듭니다. |
New-AzNetworkSecurityRuleConfig | 네트워크 보안 그룹 규칙 구성을 만듭니다. 이 구성은 NSG가 만들어질 때 NSG 규칙을 만드는 데 사용됩니다. |
New-AzNetworkSecurityGroup | 네트워크 보안 그룹을 만듭니다. |
Get-AzVirtualNetwork | 리소스 그룹의 가상 네트워크를 가져옵니다. |
New-AzVMConfig | VM 구성을 만듭니다. 이 구성은 VM 이름, 운영 체제 및 관리자 자격 증명 등의 정보를 포함합니다. 이 구성은 VM을 만드는 중에 사용됩니다. |
Set-AzVMSourceImage | 가상 머신에 대한 이미지를 지정합니다. |
Set-AzVMOSDisk | 가상 머신의 운영 체제 디스크 속성을 설정합니다. |
Set-AzVMOperatingSystem | 가상 머신의 운영 체제 디스크 속성을 설정합니다. |
Add-AzVMNetworkInterface | 가상 머신에 네트워크 인터페이스를 추가합니다. |
New-AzVM | 가상 머신을 만듭니다. |
Remove-AzResourceGroup | 리소스 그룹 및 포함된 모든 리소스를 제거합니다. |
다음 단계
Azure PowerShell 모듈에 대한 자세한 내용은 Azure PowerShell 설명서를 참조하세요.
추가 가상 머신 PowerShell 스크립트 샘플은 Azure Windows VM 설명서에서 확인할 수 있습니다.