Configurare la scalabilità automatica con PowerShell
Le impostazioni di scalabilità automatica permettono di eseguire la giusta quantità di risorse per gestire il carico variabile dell'applicazione. È possibile configurare la scalabilità automatica usando i modelli portale di Azure, interfaccia della riga di comando di Azure, PowerShell o ARM o Bicep.
Questo articolo illustra come configurare la scalabilità automatica per un set di scalabilità di macchine virtuali con PowerShell, seguendo questa procedura:
- Creare un set di scalabilità che è possibile ridimensionare automaticamente
- Creare regole per scalabilità orizzontale e scalabilità orizzontale
- Creare un profilo che usa 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.
Configurare l'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 e $vmssName
su suite dell'ambiente$resourceGroupName
.
# 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 impostazioni di scalabilità automatica
Per creare l'impostazione di scalabilità automatica con PowerShell, seguire la sequenza seguente:
- Creare 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
Creazione di regole
Creare una scalabilità orizzontale e ridimensionare le regole e quindi associarle a un profilo.
Le regole vengono create usando .New-AzAutoscaleScaleRuleObject
Lo script di PowerShell seguente crea due regole.
- Scalabilità orizzontale quando la CPU percentuale supera il 70%
- Ridimensionare in quando la CPU percentuale è minore del 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 New-AzAutoscaleScaleRuleObject
cmdlet.
Parametro | Descrizione |
---|---|
MetricTriggerMetricName |
Imposta la metrica del trigger di scalabilità automatica |
MetricTriggerMetricResourceUri |
Specifica la risorsa a cui appartiene la MetricTriggerMetricName metrica. MetricTriggerMetricResourceUri può essere qualsiasi risorsa e non solo la risorsa che viene ridimensionata. Ad esempio, è possibile ridimensionare il 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. Deve MetricTriggerMetricName esistere per l'oggetto specificato MetricTriggerMetricResourceUri . |
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 = "Media" 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 |
La quantità di tempo in cui il motore di scalabilità automatica torna a aggregare la metrica. Questo valore deve essere maggiore del ritardo nella raccolta di 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 viene eseguita la scalabilità automatica, esegue query sulle metriche per gli ultimi 10 minuti. Questa funzionalità consente alle metriche di stabilizzarsi ed evitare di reagire 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 per true dividere la metrica del trigger in base al numero totale di istanze. Ad esempio, se il conteggio dei messaggi è 300 e sono in esecuzione 5 istanze, il valore della metrica calcolata è 60 messaggi per istanza. Questa proprietà non è applicabile per tutte le metriche. |
ScaleActionDirection |
Specificare il ridimensionamento o l'uscita. I valori validi sono Increase e Decrease . |
ScaleActionType |
Ridimensionare in base a un numero specifico di istanze, ridimensionare in un numero di istanze specifico o ridimensionare in base alla percentuale del numero di istanze correnti. I valori validi includono ChangeCount , ExactCount e PercentChangeCount . |
ScaleActionCooldown |
Tempo minimo di attesa tra operazioni di scalabilità. Si tratta di consentire la stabilizzazione delle metriche ed evitare il flapping. Ad esempio, se ScaleActionCooldown è 10 minuti e si è appena verificata un'operazione di scalabilità, la scalabilità automatica non tenterà di ridimensionare nuovamente 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, superiore e inferiore del numero di istanze e i tempi di applicazione delle regole associate. Usare il New-AzAutoscaleProfileObject
cmdlet per creare un nuovo profilo di scalabilità automatica. Come 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 New-AzAutoscaleProfileObject
cmdlet.
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 del profilo nel 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 delimitate da virgole. |
RecurrenceFrequency |
La frequenza con cui il profilo pianificato ha effetto. Questo valore deve essere week . |
ScheduleDay |
Raccolta di giorni in cui il profilo ha effetto 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 usando l'interfaccia della riga di comando |
ScheduleHour |
Raccolta di ore in cui il profilo ha effetto. I valori supportati sono da 0 a 23. |
ScheduleMinute |
Raccolta di minuti in cui il profilo ha effetto. |
ScheduleTimeZone |
Fuso orario per le ore del profilo. |
Applicare le impostazioni di scalabilità automatica
Dopo aver terminata 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 il New-AzAutoscaleNotificationObject
cmdlet:
$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 usando 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 per eventi specifici. Ad esempio, per un giorno in cui la richiesta sarà superiore al solito, creare un profilo con limiti massimi e minimi delle istanze.
Nell'esempio seguente vengono utilizzate 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 ripetuto 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 il 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 aggiunta per terminare il profilo weekend.
$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 Il 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