Esercitazione: Creare immagini di macchine virtuali Windows con Azure PowerShell

Si applica a: ✔️ macchine virtuali di Windows ✔️ set di scalabilità flessibili

È possibile usare le immagini per eseguire il bootstrap delle distribuzioni e garantire la coerenza tra più macchine virtuali. In questa esercitazione si crea una propria immagine specializzata di una macchina virtuale di Azure usando PowerShell e la si archivia in una raccolta di calcolo di Azure (in precedenza nota come Raccolta immagini condivise). Scopri come:

  • Creare una Raccolta di calcolo di Azure
  • Creare una definizione dell'immagine
  • Creare una versione di immagine
  • Creare una macchina virtuale da un'immagine
  • Condividere una raccolta

Operazioni preliminari

La procedura riportata di seguito illustra come convertire una macchina virtuale esistente in un'immagine personalizzata riutilizzabile che è possibile usare per creare nuove macchine virtuali.

Per completare l'esempio contenuto in questa esercitazione è necessario disporre di una macchina virtuale esistente. Se necessario, vedere l'avvio rapido con PowerShell per creare una macchina virtuale da usare per questa esercitazione. Quando si esegue l'esercitazione, sostituire i nomi delle risorse dove necessario.

Panoramica

Una raccolta di calcolo di Azure semplifica la condivisione di immagini personalizzate nell'organizzazione. Le immagini personalizzate sono come le immagini di marketplace, ma si possono creare autonomamente. Le immagini personalizzate possono essere usate per le configurazioni di avvio, ad esempio il precaricamento e le configurazioni di applicazioni e altre configurazioni del sistema operativo.

La raccolta di calcolo di Azure consente di condividere le immagini VM personalizzate con altri utenti. Scegliere le immagini che si intende condividere, le aree nelle quali si vuole renderle disponibili e i destinatari.

La funzionalità Raccolta di calcolo di Azure presenta più tipi di risorse:

Risorsa Descrizione
Origine immagine Si tratta di una risorsa che è possibile usare per creare una versione di immagine in una raccolta. Un'origine dell'immagine può essere una macchina virtuale di Azure esistente generalizzata o specializzata, un'immagine gestita, uno snapshot o una versione di immagine di un'altra raccolta.
Gallery Come in Azure Marketplace, una raccolta è un repository per la gestione e la condivisione delle immagini e delle applicazioni di macchine virtuali, ma è possibile controllare chi ha accesso.
Definizione delle immagini Le definizioni di immagini vengono create all'interno di una raccolta e forniscono informazioni sull'immagine e sui requisiti per il relativo uso interno. Questa include il fatto che l'immagine è per Windows o Linux, le note sulla versione e i requisiti minimi e massimi di memoria. Si tratta della definizione di un tipo di immagine.
Versione dell'immagine La versione dell'immagine è ciò che si usa per creare una macchina virtuale quando si usa una raccolta. È possibile avere più versioni di un'immagine in base alle necessità del proprio ambiente. Come un'immagine gestita, quando si usa una versione dell'immagine per creare una macchina virtuale, la versione dell'immagine viene usata per creare nuovi dischi per la macchina virtuale. Le versioni delle immagini possono essere usate più volte.

Avviare Azure Cloud Shell

Azure Cloud Shell è una shell interattiva gratuita che può essere usata per eseguire la procedura di questo articolo. Include strumenti comuni di Azure preinstallati e configurati per l'uso con l'account.

Per aprire Cloud Shell, basta selezionare Prova nell'angolo superiore destro di un blocco di codice. È anche possibile avviare Cloud Shell in una scheda separata del browser visitando https://shell.azure.com/powershell. Selezionare Copia per copiare i blocchi di codice, incollarli in Cloud Shell e premere INVIO per eseguirli.

Ottenere la macchina virtuale

Per visualizzare un elenco di macchine virtuali disponibili in un gruppo di risorse, usare Get-AzVM. Quando si conosce il nome della macchina virtuale e il gruppo di risorse in cui si trova, è possibile usare nuovamente Get-AzVM per ottenere l'oggetto macchina virtuale e archiviarlo in una variabile da usare in un secondo momento. Questo esempio ottiene una macchina virtuale denominata sourceVM dal gruppo di risorse myResourceGroup e la assegna alla variabile $sourceVM.

$sourceVM = Get-AzVM `
   -Name sourceVM `
   -ResourceGroupName myResourceGroup

Creare un gruppo di risorse

Creare un gruppo di risorse con il comando New-AzResourceGroup.

Un gruppo di risorse di Azure è un contenitore logico in cui le risorse di Azure vengono distribuite e gestite. Nell'esempio seguente viene creato un gruppo di risorse denominato myGalleryRG nell'area EastUS:

$resourceGroup = New-AzResourceGroup `
   -Name 'myGalleryRG' `
   -Location 'EastUS'

Una raccolta è la risorsa primaria usata per abilitare la condivisione delle immagini. I caratteri consentiti per il nome della raccolta sono lettere maiuscole o minuscole, numeri e punti. Il nome della raccolta non può contenere trattini. I nomi di raccolta devono essere univoci all'interno della sottoscrizione.

Creare una raccolta usando New-AzGallery. L'esempio seguente crea una raccolta denominata myGallery nel gruppo di risorse myGalleryRG.

$gallery = New-AzGallery `
   -GalleryName 'myGallery' `
   -ResourceGroupName $resourceGroup.ResourceGroupName `
   -Location $resourceGroup.Location `
   -Description 'Azure Compute Gallery for my organization'	

Creare una definizione dell'immagine

Le definizioni di immagini creano un raggruppamento logico per le immagini. Vengono usate per gestire le informazioni sulle versioni di immagini create al loro interno. I nomi delle definizioni di immagini possono essere costituiti da lettere maiuscole o minuscole, numeri, trattini e punti. Per altre informazioni sui valori che è possibile specificare per la definizione di immagine, vedere Definizioni di immagini.

Per creare la definizione di immagine, usare New-AzGalleryImageDefinition. In questo esempio l'immagine della raccolta è denominata myGalleryImage e viene creata per un'immagine specializzata.

$galleryImage = New-AzGalleryImageDefinition `
   -GalleryName $gallery.Name `
   -ResourceGroupName $resourceGroup.ResourceGroupName `
   -Location $gallery.Location `
   -Name 'myImageDefinition' `
   -OsState specialized `
   -OsType Windows `
   -Publisher 'myPublisher' `
   -Offer 'myOffer' `
   -Sku 'mySKU'

Creare una versione di immagine

Per creare una versione di immagine da una macchina virtuale, usare New-AzGalleryImageVersion.

I caratteri consentiti per le versioni delle immagini sono numeri e punti. I numeri devono essere compresi nell'intervallo di un valore Integer a 32 bit. Formato: VersionePrincipale.VersioneSecondaria.Patch.

In questo esempio la versione dell'immagine è 1.0.0 e viene replicata nei data center degli Stati Uniti orientali e degli Stati Uniti centro-meridionali. Quando si scelgono le aree di destinazione per la replica, è necessario includere l'area source come destinazione per la replica.

Per creare una versione di immagine dalla macchina virtuale, usare $vm.Id.ToString() per -Source.

   $region1 = @{Name='South Central US';ReplicaCount=1}
   $region2 = @{Name='East US';ReplicaCount=2}
   $targetRegions = @($region1,$region2)

New-AzGalleryImageVersion `
   -GalleryImageDefinitionName $galleryImage.Name`
   -GalleryImageVersionName '1.0.0' `
   -GalleryName $gallery.Name `
   -ResourceGroupName $resourceGroup.ResourceGroupName `
   -Location $resourceGroup.Location `
   -TargetRegion $targetRegions  `
   -Source $sourceVM.Id.ToString() `
   -PublishingProfileEndOfLifeDate '2030-12-01'

La replica dell'immagine in tutte le aree di destinazione può richiedere tempo.

Creazione di una macchina virtuale

Ora che si dispone di un'immagine specializzata, è possibile usarla per creare una o più macchine virtuali nuove usando il cmdlet New-AzVM. Per usare l'immagine, eseguire Set-AzVMSourceImage e impostare -Id sull'ID definizione dell'immagine (in questo caso $galleryImage.Id) in modo da usare sempre l'ultima versione dell'immagine.

Sostituire i nomi delle risorse di questo esempio secondo necessità.

# Create some variables for the new VM.
$resourceGroup = "myResourceGroup"
$location = "South Central US"
$vmName = "mySpecializedVM"

# Create a resource group
New-AzResourceGroup -Name $resourceGroup -Location $location

# Create the network resources.
$subnetConfig = New-AzVirtualNetworkSubnetConfig -Name mySubnet -AddressPrefix 192.168.1.0/24
$vnet = New-AzVirtualNetwork -ResourceGroupName $resourceGroup -Location $location `
  -Name MYvNET -AddressPrefix 192.168.0.0/16 -Subnet $subnetConfig
$pip = New-AzPublicIpAddress -ResourceGroupName $resourceGroup -Location $location `
  -Name "mypublicdns$(Get-Random)" -AllocationMethod Static -IdleTimeoutInMinutes 4
$nsgRuleRDP = New-AzNetworkSecurityRuleConfig -Name myNetworkSecurityGroupRuleRDP  -Protocol Tcp `
  -Direction Inbound -Priority 1000 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * `
  -DestinationPortRange 3389 -Access Deny
$nsg = New-AzNetworkSecurityGroup -ResourceGroupName $resourceGroup -Location $location `
  -Name myNetworkSecurityGroup -SecurityRules $nsgRuleRDP
$nic = New-AzNetworkInterface -Name $vmName -ResourceGroupName $resourceGroup -Location $location `
  -SubnetId $vnet.Subnets[0].Id -PublicIpAddressId $pip.Id -NetworkSecurityGroupId $nsg.Id

# Create a virtual machine configuration using $imageVersion.Id to specify the image version.
$vmConfig = New-AzVMConfig -VMName $vmName -VMSize Standard_D1_v2 | `
Set-AzVMSourceImage -Id $galleryImage.Id | `
Add-AzVMNetworkInterface -Id $nic.Id

# Create a virtual machine
New-AzVM -ResourceGroupName $resourceGroup -Location $location -VM $vmConfig

È consigliabile condividere l'accesso a livello di raccolta. Usare un indirizzo di posta elettronica e il cmdlet Get-AzADUser per ottenere l'ID oggetto per l'utente e quindi usare New-AzRoleAssignment per concedere l'accesso alla raccolta. Sostituire l'indirizzo di posta elettronica di esempio (in questo esempio alinne_montes@contoso.com) con quello personalizzato.

# Get the object ID for the user
$user = Get-AzADUser -StartsWith alinne_montes@contoso.com
# Grant access to the user for our gallery
New-AzRoleAssignment `
   -ObjectId $user.Id `
   -RoleDefinitionName Reader `
   -ResourceName $gallery.Name `
   -ResourceType Microsoft.Compute/galleries `
   -ResourceGroupName $resourceGroup.ResourceGroupName

Pulire le risorse

Quando non sono più necessari, è possibile rimuovere il gruppo di risorse e tutte le risorse correlate con il cmdlet Remove-AzResourceGroup:

# Delete the gallery 
Remove-AzResourceGroup -Name myGalleryRG

# Delete the VM
Remove-AzResourceGroup -Name myResoureceGroup

Azure Image Builder

Azure offre anche un servizio, basato su Packer, ovvero Image Builder per macchine virtuali di Azure. È sufficiente descrivere le personalizzazioni in un modello per gestire la creazione dell'immagine tramite questo servizio.

Passaggi successivi

In questa esercitazione è stata creata un'immagine di macchina virtuale specializzata. Contenuto del modulo:

  • Creare una Raccolta di calcolo di Azure
  • Creare una definizione dell'immagine
  • Creare una versione di immagine
  • Creare una macchina virtuale da un'immagine
  • Condividere una raccolta

Passare all'esercitazione successiva per informazioni sulle set di scalabilità di macchine virtuali.