Creare una macchina virtuale Windows da un disco specializzato

Creare una nuova macchina virtuale collegando un disco gestito specializzato come disco del sistema operativo con Powershell. Un disco specializzato è una copia del disco rigido virtuale proveniente da una macchina virtuale esistente che gestisce gli account utente, le applicazioni e altri dati di stato dalla macchina virtuale originale.

Quando si usa un disco rigido virtuale specializzato per creare una nuova VM, la nuova VM mantiene il nome computer della VM originale. Vengono mantenute anche altre informazioni specifiche del computer e, in alcuni casi, queste informazioni duplicate possono causare problemi. Quando si copia una VM, tenere presente quali tipi di informazioni specifiche del computer vengono usate dalle applicazioni.

Sono disponibili due opzioni:

Questo argomento illustra come usare i dischi gestiti. Se è presente una distribuzione legacy che richiede l'uso di un account di archiviazione, vedere Create a VM from a specialized VHD in a storage account (Creare una VM da un disco rigido virtuale specializzato in un account di archiviazione)

Prima di iniziare

Se si usa PowerShell, verificare di avere la versione più recente del modulo di PowerShell AzureRM.Compute.

Install-Module AzureRM.Compute -RequiredVersion 2.6.0

Per altre informazioni, vedere Azure PowerShell Versioning (Controllo delle versioni di Azure PowerShell).

Opzione 1: Caricare un disco rigido virtuale specializzato

È possibile caricare il disco rigido virtuale da una VM specializzata creata con uno strumento di virtualizzazione locale, ad esempio Hyper-V, o da una VM esportata da un altro cloud.

Preparare la macchina virtuale

Se si intende usare il disco rigido virtuale così come è per creare una nuova macchina virtuale, assicurare il completamento delle operazioni seguenti.

  • Preparare un disco rigido virtuale (VHD) di Windows per il caricamento in Azure. Non generalizzare la macchina Virtuale con Sysprep.
  • Rimuovere tutti gli strumenti di virtualizzazione guest e gli agenti installati nella macchina virtuale, ad esempio gli strumenti VMware.
  • Assicurarsi che la macchina virtuale sia configurata per eseguire il pull dell'indirizzo IP e delle impostazioni DNS tramite DHCP. In questo modo il server ottiene un indirizzo IP all'interno della rete virtuale all'avvio.

Ottenere l'account di archiviazione

Per archiviare il disco rigido virtuale caricato, è necessario un account di archiviazione di Azure. È possibile usare un account di archiviazione esistente o crearne uno nuovo.

Per mostrare gli account di archiviazione disponibili, digitare:

Get-AzureRmStorageAccount

Per usare un account di archiviazione esistente, passare alla sezione Caricare il disco rigido virtuale.

Per creare un account di archiviazione, seguire questa procedura:

  1. È necessario il nome del gruppo di risorse in cui deve essere creato l'account di archiviazione. Per trovare tutti i gruppi di risorse inclusi nella sottoscrizione digitare:

    Get-AzureRmResourceGroup
    

    Per creare un gruppo di risorse denominato MyResourceGroup nell'area Stati Uniti occidentali, digitare:

    New-AzureRmResourceGroup -Name myResourceGroup -Location "West US"
    
  2. Creare un account di archiviazione denominato mystorageaccount in questo gruppo di risorse con il cmdlet New-AzureRmStorageAccount.

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

Caricare il disco rigido virtuale nell'account di archiviazione

Usare il cmdlet Add-AzureRmVhd per caricare il disco rigido virtuale in un contenitore nell'account di archiviazione. In questo esempio, il file myVHD.vhd viene caricato da "C:\Users\Public\Documents\Virtual hard disks\" a un account di archiviazione denominato mystorageaccount nel gruppo di risorse myResourceGroup. Il file viene archiviato nel contenitore denominato mycontainer e il nuovo nome del file sarà myUploadedVHD.vhd.

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

Se l'operazione riesce, si ottiene una risposta simile alla seguente:

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

L'esecuzione del comando potrebbe richiedere del tempo, a seconda della connessione di rete e delle dimensioni del file VHD.

Creare un disco gestito dal disco rigido virtuale

Creare un disco gestito dal disco rigido virtuale specializzato nell'account di archiviazione usando New-AzureRMDisk. Questo esempio usa myOSDisk1 come nome del disco, inserisce il disco nella risorsa di archiviazione StandardLRS e usa https://storageaccount.blob.core.windows.net/vhdcontainer/osdisk.vhd come URI per il disco rigido virtuale di origine.

Creare un nuovo gruppo di risorse per la nuova VM.

$destinationResourceGroup = 'myDestinationResourceGroup'
New-AzureRmResourceGroup -Location $location -Name $destinationResourceGroup

Creare il nuovo disco del sistema operativo dal disco rigido virtuale caricato.

$sourceUri = https://storageaccount.blob.core.windows.net/vhdcontainer/osdisk.vhd)
$osDiskName = 'myOsDisk'
$osDisk = New-AzureRmDisk -DiskName $osDiskName -Disk `
    (New-AzureRmDiskConfig -AccountType StandardLRS  -Location $location -CreateOption Import `
    -SourceUri $sourceUri) `
    -ResourceGroupName $destinationResourceGroup

Opzione 2: Copiare una VM di Azure esistente

È possibile creare una copia di una VM che usa dischi gestiti acquisendo uno snapshot della VM, quindi usando tale snapshot per creare un nuovo disco gestito e una nuova VM.

Acquisire uno snapshot del disco del sistema operativo

È possibile acquisire uno snapshot di un'intera VM (tutti i dischi inclusi) o solo di un singolo disco. I passaggi seguenti illustrano come acquisire uno snapshot solo del disco del sistema operativo della VM usando il cmdlet New-AzureRmSnapshot.

Impostare alcuni parametri.

$resourceGroupName = 'myResourceGroup' 
$vmName = 'myVM'
$location = 'westus' 
$snapshotName = 'mySnapshot'  

Ottenere l'oggetto macchina virtuale.

$vm = Get-AzureRmVM -Name $vmName -ResourceGroupName $resourceGroupName

Ottenere il nome del disco del sistema operativo.

$disk = Get-AzureRmDisk -ResourceGroupName $resourceGroupName -DiskName $vm.StorageProfile.OsDisk.Name

Creare la configurazione dello snapshot.

$snapshotConfig =  New-AzureRmSnapshotConfig -SourceUri $disk.Id -OsType Windows -CreateOption Copy -Location $location 

Ottenere lo snapshot.

$snapShot = New-AzureRmSnapshot -Snapshot $snapshotConfig -SnapshotName $snapshotName -ResourceGroupName $resourceGroupName

Se si prevede di usare lo snapshot per creare una macchina virtuale a prestazioni elevate, usare il parametro -AccountType Premium_LRS con il comando New-AzureRmSnapshot. Il parametro crea lo snapshot in modo tale che venga archiviato come un disco gestito Premium. I dischi gestiti Premium sono più costosi di quelli Standard. Assicurarsi quindi che l'opzione Premium sia realmente necessaria prima di usare il parametro.

Creare un nuovo disco dallo snapshot

Creare un disco gestito dallo snapshot usando New-AzureRMDisk. Questo esempio usa myOSDisk come nome del disco.

Creare un nuovo gruppo di risorse per la nuova VM.

$destinationResourceGroup = 'myDestinationResourceGroup'
New-AzureRmResourceGroup -Location $location -Name $destinationResourceGroup

Impostare il nome del disco del sistema operativo.

$osDiskName = 'myOsDisk'

Creare il disco gestito.

$osDisk = New-AzureRmDisk -DiskName $osDiskName -Disk `
    (New-AzureRmDiskConfig  -Location $location -CreateOption Copy `
    -SourceResourceId $snapshot.Id) `
    -ResourceGroupName $destinationResourceGroup

Creare la nuova VM

Creare le risorse di rete e le altre risorse da usare nella nuova VM.

Creare la subNet e la vNet

Creare la rete virtuale e la subnet della rete virtuale.

Creare la subnet. In questo esempio viene creata una subnet denominata mySubNet nel gruppo di risorse myDestinationResourceGroup e il prefisso dell'indirizzo della subnet viene impostato su 10.0.0.0/24.

$subnetName = 'mySubNet'
$singleSubnet = New-AzureRmVirtualNetworkSubnetConfig -Name $subnetName -AddressPrefix 10.0.0.0/24

Creare la rete virtuale. In questo esempio il nome della rete virtuale è myVnetName, la posizione specificata è Stati Uniti occidentali e il prefisso dell'indirizzo per la rete virtuale è 10.0.0.0/16.

$vnetName = "myVnetName"
$vnet = New-AzureRmVirtualNetwork -Name $vnetName -ResourceGroupName $destinationResourceGroup -Location $location `
    -AddressPrefix 10.0.0.0/16 -Subnet $singleSubnet

Creare il gruppo di sicurezza di rete e una regola RDP

Per essere in grado di accedere alla VM tramite RDP, è necessario disporre di una regola di sicurezza che consenta l'accesso RDP sulla porta 3389. Poiché il disco rigido virtuale per la nuova macchina virtuale è stato creato da una VM specializzata esistente, è possibile usare un account della macchina virtuale di origine per RDP.

In questo esempio il nome NSG impostato è myNsg, mentre il nome della regola RDP è myRdpRule.

$nsgName = "myNsg"

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

Per altre informazioni sugli endpoint e sulle regole NSG, vedere Apertura di porte a una VM tramite PowerShell.

Creare un indirizzo IP pubblico e NIC

Per abilitare la comunicazione con la macchina virtuale nella rete virtuale, sono necessari un indirizzo IP pubblico e un'interfaccia di rete.

Creare l'IP pubblico. In questo esempio, il nome dell'indirizzo IP pubblico è myIP.

$ipName = "myIP"
$pip = New-AzureRmPublicIpAddress -Name $ipName -ResourceGroupName $destinationResourceGroup -Location $location `
   -AllocationMethod Dynamic

Creare la scheda NIC. In questo esempio, il nome specificato della scheda NIC è myNicName.

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

Impostare il nome e le dimensioni della macchina virtuale

Questo esempio imposta il nome della macchina virtuale su myVM e le dimensioni su Standard_A2.

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

Aggiungere la scheda di interfaccia di rete

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

Aggiungere il disco del sistema operativo

Aggiungere il disco del sistema operativo alla configurazione usando Set-AzureRmVMOSDisk. In questo esempio le dimensioni del disco vengono impostate su 128 GB e viene collegato il disco gestito come disco del sistema operativo Windows.

$vm = Set-AzureRmVMOSDisk -VM $vm -ManagedDiskId $osDisk.Id -StorageAccountType StandardLRS `
    -DiskSizeInGB 128 -CreateOption Attach -Windows

Completare la VM

Creare la macchina virtuale usando le configurazioni New-AzureRMVM appena create.

New-AzureRmVM -ResourceGroupName $destinationResourceGroup -Location $location -VM $vm

Se il comando ha esito positivo, viene visualizzato un output simile al seguente:

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

Verificare che la VM sia stata creata

La VM appena creata verrà visualizzata nel portale di Azure in Sfoglia > Macchine virtuali oppure usando i comandi di PowerShell seguenti:

$vmList = Get-AzureRmVM -ResourceGroupName $destinationResourceGroup
$vmList.Name

Passaggi successivi

Per accedere alla nuova macchina virtuale, passare alla VM nel portale, fare clic su Connettie aprire il file RDP di Desktop remoto. Usare le credenziali dell'account della macchina virtuale originale per accedere alla nuova macchina virtuale. Per altre informazioni, vedere Come connettersi e accedere a una macchina virtuale di Azure che esegue Windows.