Configurare la scalabilità automatica con PowerShell
La scalabilità automatica permette di eseguire la giusta quantità di risorse per gestire il carico variabile dell'applicazione. È possibile configurare la scalabilità automatica usando il portale di Azure, l'interfaccia della riga di comando di Azure, PowerShell o ARM o i modelli Bicep.
Questo articolo illustra come configurare la scalabilità automatica per un set di scalabilità di macchine virtuali con PowerShell. Le configurazioni usano la procedura seguente:
- Creare un set di scalabilità che è possibile ridimensionare automaticamente
- Creare regole per la scalabilità orizzontale e l'aumento del numero di istanze
- Creare un profilo che usi le regole
- Applicare le impostazioni di scalabilità automatica
- Aggiornare le impostazioni di scalabilità automatica con le notifiche
Prerequisiti
Per configurare la scalabilità automatica con PowerShell, è necessario un account Azure con una sottoscrizione attiva. È possibile creare un account gratuitamente.
Configurazione dell'ambiente
#Set the subscription Id, VMSS name, and resource group name
$subscriptionId = (Get-AzContext).Subscription.Id
$resourceGroupName="rg-powershell-autoscale"
$vmssName="vmss-001"
Creare un set di scalabilità di macchine virtuali
Creare un set di scalabilità usando i cmdlet seguenti. Impostare le variabili $resourceGroupName
e $vmssName
per la suite dell'ambiente.
# create a new resource group
New-AzResourceGroup -ResourceGroupName $resourceGroupName -Location "EastUS"
# Create login credentials for the VMSS
$Cred = Get-Credential
$vmCred = New-Object System.Management.Automation.PSCredential($Cred.UserName, $Cred.Password)
New-AzVmss `
-ResourceGroupName $resourceGroupName `
-Location "EastUS" `
-VMScaleSetName $vmssName `
-Credential $vmCred `
-VirtualNetworkName "myVnet" `
-SubnetName "mySubnet" `
-PublicIpAddressName "myPublicIPAddress" `
-LoadBalancerName "myLoadBalancer" `
-OrchestrationMode "Flexible"
Creare le impostazioni di scalabilità automatica
Per creare un'impostazione di scalabilità automatica con PowerShell, seguire la sequenza seguente:
- Creare le regole usando
New-AzAutoscaleScaleRuleObject
- Creare un profilo usando
New-AzAutoscaleProfileObject
- Creare le impostazioni di scalabilità automatica usando
New-AzAutoscaleSetting
- Aggiornare le impostazioni usando
Update-AzAutoscaleSetting
Crea regole
Creare regole di aumento e aumento del numero di istanze, quindi associarle a un profilo.
Le regole vengono create usando New-AzAutoscaleScaleRuleObject
.
Lo script di PowerShell seguente crea due regole.
- Aumentare il numero di istanze quando la percentuale di CPU supera il 70%
- Aumentare le prestazioni quando percentuale CPU è inferiore al 30%
$rule1=New-AzAutoscaleScaleRuleObject `
-MetricTriggerMetricName "Percentage CPU" `
-MetricTriggerMetricResourceUri "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/virtualMachineScaleSets/$vmssName" `
-MetricTriggerTimeGrain ([System.TimeSpan]::New(0,1,0)) `
-MetricTriggerStatistic "Average" `
-MetricTriggerTimeWindow ([System.TimeSpan]::New(0,5,0)) `
-MetricTriggerTimeAggregation "Average" `
-MetricTriggerOperator "GreaterThan" `
-MetricTriggerThreshold 70 `
-MetricTriggerDividePerInstance $false `
-ScaleActionDirection "Increase" `
-ScaleActionType "ChangeCount" `
-ScaleActionValue 1 `
-ScaleActionCooldown ([System.TimeSpan]::New(0,5,0))
$rule2=New-AzAutoscaleScaleRuleObject `
-MetricTriggerMetricName "Percentage CPU" `
-MetricTriggerMetricResourceUri "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/virtualMachineScaleSets/$vmssName" `
-MetricTriggerTimeGrain ([System.TimeSpan]::New(0,1,0)) `
-MetricTriggerStatistic "Average" `
-MetricTriggerTimeWindow ([System.TimeSpan]::New(0,5,0)) `
-MetricTriggerTimeAggregation "Average" `
-MetricTriggerOperator "LessThan" `
-MetricTriggerThreshold 30 `
-MetricTriggerDividePerInstance $false `
-ScaleActionDirection "Decrease" `
-ScaleActionType "ChangeCount" `
-ScaleActionValue 1 `
-ScaleActionCooldown ([System.TimeSpan]::New(0,5,0))
La tabella seguente descrive i parametri usati nel cmdlet New-AzAutoscaleScaleRuleObject
.
Parametro | Descrizione |
---|---|
MetricTriggerMetricName |
Imposta la metrica del trigger di scalabilità automatica |
MetricTriggerMetricResourceUri |
Specifica la risorsa a cui appartiene la metrica MetricTriggerMetricName . MetricTriggerMetricResourceUri può essere qualsiasi risorsa e non solo la risorsa ridimensionata. Ad esempio, è possibile ridimensionare i set di scalabilità di macchine virtuali in base alle metriche create da un servizio di bilanciamento del carico, un database o il set di scalabilità stesso. MetricTriggerMetricName deve esistere per il MetricTriggerMetricResourceUri specificato. |
MetricTriggerTimeGrain |
Frequenza di campionamento della metrica monitorata dalla regola. MetricTriggerTimeGrain deve essere uno dei valori predefiniti per la metrica specificata e deve essere compreso tra 12 ore e 1 minuto. Ad esempio, MetricTriggerTimeGrain = PT1M"* indica che le metriche vengono campionate ogni 1 minuto e aggregate usando il metodo di aggregazione specificato in MetricTriggerStatistic . |
MetricTriggerTimeAggregation |
Metodo di aggregazione nel periodo specificato per timeGrain. Ad esempio, la statistica = "Average" e timeGrain = "PT1M" indica che le metriche vengono aggregate ogni 1 minuto prendendo la media. |
MetricTriggerStatistic |
Metodo di aggregazione usato per aggregare le metriche campionate. Ad esempio, TimeAggregation = "Average" aggrega le metriche campionate prendendo la media. |
MetricTriggerTimeWindow |
Periodo di tempo in cui il motore di scalabilità automatica cerca di aggregare la metrica. Questo valore deve essere maggiore del ritardo nella raccolta delle metriche, che varia in base alla risorsa. Deve essere compreso tra 5 minuti e 12 ore. Ad esempio, 10 minuti significa che ogni volta che la scalabilità automatica viene eseguita, esegue una query sulle metriche degli ultimi 10 minuti. Questa funzionalità consente alle metriche di stabilizzarsi ed evitare la reazione ai picchi temporanei. |
MetricTriggerThreshold |
Definisce il valore della metrica che attiva un evento di scalabilità. |
MetricTriggerOperator |
Specifica il funzionamento comparativo logico da usare durante la valutazione del valore della metrica. |
MetricTriggerDividePerInstance |
Se impostato su true divide la metrica del trigger in base al numero totale di istanze. Ad esempio, se il numero di messaggi è 300 e sono in esecuzione 5 istanze, il valore della metrica calcolata è 60 messaggi per istanza. Questa proprietà non è applicabile a tutte le metriche. |
ScaleActionDirection |
Specificare la scalabilità orizzontale o verticale. I valori validi sono Increase e Decrease . |
ScaleActionType |
Ridimensionare in base a un numero specifico di istanze, ridimensionare in base a un numero di istanze specifiche o scalare in base alla percentuale del numero di istanze corrente. I valori validi includono ChangeCount , ExactCount e PercentChangeCount . |
ScaleActionCooldown |
Quantità minima di tempo di attesa tra le operazioni di scalabilità. Ciò consente alle metriche di stabilizzarsi ed evitare il flapping. Ad esempio, se ScaleActionCooldown è 10 minuti e si è appena verificata un'operazione di ridimensionamento, la scalabilità automatica non tenterà di ridimensionare di nuovo per 10 minuti. |
Creare un profilo di scalabilità automatica predefinito e associare le regole
Dopo aver definito le regole di scalabilità, creare un profilo. Il profilo specifica i limiti predefiniti, superiori e inferiori del numero di istanze e i tempi di applicazione delle regole associate. Usare il cmdlet New-AzAutoscaleProfileObject
per creare un nuovo profilo di scalabilità automatica. Poiché si tratta di un profilo predefinito, non ha parametri di pianificazione. Il profilo predefinito è attivo a volte che nessun altro profilo è attivo
$defaultProfile=New-AzAutoscaleProfileObject `
-Name "default" `
-CapacityDefault 1 `
-CapacityMaximum 10 `
-CapacityMinimum 1 `
-Rule $rule1, $rule2
La tabella seguente descrive i parametri usati nel cmdlet New-AzAutoscaleProfileObject
.
Parametro | Descrizione |
---|---|
CapacityDefault |
Numero di istanze che sono se le metriche non sono disponibili per la valutazione. L'impostazione predefinita viene usata solo se il numero di istanze corrente è inferiore a quello predefinito. |
CapacityMaximum |
Numero massimo di istanze per la risorsa. Il numero massimo di istanze è ulteriormente limitato dal numero di core disponibili nella sottoscrizione. |
CapacityMinimum |
Numero minimo di istanze per la risorsa. |
FixedDateEnd |
Ora di fine per il profilo in formato ISO 8601. |
FixedDateStart |
Ora di inizio del profilo in formato ISO 8601. |
Rule |
Raccolta di regole che forniscono i trigger e i parametri per l'azione di ridimensionamento quando questo profilo è attivo. È possibile specificare un massimo di 10 regole separate da virgole. |
RecurrenceFrequency |
Frequenza con cui il profilo pianificato diventa effettivo. Questo valore deve essere week . |
ScheduleDay |
Raccolta di giorni in cui il profilo diventa effettivo quando si specifica una pianificazione ricorrente. I valori possibili sono da domenica a sabato. Per altre informazioni sulle pianificazioni ricorrenti, vedere Aggiungere un profilo ricorrente tramite l'interfaccia della riga di comando |
ScheduleHour |
Raccolta di ore in cui viene applicato il profilo. I valori supportati sono da 0 a 23. |
ScheduleMinute |
Raccolta di minuti in cui il profilo viene applicato. |
ScheduleTimeZone |
Fuso orario per le ore del profilo. |
Applicare le impostazioni di scalabilità automatica
Dopo aver applicato le regole e il profilo, applicare le impostazioni di scalabilità automatica usando New-AzAutoscaleSetting
. Per aggiornare l'impostazione di scalabilità automatica esistente, usare Update-AzAutoscaleSetting
New-AzAutoscaleSetting `
-Name vmss-autoscalesetting1 `
-ResourceGroupName $resourceGroupName `
-Location eastus `
-Profile $defaultProfile `
-Enabled `
-PropertiesName "vmss-autoscalesetting1" `
-TargetResourceUri "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/virtualMachineScaleSets/$vmssName"
Aggiungere notifiche alle impostazioni di scalabilità automatica
Aggiungere notifiche all'impostazione di vendita per attivare un webhook o inviare notifiche tramite posta elettronica quando si verifica un evento di scalabilità.
Per altre informazioni sulle notifiche webhook, vedere New-AzAutoscaleWebhookNotificationObject
Impostare un webhook usando il cmdlet seguente;
$webhook1=New-AzAutoscaleWebhookNotificationObject -Property @{} -ServiceUri "http://contoso.com/webhook1"
Configurare la notifica usando il webhook e configurare la notifica tramite posta elettronica usando il cmdlet New-AzAutoscaleNotificationObject
:
$notification1=New-AzAutoscaleNotificationObject `
-EmailCustomEmail "jason@contoso.com" `
-EmailSendToSubscriptionAdministrator $true `
-EmailSendToSubscriptionCoAdministrator $true `
-Webhook $webhook1
Aggiornare le impostazioni di scalabilità automatica per applicare la notifica
Update-AzAutoscaleSetting `
-Name vmss-autoscalesetting1 `
-ResourceGroupName $resourceGroupName `
-Profile $defaultProfile `
-Notification $notification1 `
-TargetResourceUri "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/virtualMachineScaleSets/$vmssName"
Esaminare le impostazioni di scalabilità automatica
Per esaminare le impostazioni di scalabilità automatica, caricare le impostazioni in una variabile usando Get-AzAutoscaleSetting
quindi restituire la variabile come indicato di seguito:
$autoscaleSetting=Get-AzAutoscaleSetting -ResourceGroupName $resourceGroupName -Name vmss-autoscalesetting1
$autoscaleSetting | Select-Object -Property *
Ottenere la cronologia della scalabilità automatica con AzAutoscaleHistory
Get-AzAutoscaleHistory -ResourceId /subscriptions/<subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/virtualMachineScaleSets/$vmssName
Profili pianificati e ricorrenti
Aggiungere un profilo pianificato per un evento speciale
Configurare i profili di scalabilità automatica per ridimensionare in modo diverso gli eventi specifici. Ad esempio, per un giorno in cui la domanda sarà superiore rispetto al solito, creare un profilo con limiti massimi e minimi di istanze aumentati.
Nell'esempio seguente vengono usate le stesse regole del profilo predefinito definito in precedenza, ma vengono impostati nuovi limiti di istanza per una data specifica. È anche possibile configurare regole diverse da usare con il nuovo profilo.
$highDemandDay=New-AzAutoscaleProfileObject `
-Name "High-demand-day" `
-CapacityDefault 7 `
-CapacityMaximum 30 `
-CapacityMinimum 5 `
-FixedDateEnd ([System.DateTime]::Parse("2023-12-31T14:00:00Z")) `
-FixedDateStart ([System.DateTime]::Parse("2023-12-31T13:00:00Z")) `
-FixedDateTimeZone "UTC" `
-Rule $rule1, $rule2
Update-AzAutoscaleSetting `
-Name vmss-autoscalesetting1 `
-ResourceGroupName $resourceGroupName `
-Profile $defaultProfile, $highDemandDay `
-Notification $notification1 `
-TargetResourceUri "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/virtualMachineScaleSets/$vmssName"
Aggiungere un profilo pianificato ricorrente
I profili ricorrenti consentono di pianificare un profilo di ridimensionamento che si ripete ogni settimana. Ad esempio, passare a una singola istanza del fine settimana dal venerdì sera al lunedì mattina.
Mentre i profili pianificati hanno una data di inizio e di fine, i profili ricorrenti non hanno un'ora di fine. Un profilo rimane attivo fino all'ora di inizio del profilo successivo. Pertanto, quando si crea un profilo ricorrente, è necessario creare un profilo predefinito ricorrente che inizia al termine del profilo ricorrente precedente.
Ad esempio, per configurare un profilo fine settimana che inizia venerdì sera e termina lunedì mattina, creare un profilo che inizia venerdì sera, quindi creare un profilo ricorrente con le impostazioni predefinite che iniziano il lunedì mattina.
Lo script seguente crea un profilo fine settimana e un profilo predefinito di addizione per terminare il profilo del fine settimana.
$fridayProfile=New-AzAutoscaleProfileObject `
-Name "Weekend" `
-CapacityDefault 1 `
-CapacityMaximum 1 `
-CapacityMinimum 1 `
-RecurrenceFrequency week `
-ScheduleDay "Friday" `
-ScheduleHour 22 `
-ScheduleMinute 00 `
-ScheduleTimeZone "Pacific Standard Time" `
-Rule $rule1, $rule2
$defaultRecurringProfile=New-AzAutoscaleProfileObject `
-Name "default recurring profile" `
-CapacityDefault 2 `
-CapacityMaximum 10 `
-CapacityMinimum 2 `
-RecurrenceFrequency week `
-ScheduleDay "Monday" `
-ScheduleHour 00 `
-ScheduleMinute 00 `
-ScheduleTimeZone "Pacific Standard Time" `
-Rule $rule1, $rule2
New-AzAutoscaleSetting `
-Location eastus `
-Name vmss-autoscalesetting1 `
-ResourceGroupName $resourceGroupName `
-Profile $defaultRecurringProfile, $fridayProfile `
-Notification $notification1 `
-TargetResourceUri "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/virtualMachineScaleSets/$vmssName"
Per altre informazioni sui profili pianificati, vedere Scalabilità automatica con più profili
Altri comandi di scalabilità automatica
Per un elenco completo dei cmdlet di PowerShell per la scalabilità automatica, vedere Browser del modulo di PowerShell
Pulire le risorse
Per pulire le risorse create in questa esercitazione, eliminare il gruppo di risorse creato. Il cmdlet seguente elimina il gruppo di risorse e tutte le relative risorse.
Remove-AzResourceGroup -Name $resourceGroupName