Configurer la mise à l’échelle automatique avec PowerShell

Les paramètres de mise à l’échelle automatique permettent de s’assurer qu’un nombre approprié de ressources s’exécute pour gérer la charge fluctuante de votre application. Vous pouvez configurer la mise à l’échelle automatique à l’aide des modèles du portail Azure, d’Azure CLI, de PowerShell ou ARM ou de Bicep.

Cet article vous montre comment configurer la mise à l’échelle automatique pour un groupe de machines virtuelles identiques avec PowerShell, en passant par les étapes suivantes :

  • Créez un groupe identique que vous pouvez automatiquement mettre à l’échelle
  • Créez des règles pour effectuer un scale-in et un scale-out
  • Créez un profil qui utilise vos règles
  • Appliquez les paramètres de mise à l’échelle automatique
  • Mettez à jour vos paramètres de mise à l’échelle automatique avec des notifications

Prérequis

Il vous faut un compte Azure avec un abonnement actif pour configurer la mise à l’échelle automatique à l’aide de PowerShell. Vous pouvez créer un compte gratuitement.

Configurer votre environnement

#Set the subscription Id, VMSS name, and resource group name
$subscriptionId = (Get-AzContext).Subscription.Id
$resourceGroupName="rg-powershell-autoscale"
$vmssName="vmss-001"

Crée un groupe de machines virtuelles identiques

Créez un groupe identique à l’aide des cmdlets suivantes. Définissez les variables $resourceGroupName et $vmssName pour convenir à votre environnement.

# 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"

Créez des paramètres de mise à l’échelle automatique

Suivez la séquence ci-dessous pour créer un paramètre de mise à l’échelle automatique à l’aide de PowerShell :

  1. Créez des règles à l’aide de New-AzAutoscaleScaleRuleObject
  2. Créez un profil à l’aide de New-AzAutoscaleProfileObject
  3. Créez les paramètres de mise à l’échelle automatique à l’aide de New-AzAutoscaleSetting
  4. Mettez à jour les paramètres à l’aide de Update-AzAutoscaleSetting

Création de règles

Créez des règles de scale-in et de scale-out, puis associez-les à un profil. Les règles sont créées à l’aide de New-AzAutoscaleScaleRuleObject.

Le script PowerShell suivant crée deux règles.

  • Un scale-out est effectué lorsque le pourcentage d’UC dépasse 70 %
  • Un scale-in est effectué lorsque le pourcentage d’UC est inférieur à 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))

Le tableau suivant décrit les paramètres utilisés dans la cmdlet New-AzAutoscaleScaleRuleObject.

Paramètre Description
MetricTriggerMetricName Définit la métrique de déclencheur de mise à l’échelle automatique
MetricTriggerMetricResourceUri Spécifie la ressource à laquelle appartient la métrique MetricTriggerMetricName. MetricTriggerMetricResourceUri peut être n’importe quelle ressource et pas seulement la ressource en cours de mise à l’échelle. Par exemple, vous pouvez mettre à l’échelle vos groupes de machines virtuelles identiques en fonction des métriques créées par un équilibreur de charge, une base de données ou le groupe identique lui-même. MetricTriggerMetricName doit exister pour le MetricTriggerMetricResourceUri spécifié.
MetricTriggerTimeGrain Fréquence d’échantillonnage de la métrique surveillée par la règle. MetricTriggerTimeGrain doit être l’une des valeurs prédéfinies pour la métrique spécifiée et doit être comprise entre 12 heures et 1 minute. Par exemple, MetricTriggerTimeGrain = PT1M"* signifie que les métriques sont échantillonnées chaque minute et agrégées à l’aide de la méthode d’agrégation spécifiée dans MetricTriggerStatistic.
MetricTriggerTimeAggregation Méthode d’agrégation au cours de la période timeGrain. Par exemple, statistic = "Average" et timeGrain = "PT1M" signifient que les métriques sont agrégées chaque minute en prenant la valeur moyenne.
MetricTriggerStatistic Méthode d’agrégation utilisée pour agréger les mesures échantillonnées. Par exemple, TimeAggregation = "Average" agrège les mesures échantillonnées en prenant la moyenne.
MetricTriggerTimeWindow Le laps de temps passé que le moteur de mise à l’échelle automatique examine pour agréger la métrique. Cette valeur doit être supérieure au délai de collecte des métriques, qui peut varier d'une ressource à l'autre. Elle doit être comprise entre 5 minutes et 12 heures. Par exemple, 10 minutes signifie qu’à chaque exécution d’une mise à l’échelle automatique, elle interroge les métriques sur les 10 dernières minutes. Cette fonctionnalité permet à vos métriques de se stabiliser et évite de réagir à des pics temporaires.
MetricTriggerThreshold Définit la valeur de la métrique qui déclenche un événement de mise à l’échelle.
MetricTriggerOperator Spécifie l’opérateur logique comparatif à utiliser pour évaluer la valeur de la métrique.
MetricTriggerDividePerInstance Divise la métrique de déclencheur par le nombre total d’instances lorsqu’il est défini sur true. Par exemple, s’il y a 300 messages et que 5 instances sont en cours d’exécution, la valeur de métrique calculée est de 60 messages par instance. Cette propriété ne s’applique pas à toutes les métriques.
ScaleActionDirection Spécifiez un scale-in ou un scale-out. Les valeurs valides sont Increase et Decrease.
ScaleActionType Mettez à l’échelle selon un nombre spécifique d’instances, mettez à l’échelle vers un nombre d’instances spécifique ou mettez à l’échelle selon le pourcentage du nombre d’instances actuel. Les valeurs valides sont ChangeCount, ExactCount et PercentChangeCount.
ScaleActionCooldown Durée minimale d’attente entre les opérations de mise à l’échelle. Cela permet aux métriques de se stabiliser et d’éviter les battements. Par exemple, si ScaleActionCooldown est de 10 minutes et qu’une opération de mise à l’échelle vient de se produire, la mise à l’échelle automatique ne retente pas la mise à l'échelle pendant 10 minutes.

Créer un profil de mise à l’échelle automatique par défaut et associer les règles

Une fois les règles de mise à l’échelle définies, créez un profil. Le profil spécifie les limites du nombre d’instances par défaut, supérieures et inférieures, ainsi que les heures auxquelles les règles associées peuvent être appliquées. Utilisez la cmdlet New-AzAutoscaleProfileObject pour créer un nouveau profil de mise à l’échelle automatique. Comme il s’agit d’un profil par défaut, il n’a aucun paramètre de planification. Le profil par défaut est actif à des moments où aucun autre profil n’est actif

$defaultProfile=New-AzAutoscaleProfileObject `
    -Name "default" `
    -CapacityDefault 1 `
    -CapacityMaximum 10 `
    -CapacityMinimum 1 `
    -Rule $rule1, $rule2

Le tableau suivant décrit les paramètres utilisés dans la cmdlet New-AzAutoscaleProfileObject.

Paramètre Description
CapacityDefault Le nombre d’instances existantes si des métriques ne sont pas disponibles pour l’évaluation. La valeur par défaut est utilisée uniquement si le nombre d'instances actives est inférieur à la valeur par défaut.
CapacityMaximum Le nombre maximal d’instances pour la ressource. Le nombre maximal d'instances est davantage limité par le nombre de cœurs disponibles dans l'abonnement.
CapacityMinimum Le nombre minimal d’instances pour la ressource.
FixedDateEnd L’heure de fin du profil au format ISO 8601 pour.
FixedDateStart L’heure de début du profil au format ISO 8601.
Rule Collection de règles qui fournissent les déclencheurs et les paramètres de l'action de mise à l'échelle lorsque ce profil est actif. Un maximum de 10 règles séparées par des virgules peut être spécifié.
RecurrenceFrequency Fréquence à laquelle le profil planifié prend effet. Cette valeur doit être week.
ScheduleDay Collection de jours pendant lesquels le profil prend effet lors de la spécification d’une planification récurrente. Les valeurs possibles sont dimanche à samedi. Pour plus d’informations sur les planifications récurrentes, consultez Ajouter un profil récurrent à l’aide de l’interface de ligne de commande (CLI, Common Language Infrastructure)
ScheduleHour Collection d’heures auxquelles le profil prend effet. Les valeurs prises en charge sont de 0 à 23.
ScheduleMinute Collection de minutes auxquelles le profil prend effet.
ScheduleTimeZone Fuseau horaire pour les heures du profil.

Appliquez les paramètres de mise à l’échelle automatique

Une fois les règles et le profil définis, appliquez les paramètres de mise à l’échelle automatique à l’aide de New-AzAutoscaleSetting. Utilisez Update-AzAutoscaleSetting pour mettre à jour le paramètre de mise à l’échelle automatique existant

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"

Ajoutez des notifications à vos paramètres de mise à l’échelle automatique

Ajoutez des notifications à votre paramètre de mise à l’échelle pour déclencher un webhook ou envoyer des notifications par e-mail lorsqu’un événement de mise à l’échelle se produit. Pour plus d’informations sur les notifications webhook, consultez New-AzAutoscaleWebhookNotificationObject

Définissez un webhook à l’aide de la cmdlet suivante :


  $webhook1=New-AzAutoscaleWebhookNotificationObject -Property @{} -ServiceUri "http://contoso.com/webhook1"

Configurez la notification à l’aide du webhook et configurez la notification par e-mail à l’aide de la cmdlet New-AzAutoscaleNotificationObject :


    $notification1=New-AzAutoscaleNotificationObject `
    -EmailCustomEmail "jason@contoso.com" `
    -EmailSendToSubscriptionAdministrator $true `
    -EmailSendToSubscriptionCoAdministrator $true `
    -Webhook $webhook1

Mettez à jour vos paramètres de mise à l’échelle automatique pour appliquer la notification


Update-AzAutoscaleSetting  `
    -Name vmss-autoscalesetting1 `
    -ResourceGroupName $resourceGroupName `
    -Profile $defaultProfile `
    -Notification $notification1 `
    -TargetResourceUri "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/virtualMachineScaleSets/$vmssName"  

Passez vos paramètres de mise à l’échelle automatique en revue

Pour passer en revue vos paramètres de mise à l’échelle automatique, chargez les paramètres dans une variable à l’aide de Get-AzAutoscaleSetting, puis sortez la variable comme suit :

    $autoscaleSetting=Get-AzAutoscaleSetting  -ResourceGroupName $resourceGroupName -Name vmss-autoscalesetting1 
    $autoscaleSetting | Select-Object -Property *

Obtenez votre historique de mise à l’échelle automatique avec AzAutoscaleHistory

Get-AzAutoscaleHistory -ResourceId  /subscriptions/<subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/virtualMachineScaleSets/$vmssName

Profils planifiés et récurrents

Ajouter un profil planifié pour un événement spécial

Configurez des profils de mise à l’échelle automatique pour qu’ils évoluent différemment selon des événements spécifiques. Par exemple, pour les jours où la demande est plus élevée que d’habitude, créez un profil avec des limites d’instances maximales et minimales élargies.

L’exemple suivant utilise les mêmes règles que le profil par défaut défini ci-dessus, mais établit de nouvelles limites d’instance pour une date spécifique. Vous pouvez également configurer des règles différentes à utiliser avec le nouveau profil.

$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"  

Ajouter un profil planifié récurrent

Les profils récurrents vous permettent de planifier un profil de mise à l’échelle qui se répète chaque semaine. Par exemple, effectuez une mise à l’échelle vers une seule instance le week-end du vendredi soir au lundi matin.

Bien que les profils planifiés aient une date de début et de fin, les profils récurrents n’ont pas d’heure de fin. Un profil reste actif jusqu’à l’heure de début du profil suivant. Ainsi, lorsque vous créez un profil récurrent, vous devez créer un profil récurrent par défaut qui commence lorsque vous souhaitez que le profil récurrent précédent se termine.

Par exemple, pour configurer un profil de week-end qui commence le vendredi soir et se termine le lundi matin, créez un profil qui commence le vendredi soir, puis créez un profil récurrent qui commence le lundi matin avec vos paramètres par défaut.

Le script suivant crée un profil de week-end et un profil par défaut supplémentaire pour mettre fin au profil de week-end.

$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"  

Pour plus d’informations sur les profils planifiés, consultez Mise à l’échelle automatique avec plusieurs profils

Autres commandes de mise à l’échelle automatique

Pour obtenir la liste complète des cmdlets PowerShell de mise à l’échelle automatique, consultez le navigateur de modules PowerShell

Nettoyer les ressources

Pour nettoyer les ressources que vous avez créées dans ce tutoriel, supprimez le groupe de ressources que vous avez créé. La cmdlet suivante supprime le groupe de ressources et toutes ses ressources.


Remove-AzResourceGroup -Name $resourceGroupName