Come creare un'immagine di macchina virtuale non gestita da una macchina virtuale di AzureHow to create an unmanaged VM image from an Azure VM

In questo articolo illustra l'uso degli account di archiviazione.This article covers using storage accounts. È consigliabile usare dischi e immagini anziché un account di archiviazione.We recommend that you use managed disks and managed images instead of a storage account. Per altre informazioni, vedere Acquisire un'immagine gestita di una macchina virtuale generalizzata in Azure.For more information, see Capture a managed image of a generalized VM in Azure.

Questo articolo illustra come usare Azure PowerShell per creare un'immagine di una macchina virtuale generalizzata di Azure con un account di archiviazione.This article shows you how to use Azure PowerShell to create an image of a generalized Azure VM using a storage account. È quindi possibile usare l'immagine per creare un'altra VM.You can then use the image to create another VM. Questa immagine include il disco del sistema operativo e i dischi dati collegati alla macchina virtuale.The image includes the OS disk and the data disks that are attached to the virtual machine. L'immagine non include le risorse della rete virtuale, quindi è necessario configurare queste risorse quando si crea la nuova VM.The image doesn't include the virtual network resources, so you need to set up those resources when you create the new VM.

PrerequisitiPrerequisites

È necessario che sia installato Azure PowerShell 1.0.x o una versione più recente.You need to have Azure PowerShell version 1.0.x or newer installed. Se non è già stato installato PowerShell, vedere Come installare e configurare Azure PowerShell per la procedura di installazione.If you haven't already installed PowerShell, read How to install and configure Azure PowerShell for installation steps.

Generalizzare la VMGeneralize the VM

Questa sezione illustra come generalizzare la macchina virtuale di Windows da usare come immagine.This section shows you how to generalize your Windows virtual machine for use as an image. Generalizzando una VM si rimuovono anche tutte le informazioni personali sull'account e si prepara la macchina da usare come immagine.Generalizing a VM removes all your personal account information, among other things, and prepares the machine to be used as an image. Per altre informazioni su Sysprep, vedere Come usare Sysprep: Introduzione.For details about Sysprep, see How to Use Sysprep: An Introduction.

Assicurarsi che i ruoli server in esecuzione sulla macchina siano supportati da Sysprep.Make sure the server roles running on the machine are supported by Sysprep. Per ulteriori informazioni, vedere Supporto Sysprep per i ruoli serverFor more information, see Sysprep Support for Server Roles

Importante

Se si carica il disco rigido virtuale in Azure per la prima volta, verificare di aver preparato la macchina virtuale prima di eseguire Sysprep.If you are uploading your VHD to Azure for the first time, make sure you have prepared your VM before running Sysprep.

È possibile anche generalizzare una VM Linux tramite sudo waagent -deprovision+user e quindi usare PowerShell per acquisire la VM.You can also generalize a Linux VM using sudo waagent -deprovision+user and then use PowerShell to capture the VM. Per informazioni sull'uso dell'interfaccia della riga di comando per acquisire una macchina virtuale, vedere Come generalizzare e acquisire una macchina virtuale Linux con l'interfaccia della riga di comando di Azure.For information about using the CLI to capture a VM, see How to generalize and capture a Linux virtual machine using the Azure CLI .

  1. Accedere alla macchina virtuale Windows.Sign in to the Windows virtual machine.
  2. Aprire la finestra del prompt dei comandi come amministratore.Open the Command Prompt window as an administrator. Impostare la directory su %windir%\system32\sysprep, quindi eseguire sysprep.exe.Change the directory to %windir%\system32\sysprep, and then run sysprep.exe.
  3. Nella finestra di dialogo Utilità preparazione sistema selezionare Passare alla Configurazione guidata e verificare che la casella di controllo Generalizza sia selezionata.In the System Preparation Tool dialog box, select Enter System Out-of-Box Experience (OOBE), and make sure that the Generalize check box is selected.
  4. In Opzioni di arresto del sistema selezionare Arresta il sistema.In Shutdown Options, select Shutdown.
  5. Fare clic su OK.Click OK.

    Avvio di Sysprep

  6. Al termine, Sysprep arresta la macchina virtuale.When Sysprep completes, it shuts down the virtual machine.

Importante

Non riavviare la macchina virtuale fino a quando non viene completato il caricamento del disco rigido virtuale in Azure o la creazione dell'immagine dalla macchina virtuale.Do not restart the VM until you are done uploading the VHD to Azure or creating an image from the VM. Se la macchina virtuale viene riavviata accidentalmente, eseguire Sysprep per generalizzarla nuovamente.If the VM accidentally gets restarted, run Sysprep to generalize it again.

Accedere ad Azure PowerShellLog in to Azure PowerShell

  1. Aprire Azure PowerShell e accedere al proprio account di Azure.Open Azure PowerShell and sign in to your Azure account.

    Login-AzureRmAccount
    

    Verrà visualizzata una finestra popup in cui immettere le credenziali dell'account Azure.A pop-up window opens for you to enter your Azure account credentials.

  2. Ottenere l'ID di sottoscrizione per le sottoscrizioni disponibili.Get the subscription IDs for your available subscriptions.

    Get-AzureRmSubscription
    
  3. Impostare la sottoscrizione corretta utilizzandone l'ID.Set the correct subscription using the subscription ID.

    Select-AzureRmSubscription -SubscriptionId "<subscriptionID>"
    

Deallocare la VM e impostare lo stato generalizzatoDeallocate the VM and set the state to generalized

  1. Deallocare le risorse della VM.Deallocate the VM resources.

    Stop-AzureRmVM -ResourceGroupName <resourceGroup> -Name <vmName>
    

    Nel portale di Azure lo stato della VM passa da Arrestato ad Arrestato (deallocato).The Status for the VM in the Azure portal changes from Stopped to Stopped (deallocated).

  2. Impostare lo stato della macchina virtuale su Generalizzato.Set the status of the virtual machine to Generalized.

    Set-AzureRmVm -ResourceGroupName <resourceGroup> -Name <vmName> -Generalized
    
  3. Controllare lo stato della VM.Check the status of the VM. Nella sezione OSState/generalized per la VM, il valore DisplayStatus dovrebbe essere impostato su Macchina virtuale generalizzata.The OSState/generalized section for the VM should have the DisplayStatus set to VM generalized.

    $vm = Get-AzureRmVM -ResourceGroupName <resourceGroup> -Name <vmName> -Status
    $vm.Statuses
    

Creare l'immagineCreate the image

Creare l'immagine della macchina virtuale non gestita nel contenitore di archiviazione di destinazione usando questo comando.Create an unmanaged virtual machine image in the destination storage container using this command. L'immagine viene creata nello stesso account di archiviazione della macchina virtuale originale.The image is created in the same storage account as the original virtual machine. Il parametro -Path salva una copia del modello JSON per la macchina virtuale di origine nel computer locale.The -Path parameter saves a copy of the JSON template for the source VM to your local computer. Il parametro -DestinationContainerName è il nome del contenitore in cui si vuole salvare le immagini.The -DestinationContainerName parameter is the name of the container that you want to hold your images. Se il contenitore non esiste, verrà creato.If the container doesn't exist, it is created for you.

Save-AzureRmVMImage -ResourceGroupName <resourceGroupName> -Name <vmName> `
    -DestinationContainerName <destinationContainerName> -VHDNamePrefix <templateNamePrefix> `
    -Path <C:\local\Filepath\Filename.json>

È possibile ottenere l'URL dell'immagine dal modello del file JSON.You can get the URL of your image from the JSON file template. Passare alla sezione resources > storageProfile > osDisk > image > uri per il percorso completo dell'immagine.Go to the resources > storageProfile > osDisk > image > uri section for the complete path of your image. L'URL dell'immagine è simile a questo: https://<storageAccountName>.blob.core.windows.net/system/Microsoft.Compute/Images/<imagesContainer>/<templatePrefix-osDisk>.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.vhd.The URL of the image looks like: https://<storageAccountName>.blob.core.windows.net/system/Microsoft.Compute/Images/<imagesContainer>/<templatePrefix-osDisk>.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.vhd.

È anche possibile verificare l'URI nel portale.You can also verify the URI in the portal. L'immagine viene copiata in un contenitore denominato system nell'account di archiviazione.The image is copied to a container named system in your storage account.

Creare una macchina virtuale dall'immagineCreate a VM from the image

A questo punto è possibile creare una o più macchine virtuali dall'immagine non gestita.Now you can create one or more VMs from the unmanaged image.

Impostare l'URI del disco rigido virtualeSet the URI of the VHD

L'URI del disco rigido virtuale da usare è nel formato seguente: https://mystorageaccount.blob.core.windows.net/mycontainer/MyVhdName.vhd.The URI for the VHD to use is in the format: https://mystorageaccount.blob.core.windows.net/mycontainer/MyVhdName.vhd. In questo esempio il disco rigido virtuale denominato myVHD si trova nell'account di archiviazione mystorageaccount del contenitore mycontainer.In this example the VHD named myVHD is in the storage account mystorageaccount in the container mycontainer.

$imageURI = "https://mystorageaccount.blob.core.windows.net/mycontainer/myVhd.vhd"

Crea rete virtualeCreate a virtual network

Creare la rete virtuale e la subnet della rete virtuale stessa.Create the vNet and subnet of the virtual network.

  1. Creare la subnet.Create the subnet. Nell'esempio seguente viene creata una subnet denominata mySubnet nel gruppo di risorse myResourceGroup con il prefisso di indirizzo 10.0.0.0/24.The following sample creates a subnet named mySubnet in the resource group myResourceGroup with the address prefix of 10.0.0.0/24.

    $rgName = "myResourceGroup"
    $subnetName = "mySubnet"
    $singleSubnet = New-AzureRmVirtualNetworkSubnetConfig -Name $subnetName -AddressPrefix 10.0.0.0/24
    
  2. Creare la rete virtuale.Create the virtual network. Nell'esempio seguente viene creata una rete virtuale denominata myVnet nell'ubicazione West US con il prefisso di indirizzo 10.0.0.0/16.The following sample creates a virtual network named myVnet in the West US location with the address prefix of 10.0.0.0/16.

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

Creare un indirizzo IP pubblico e un'interfaccia di reteCreate a public IP address and network interface

Per abilitare la comunicazione con la macchina virtuale nella rete virtuale, sono necessari un indirizzo IP pubblico e un'interfaccia di rete.To enable communication with the virtual machine in the virtual network, you need a public IP address and a network interface.

  1. Creare un indirizzo IP pubblico.Create a public IP address. In questo esempio viene creato un indirizzo IP pubblico denominato myPip.This example creates a public IP address named myPip.

    $ipName = "myPip"
    $pip = New-AzureRmPublicIpAddress -Name $ipName -ResourceGroupName $rgName -Location $location `
        -AllocationMethod Dynamic
    
  2. Creare la scheda NIC.Create the NIC. In questo esempio viene creata una scheda NIC denominata myNic.This example creates a NIC named myNic.

    $nicName = "myNic"
    $nic = New-AzureRmNetworkInterface -Name $nicName -ResourceGroupName $rgName -Location $location `
        -SubnetId $vnet.Subnets[0].Id -PublicIpAddressId $pip.Id
    

Creare il gruppo di sicurezza di rete e una regola RDPCreate the network security group and an RDP rule

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.To be able to log in to your VM using RDP, you need to have a security rule that allows RDP access on port 3389.

In questo esempio viene creato un gruppo di sicurezza di rete denominato myNsg contenente una regola denominata myRdpRule che consente il traffico RDP sulla porta 3389.This example creates an NSG named myNsg that contains a rule called myRdpRule that allows RDP traffic over port 3389. Per altre informazioni sui gruppi di sicurezza di rete, vedere Apertura di porte a una VM tramite PowerShell.For more information about NSGs, see Opening ports to a VM in Azure using PowerShell.

$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 $rgName -Location $location `
    -Name $nsgName -SecurityRules $rdpRule

Creare una variabile per la rete virtualeCreate a variable for the virtual network

Creare una variabile per la rete virtuale realizzata.Create a variable for the completed virtual network.

$vnet = Get-AzureRmVirtualNetwork -ResourceGroupName $rgName -Name $vnetName

Creare la VMCreate the VM

PowerShell riportato di seguito completa le configurazioni della macchina virtuale e usa l'immagine della non gestita come origine per la nuova installazione.The following PowerShell completes the virtual machine configurations and uses unmanaged image as the source for the new installation.


    # Enter a new user name and password to use as the local administrator account 
    # for remotely accessing the VM.
    $cred = Get-Credential

    # Name of the storage account where the VHD is located. This example sets the 
    # storage account name as "myStorageAccount"
    $storageAccName = "myStorageAccount"

    # Name of the virtual machine. This example sets the VM name as "myVM".
    $vmName = "myVM"

    # Size of the virtual machine. This example creates "Standard_D2_v2" sized VM. 
    # See the VM sizes documentation for more information: 
    # https://azure.microsoft.com/documentation/articles/virtual-machines-windows-sizes/
    $vmSize = "Standard_D2_v2"

    # Computer name for the VM. This examples sets the computer name as "myComputer".
    $computerName = "myComputer"

    # Name of the disk that holds the OS. This example sets the 
    # OS disk name as "myOsDisk"
    $osDiskName = "myOsDisk"

    # Assign a SKU name. This example sets the SKU name as "Standard_LRS"
    # Valid values for -SkuName are: Standard_LRS - locally redundant storage, Standard_ZRS - zone redundant
    # storage, Standard_GRS - geo redundant storage, Standard_RAGRS - read access geo redundant storage,
    # Premium_LRS - premium locally redundant storage. 
    $skuName = "Standard_LRS"

    # Get the storage account where the uploaded image is stored
    $storageAcc = Get-AzureRmStorageAccount -ResourceGroupName $rgName -AccountName $storageAccName

    # Set the VM name and size
    $vmConfig = New-AzureRmVMConfig -VMName $vmName -VMSize $vmSize

    #Set the Windows operating system configuration and add the NIC
    $vm = Set-AzureRmVMOperatingSystem -VM $vmConfig -Windows -ComputerName $computerName `
        -Credential $cred -ProvisionVMAgent -EnableAutoUpdate
    $vm = Add-AzureRmVMNetworkInterface -VM $vm -Id $nic.Id

    # Create the OS disk URI
    $osDiskUri = '{0}vhds/{1}-{2}.vhd' `
        -f $storageAcc.PrimaryEndpoints.Blob.ToString(), $vmName.ToLower(), $osDiskName

    # Configure the OS disk to be created from the existing VHD image (-CreateOption fromImage).
    $vm = Set-AzureRmVMOSDisk -VM $vm -Name $osDiskName -VhdUri $osDiskUri `
        -CreateOption fromImage -SourceImageUri $imageURI -Windows

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

Verificare che la VM sia stata creataVerify that the VM was created

Al termine, la VM appena creata dovrebbe essere visualizzata nel portale di Azure in Browse (Sfoglia) > Macchine virtuali. In alternativa, è possibile usare i comandi PowerShell seguenti:When complete, you should see the newly created VM in the Azure portal under Browse > Virtual machines, or by using the following PowerShell commands:

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

Passaggi successiviNext steps

Per gestire la nuova macchina virtuale con Azure PowerShell, vedere Gestire macchine virtuali di Azure con Azure Resource Manager e PowerShell.To manage your new virtual machine with Azure PowerShell, see Manage virtual machines using Azure Resource Manager and PowerShell.