Esercitazione: Creare un set di scalabilità di macchine virtuali e distribuire un'app a disponibilità elevata in Windows con Azure PowerShellTutorial: Create a virtual machine scale set and deploy a highly available app on Windows with Azure PowerShell

Un set di scalabilità di macchine virtuali consente di distribuire e gestire un set di macchine virtuali identiche con scalabilità automatica.A virtual machine scale set allows you to deploy and manage a set of identical, auto-scaling virtual machines. È possibile ridimensionare manualmente il numero di VM nel set di scalabilità o definire regole di scalabilità automatica in base all'utilizzo delle risorse, ad esempio la CPU, alla richiesta di memoria o al traffico di rete.You can scale the number of VMs in the scale set manually, or define rules to autoscale based on resource usage such as CPU, memory demand, or network traffic. In questa esercitazione viene distribuito un set di scalabilità di macchine virtuali in Azure.In this tutorial, you deploy a virtual machine scale set in Azure. Si apprenderà come:You learn how to:

  • Usare l'estensione dello script personalizzata per definire un sito IIS da ridimensionareUse the Custom Script Extension to define an IIS site to scale
  • Creare un bilanciamento del carico per il set di scalabilitàCreate a load balancer for your scale set
  • Creare un set di scalabilità di macchine virtualiCreate a virtual machine scale set
  • Aumentare o diminuire il numero di istanze in un set di scalabilitàIncrease or decrease the number of instances in a scale set
  • Creare regole di scalabilità automaticaCreate autoscale rules

Avviare Azure Cloud ShellLaunch Azure Cloud Shell

Azure Cloud Shell è una shell interattiva gratuita che può essere usata per eseguire la procedura di questo articolo.The Azure Cloud Shell is a free interactive shell that you can use to run the steps in this article. Include strumenti comuni di Azure preinstallati e configurati per l'uso con l'account.It has common Azure tools preinstalled and configured to use with your account. È sufficiente fare clic su Copia per copiare il codice, incollarlo in Cloud Shell e quindi premere INVIO per eseguirlo.Just click the Copy to copy the code, paste it into the Cloud Shell, and then press enter to run it. Esistono alcuni modi per avviare Cloud Shell:There are a few ways to launch the Cloud Shell:

Fare clic su Prova nell'angolo superiore destro di un blocco di codice.Click Try It in the upper right corner of a code block. Cloud Shell in questo articolo
Aprire Cloud Shell nel browser.Open Cloud Shell in your browser. https://shell.azure.com/powershell
Fare clic sul pulsante Cloud Shell nel menu in alto a destra nel portale di Azure.Click the Cloud Shell button on the menu in the upper right of the Azure portal. Cloud Shell nel portaleCloud Shell in the portal

Se si sceglie di installare e usare PowerShell in locale, per questa esercitazione è necessario il modulo Azure PowerShell versione 5.7.0 o successiva.If you choose to install and use the PowerShell locally, this tutorial requires the Azure PowerShell module version 5.7.0 or later. Eseguire Get-Module -ListAvailable AzureRM per trovare la versione.Run Get-Module -ListAvailable AzureRM to find the version. Se è necessario eseguire l'aggiornamento, vedere Installare e configurare Azure PowerShell.If you need to upgrade, see Install Azure PowerShell module. Se si esegue PowerShell in locale, è anche necessario eseguire Connect-AzureRmAccount per creare una connessione con Azure.If you are running PowerShell locally, you also need to run Connect-AzureRmAccount to create a connection with Azure.

Informazioni generali sui set di scalabilitàScale Set overview

Un set di scalabilità di macchine virtuali consente di distribuire e gestire un set di macchine virtuali identiche con scalabilità automatica.A virtual machine scale set allows you to deploy and manage a set of identical, auto-scaling virtual machines. Le macchine virtuali di un set di scalabilità vengono distribuite in domini logici di errore e di aggiornamento in uno o più gruppi di posizionamento.VMs in a scale set are distributed across logic fault and update domains in one or more placement groups. Si tratta di gruppi di VM configurate in modo simile, analoghi ai set di disponibilità.These are groups of similarly configured VMs, similar to availability sets.

Le VM vengono create in base alle esigenze in un set di scalabilità.VMs are created as needed in a scale set. È possibile definire regole di scalabilità automatica per controllare le modalità e i tempi di aggiunta e rimozione delle VM dal set di scalabilità.You define autoscale rules to control how and when VMs are added or removed from the scale set. Queste regole possono essere attivate in base a determinate metriche, ad esempio il carico della CPU, l'utilizzo della memoria o il traffico di rete.These rules can trigger based on metrics such as CPU load, memory usage, or network traffic.

I set di scalabilità supportano fino a 1.000 VM quando si usa un'immagine della piattaforma Azure.Scale sets support up to 1,000 VMs when you use an Azure platform image. Per i carichi di lavoro con requisiti significativi di installazione o personalizzazione di VM, si consiglia di creare un'immagine di VM personalizzata.For workloads with significant installation or VM customization requirements, you may wish to Create a custom VM image. È possibile creare fino a 300 macchine virtuali in un set di scalabilità quando si usa un'immagine personalizzata.You can create up to 300 VMs in a scale set when using a custom image.

Creare un set di scalabilitàCreate a scale set

Creare un set di scalabilità di macchine virtuali con il comando New-AzureRmVmss.Create a virtual machine scale set with New-AzureRmVmss. L'esempio seguente crea un set di scalabilità denominato myScaleSet che usa l'immagine della piattaforma Windows Server 2016 Datacenter.The following example creates a scale set named myScaleSet that uses the Windows Server 2016 Datacenter platform image. Vengono create automaticamente le risorse di rete di Azure per la rete virtuale, l'indirizzo IP pubblico e il bilanciamento del carico.The Azure network resources for virtual network, public IP address, and load balancer are automatically created. Quando richiesto, fornire le proprie credenziali amministrative desiderate per le istanze di macchina virtuale nel set di scalabilità:When prompted, provide your own desired administrative credentials for the VM instances in the scale set:

New-AzureRmVmss `
  -ResourceGroupName "myResourceGroupScaleSet" `
  -Location "EastUS" `
  -VMScaleSetName "myScaleSet" `
  -VirtualNetworkName "myVnet" `
  -SubnetName "mySubnet" `
  -PublicIpAddressName "myPublicIPAddress" `
  -LoadBalancerName "myLoadBalancer" `
  -UpgradePolicy "Automatic"

La creazione e la configurazione di tutte le macchine virtuali e risorse del set di scalabilità richiedono alcuni minuti.It takes a few minutes to create and configure all the scale set resources and VMs.

Distribuire l'applicazione di esempioDeploy sample application

Per testare il set di scalabilità, installare un'applicazione Web di base.To test your scale set, install a basic web application. Usare l'estensione script personalizzati di Azure per scaricare ed eseguire uno script che installa IIS nelle istanze di macchina virtuale.The Azure Custom Script Extension is used to download and run a script that installs IIS on the VM instances. Questa estensione è utile per la configurazione post-distribuzione, l'installazione di software o qualsiasi altra attività di configurazione o gestione.This extension is useful for post deployment configuration, software installation, or any other configuration / management task. Per altre informazioni, vedere Panoramica dell'estensione script personalizzata.For more information, see the Custom Script Extension overview.

Usare l'estensione script personalizzati per installare un server Web IIS di base.Use the Custom Script Extension to install a basic IIS web server. Applicare l'estensione di script personalizzati che installa IIS nel modo seguente:Apply the Custom Script Extension that installs IIS as follows:

# Define the script for your Custom Script Extension to run
$publicSettings = @{
    "fileUris" = (,"https://raw.githubusercontent.com/Azure-Samples/compute-automation-configurations/master/automate-iis.ps1");
    "commandToExecute" = "powershell -ExecutionPolicy Unrestricted -File automate-iis.ps1"
}

# Get information about the scale set
$vmss = Get-AzureRmVmss `
            -ResourceGroupName "myResourceGroupScaleSet" `
            -VMScaleSetName "myScaleSet"

# Use Custom Script Extension to install IIS and configure basic website
Add-AzureRmVmssExtension -VirtualMachineScaleSet $vmss `
    -Name "customScript" `
    -Publisher "Microsoft.Compute" `
    -Type "CustomScriptExtension" `
    -TypeHandlerVersion 1.8 `
    -Setting $publicSettings

# Update the scale set and apply the Custom Script Extension to the VM instances
Update-AzureRmVmss `
    -ResourceGroupName "myResourceGroupScaleSet" `
    -Name "myScaleSet" `
    -VirtualMachineScaleSet $vmss

Testare il set di scalabilitàTest your scale set

Per vedere il set di scalabilità in azione, ottenere l'indirizzo IP pubblico del servizio di bilanciamento del carico con il comando Get-AzureRmPublicIPAddress.To see your scale set in action, obtain the public IP address of your load balancer with Get-AzureRmPublicIPAddress. L'esempio seguente ottiene l'indirizzo IP per myPublicIP creato come parte del set di scalabilità:The following example obtains the IP address for myPublicIP created as part of the scale set:

Get-AzureRmPublicIPAddress `
    -ResourceGroupName "myResourceGroupScaleSet" `
    -Name "myPublicIPAddress" | select IpAddress

Immettere l'indirizzo IP pubblico in un Web browser.Enter the public IP address in to a web browser. Verrà visualizzata l'app Web, con il nome host della macchina virtuale a cui il servizio di bilanciamento del carico ha distribuito il traffico:The web app is displayed, including the hostname of the VM that the load balancer distributed traffic to:

Esecuzione del sito IIS

Per verificare il funzionamento del set di scalabilità, è possibile imporre l'aggiornamento del Web browser per visualizzare la distribuzione del traffico da parte del bilanciamento del carico tra tutte le VM che eseguono l'app.To see the scale set in action, you can force-refresh your web browser to see the load balancer distribute traffic across all the VMs running your app.

Attività di gestioneManagement tasks

Nel ciclo di vita del set di scalabilità, potrebbe essere necessario eseguire una o più attività di gestione.Throughout the lifecycle of the scale set, you may need to run one or more management tasks. Si potrebbe anche voler creare script per automatizzare le attività di ciclo di vita.Additionally, you may want to create scripts that automate various lifecycle-tasks. Azure PowerShell offre un modo rapido per eseguire queste operazioni.Azure PowerShell provides a quick way to do those tasks. Di seguito vengono illustrate alcune attività comuni.Here are a few common tasks.

Visualizzare le macchine virtuali in un set di scalabilitàView VMs in a scale set

Per visualizzare un elenco delle istanze di macchina virtuale in un set di scalabilità, usare Get-AzureRmVmssVM come illustrato di seguito:To view a list of VM instances in a scale set, use Get-AzureRmVmssVM as follows:

Get-AzureRmVmssVM -ResourceGroupName "myResourceGroupScaleSet" -VMScaleSetName "myScaleSet"

L'output di esempio seguente mostra due istanze di VM nel set di scalabilità:The following example output shows two VM instances in the scale set:

ResourceGroupName                 Name Location             Sku InstanceID ProvisioningState
-----------------                 ---- --------             --- ---------- -----------------
MYRESOURCEGROUPSCALESET   myScaleSet_0   eastus Standard_DS1_v2          0         Succeeded
MYRESOURCEGROUPSCALESET   myScaleSet_1   eastus Standard_DS1_v2          1         Succeeded

Per visualizzare altre informazioni su un'istanza di VM specifica, aggiungere il parametro -InstanceId a Get-AzureRmVmssVM.To view additional information about a specific VM instance, add the -InstanceId parameter to Get-AzureRmVmssVM. L'esempio seguente consente di visualizzare informazioni sull'istanza di macchina virtuale 1:The following example views information about VM instance 1:

Get-AzureRmVmssVM -ResourceGroupName "myResourceGroupScaleSet" -VMScaleSetName "myScaleSet" -InstanceId "1"

Aumentare o diminuire le istanze delle macchine virtualiIncrease or decrease VM instances

Per visualizzare il numero di istanze attualmente presenti in un set di scalabilità, usare il comando Get-AzureRmVmss ed eseguire una query su sku.capacity:To see the number of instances you currently have in a scale set, use Get-AzureRmVmss and query on sku.capacity:

Get-AzureRmVmss -ResourceGroupName "myResourceGroupScaleSet" `
    -VMScaleSetName "myScaleSet" | `
    Select -ExpandProperty Sku

È possibile quindi aumentare o ridurre manualmente il numero di macchine virtuali nel set di scalabilità con Update-AzureRmVmss.You can then manually increase or decrease the number of virtual machines in the scale set with Update-AzureRmVmss. L'esempio seguente imposta il numero di macchine virtuali del set di scalabilità su 3:The following example sets the number of VMs in your scale set to 3:

# Get current scale set
$scaleset = Get-AzureRmVmss `
  -ResourceGroupName "myResourceGroupScaleSet" `
  -VMScaleSetName "myScaleSet"

# Set and update the capacity of your scale set
$scaleset.sku.capacity = 3
Update-AzureRmVmss -ResourceGroupName "myResourceGroupScaleSet" `
    -Name "myScaleSet" `
    -VirtualMachineScaleSet $scaleset

Sono necessari alcuni minuti per aggiornare il numero specificato di istanze del set di scalabilità.If takes a few minutes to update the specified number of instances in your scale set.

Configurare le regole di scalabilità automaticaConfigure autoscale rules

Anziché scalare manualmente il numero di istanze del set di scalabilità, si definiscono regole di scalabilità automatica.Rather than manually scaling the number of instances in your scale set, you define autoscale rules. Queste regole monitorano le istanze nel set di scalabilità e rispondono di conseguenza in base alle metriche e alle soglie definite.These rules monitor the instances in your scale set and respond accordingly based on metrics and thresholds you define. L'esempio seguente aumenta il numero di istanze di uno quando il carico della CPU medio è maggiore del 60% per un periodo di 5 minuti.The following example scales out the number of instances by one when the average CPU load is greater than 60% over a 5-minute period. Se il carico della CPU medio scende poi al di sotto del 30% per un periodo di 5 minuti, le istanze vengono ridotte di una istanza:If the average CPU load then drops below 30% over a 5-minute period, the instances are scaled in by one instance:

# Define your scale set information
$mySubscriptionId = (Get-AzureRmSubscription)[0].Id
$myResourceGroup = "myResourceGroupScaleSet"
$myScaleSet = "myScaleSet"
$myLocation = "East US"
$myScaleSetId = (Get-AzureRmVmss -ResourceGroupName $myResourceGroup -VMScaleSetName $myScaleSet).Id 

# Create a scale up rule to increase the number instances after 60% average CPU usage exceeded for a 5-minute period
$myRuleScaleUp = New-AzureRmAutoscaleRule `
  -MetricName "Percentage CPU" `
  -MetricResourceId $myScaleSetId `
  -Operator GreaterThan `
  -MetricStatistic Average `
  -Threshold 60 `
  -TimeGrain 00:01:00 `
  -TimeWindow 00:05:00 `
  -ScaleActionCooldown 00:05:00 `
  -ScaleActionDirection Increase `
  -ScaleActionValue 1

# Create a scale down rule to decrease the number of instances after 30% average CPU usage over a 5-minute period
$myRuleScaleDown = New-AzureRmAutoscaleRule `
  -MetricName "Percentage CPU" `
  -MetricResourceId $myScaleSetId `
  -Operator LessThan `
  -MetricStatistic Average `
  -Threshold 30 `
  -TimeGrain 00:01:00 `
  -TimeWindow 00:05:00 `
  -ScaleActionCooldown 00:05:00 `
  -ScaleActionDirection Decrease `
  -ScaleActionValue 1

# Create a scale profile with your scale up and scale down rules
$myScaleProfile = New-AzureRmAutoscaleProfile `
  -DefaultCapacity 2  `
  -MaximumCapacity 10 `
  -MinimumCapacity 2 `
  -Rules $myRuleScaleUp,$myRuleScaleDown `
  -Name "autoprofile"

# Apply the autoscale rules
Add-AzureRmAutoscaleSetting `
  -Location $myLocation `
  -Name "autosetting" `
  -ResourceGroup $myResourceGroup `
  -TargetResourceId $myScaleSetId `
  -AutoscaleProfiles $myScaleProfile

Per altre informazioni di progettazione sull'uso della scalabilità automatica, vedere Procedure consigliate per la scalabilità automatica.For more design information on the use of autoscale, see autoscale best practices.

Passaggi successiviNext steps

In questa esercitazione è stato creato un set di scalabilità di macchine virtuali.In this tutorial, you created a virtual machine scale set. Si è appreso come:You learned how to:

  • Usare l'estensione dello script personalizzata per definire un sito IIS da ridimensionareUse the Custom Script Extension to define an IIS site to scale
  • Creare un bilanciamento del carico per il set di scalabilitàCreate a load balancer for your scale set
  • Creare un set di scalabilità di macchine virtualiCreate a virtual machine scale set
  • Aumentare o diminuire il numero di istanze in un set di scalabilitàIncrease or decrease the number of instances in a scale set
  • Creare regole di scalabilità automaticaCreate autoscale rules

Passare all'esercitazione successiva per maggiori informazioni sui concetti di bilanciamento del carico per le macchine virtuali.Advance to the next tutorial to learn more about load balancing concepts for virtual machines.