Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
La mise à l’échelle automatique permet de vérifier que la quantité appropriée de ressources s’exécute pour gérer la charge fluctuante de votre application. Vous pouvez configurer la mise à l’échelle automatique à l’aide du portail Azure, Azure CLI, Azure PowerShell, ou des modèles ARM ou Bicep.
Cet article vous montre comment configurer l’autoscale pour un ensemble d'échelles de machines virtuelles avec PowerShell. Les étapes de configuration sont les 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
Utilisez PowerShell dans Azure Cloud Shell.
Note
Exécutez les exemples dans la même session PowerShell avec l’abonnement que vous souhaitez utiliser sélectionné.
# Set variables
$resourceGroupName = "<ResourceGroupName>"
$vmssName = "<VirtualMachineScaleSetName>"
$autoscaleName = "<AutoscaleSettingName>"
$azureRegion = "<AzureRegion>"
$virtualNetworkName = "<VirtualNetworkName>"
$subnetName = "<SubnetName>"
$publicIpAddressName = "<PublicIpAddressName>"
$loadBalancerName = "<LoadBalancerName>"
# Get the subscription ID from the current Azure PowerShell context
$subscriptionId = (Get-AzContext).Subscription.Id
# Build virtual machine scale set resource ID
$vmssPath = "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName"
$vmssProvider = "Microsoft.Compute/virtualMachineScaleSets/$vmssName"
$vmssResourceId = "$vmssPath/providers/$vmssProvider"
Crée un groupe de machines virtuelles identiques
L’exemple Azure PowerShell suivant utilise les applets de commande New-AzVmss et New-AzResourceGroup.
Note
Utilisez un groupe de ressources dédié pour cet exemple afin de pouvoir supprimer ses ressources lorsque vous avez terminé.
L’exemple crée une adresse IP publique. Pour l’accès à la gestion, utilisez Azure Bastion au lieu d’exposer des ports RDP ou SSH à Internet.
# Create the resource group
New-AzResourceGroup -ResourceGroupName $resourceGroupName -Location $azureRegion
# Get credentials for the virtual machine scale set
$vmCredential = Get-Credential
# Define parameters for New-AzVmss
$newAzVmssParams = @{
ResourceGroupName = $resourceGroupName
Location = $azureRegion
VMScaleSetName = $vmssName
Credential = $vmCredential
VirtualNetworkName = $virtualNetworkName
SubnetName = $subnetName
PublicIpAddressName = $publicIpAddressName
LoadBalancerName = $loadBalancerName
OrchestrationMode = "Flexible"
}
# Create the virtual machine scale set
New-AzVmss @newAzVmssParams
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 :
- Créez des règles à l’aide de
New-AzAutoscaleScaleRuleObject. - Créez un profil à l’aide de
New-AzAutoscaleProfileObject. - Créez les paramètres de mise à l’échelle automatique à l’aide de
New-AzAutoscaleSetting. - 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.
L’exemple de Azure PowerShell suivant utilise l’applet New-AzAutoscaleScaleRuleObject de commande.
Note
Il crée deux règles :
- Effectuez un scale-out lorsque le pourcentage d’utilisation du processeur dépasse 70 %.
- Un scale-in est effectué lorsque le pourcentage d’UC est inférieur à 30 %.
# Define parameters for New-AzAutoscaleScaleRuleObject
$newAzAutoscaleScaleRuleObjectParams = @{
MetricTriggerMetricName = "Percentage CPU"
MetricTriggerMetricResourceUri = $vmssResourceId
MetricTriggerTimeGrain = New-TimeSpan -Minutes 1
MetricTriggerStatistic = "Average"
MetricTriggerTimeWindow = New-TimeSpan -Minutes 5
MetricTriggerTimeAggregation = "Average"
MetricTriggerOperator = "GreaterThan"
MetricTriggerThreshold = 70
MetricTriggerDividePerInstance = $false
ScaleActionDirection = "Increase"
ScaleActionType = "ChangeCount"
ScaleActionValue = "1"
ScaleActionCooldown = New-TimeSpan -Minutes 5
}
$scaleOutRule = New-AzAutoscaleScaleRuleObject @newAzAutoscaleScaleRuleObjectParams
# Define parameters for New-AzAutoscaleScaleRuleObject
$newAzAutoscaleScaleRuleObjectParams = @{
MetricTriggerMetricName = "Percentage CPU"
MetricTriggerMetricResourceUri = $vmssResourceId
MetricTriggerTimeGrain = New-TimeSpan -Minutes 1
MetricTriggerStatistic = "Average"
MetricTriggerTimeWindow = New-TimeSpan -Minutes 5
MetricTriggerTimeAggregation = "Average"
MetricTriggerOperator = "LessThan"
MetricTriggerThreshold = 30
MetricTriggerDividePerInstance = $false
ScaleActionDirection = "Decrease"
ScaleActionType = "ChangeCount"
ScaleActionValue = "1"
ScaleActionCooldown = New-TimeSpan -Minutes 5
}
$scaleInRule = New-AzAutoscaleScaleRuleObject @newAzAutoscaleScaleRuleObjectParams
Le tableau suivant décrit les paramètres utilisés dans la cmdlet New-AzAutoscaleScaleRuleObject.
| Paramètre | Descriptif |
|---|---|
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 le scale-in ou le 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 |
Le délai minimal qui doit s’écouler après une opération de mise à l’échelle avant que cette règle puisse déclencher une autre action de mise à l’échelle. La mise à l’échelle automatique vérifie le refroidissement de chaque règle indépendamment. Le refroidissement permet aux métriques de stabiliser et d’éviter le flapping. |
Créer un profil de mise à l’échelle automatique par défaut et associer les règles
Après avoir défini les règles d’échelle, 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.
L’exemple de Azure PowerShell suivant utilise l’applet New-AzAutoscaleProfileObject de commande.
Note
Comme ce profil est un profil par défaut, il n’a aucun paramètre de planification. Le profil par défaut est actif aux moments où aucun autre profil n’est actif.
# Define parameters for New-AzAutoscaleProfileObject
$newAzAutoscaleProfileObjectParams = @{
Name = "default"
CapacityDefault = "1"
CapacityMaximum = "10"
CapacityMinimum = "1"
Rule = @($scaleOutRule, $scaleInRule)
}
$defaultProfile = New-AzAutoscaleProfileObject @newAzAutoscaleProfileObjectParams
Le tableau suivant décrit les paramètres utilisés dans la cmdlet New-AzAutoscaleProfileObject.
| Paramètre | Descriptif |
|---|---|
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 |
Ensemble de jours pendant lesquels le profil prend effet pour spécifier une planification récurrente. Les valeurs possibles sont dimanche à samedi. Pour plus d’informations sur les planifications périodiques, consultez Profils de récurrence à l’aide de PowerShell. |
ScheduleHour |
Ensemble d'heures pendant lesquelles le profil prend effet. Les valeurs prises en charge sont de 0 à 23. |
ScheduleMinute |
Collection de minutes auxquelles le profil prend effet. |
ScheduleTimeZone |
Le fuseau horaire utilisé pour les heures du profil. |
Appliquez les paramètres de mise à l’échelle automatique
Après avoir défini les règles et le profil, appliquez les paramètres de mise à l’échelle automatique. Pour mettre à jour un paramètre de mise à l’échelle automatique existant, utilisez Update-AzAutoscaleSetting.
L’exemple de Azure PowerShell suivant utilise l’applet New-AzAutoscaleSetting de commande.
# Define parameters for New-AzAutoscaleSetting
$newAzAutoscaleSettingParams = @{
Name = $autoscaleName
ResourceGroupName = $resourceGroupName
Location = $azureRegion
Profile = @($defaultProfile)
Enabled = $true
PropertiesName = $autoscaleName
TargetResourceUri = $vmssResourceId
}
# Create the autoscale setting
New-AzAutoscaleSetting @newAzAutoscaleSettingParams
Ajoutez des notifications à vos paramètres de mise à l’échelle automatique
Ajoutez des notifications à votre paramètre de mise à l’échelle automatique pour déclencher un webhook ou envoyer des notifications par e-mail lorsqu’un événement de mise à l’échelle se produit.
L’exemple de Azure PowerShell suivant utilise l’applet New-AzAutoscaleWebhookNotificationObject de commande.
# Set variables
$webhookUri = "<WebhookUri>"
# Create the webhook notification
$webhook = New-AzAutoscaleWebhookNotificationObject -Property @{} -ServiceUri $webhookUri
L’exemple Azure PowerShell suivant utilise le cmdlet New-AzAutoscaleNotificationObject pour configurer le webhook et les notifications par e-mail.
Note
Utilisez un point de terminaison HTTPS pour le webhook.
# Set variables
$notificationEmail = "<NotificationEmail>"
# Define parameters for New-AzAutoscaleNotificationObject
$newAzAutoscaleNotificationObjectParams = @{
EmailCustomEmail = @($notificationEmail)
EmailSendToSubscriptionAdministrator = $true
EmailSendToSubscriptionCoAdministrator = $true
Webhook = @($webhook)
}
$notification = New-AzAutoscaleNotificationObject @newAzAutoscaleNotificationObjectParams
L’exemple Azure PowerShell suivant utilise le cmdlet Update-AzAutoscaleSetting pour appliquer la notification.
# Define parameters for Update-AzAutoscaleSetting
$updateAzAutoscaleSettingParams = @{
Name = $autoscaleName
ResourceGroupName = $resourceGroupName
Notification = @($notification)
}
# Update the autoscale notification
Update-AzAutoscaleSetting @updateAzAutoscaleSettingParams
Passez vos paramètres de mise à l’échelle automatique en revue
L’exemple Azure PowerShell suivant utilise le cmdlet Get-AzAutoscaleSetting pour récupérer la configuration de mise à l’échelle automatique.
# Define parameters for Get-AzAutoscaleSetting
$getAzAutoscaleSettingParams = @{
ResourceGroupName = $resourceGroupName
Name = $autoscaleName
}
$autoscaleSetting = Get-AzAutoscaleSetting @getAzAutoscaleSettingParams
$autoscaleSetting | Select-Object -Property *
L’exemple de Azure PowerShell suivant utilise l’applet Get-AzAutoscaleHistory de commande.
Note
Il interroge l’historique du paramètre de mise à l’échelle automatique, et non l’ID de ressource du groupe de machines virtuelles identiques.
# Build autoscale setting resource ID
$autoscalePath = "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName"
$autoscaleProvider = "Microsoft.Insights/autoscaleSettings/$autoscaleName"
$autoscaleResourceId = "$autoscalePath/providers/$autoscaleProvider"
# Retrieve the autoscale history
Get-AzAutoscaleHistory -ResourceId $autoscaleResourceId
Profils planifiés et récurrents
Note
Lorsque vous mettez à jour Profile, incluez chaque profil que vous souhaitez conserver. Les exemples suivants ajoutent des profils au paramètre créé précédemment dans cet article. Conservez tout autre profil lors de son adaptation à un autre paramètre de mise à l’échelle automatique.
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 Azure PowerShell suivant utilise les applets de commande Update-AzAutoscaleSetting et New-AzAutoscaleProfileObject.
Note
L’exemple suivant utilise les mêmes règles que le profil par défaut défini précédemment, mais définit de nouvelles limites d’instance pour une date spécifique. Vous pouvez également configurer différentes règles à utiliser avec le nouveau profil. Les valeurs de début et de fin utilisent des horodatages ISO 8601 au format UTC.
# Set variables
$startTime = "<StartTime>"
$endTime = "<EndTime>"
# Define parameters for New-AzAutoscaleProfileObject
$newAzAutoscaleProfileObjectParams = @{
Name = "High-demand-day"
CapacityDefault = "7"
CapacityMaximum = "30"
CapacityMinimum = "5"
FixedDateEnd = [datetime]::Parse($endTime)
FixedDateStart = [datetime]::Parse($startTime)
FixedDateTimeZone = "UTC"
Rule = @($scaleOutRule, $scaleInRule)
}
$highDemandDay = New-AzAutoscaleProfileObject @newAzAutoscaleProfileObjectParams
# Define parameters for Update-AzAutoscaleSetting
$updateAzAutoscaleSettingParams = @{
Name = $autoscaleName
ResourceGroupName = $resourceGroupName
Profile = @($defaultProfile, $highDemandDay)
}
# Update the autoscale profiles
Update-AzAutoscaleSetting @updateAzAutoscaleSettingParams
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.
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.
L’exemple Azure PowerShell suivant utilise les applets de commande Update-AzAutoscaleSetting et New-AzAutoscaleProfileObject.
Note
Par exemple, effectuez une mise à l’échelle vers une seule instance le week-end du vendredi soir au lundi matin. Pour configurer un profil de week-end qui démarre le vendredi soir et se termine le lundi matin, créez un profil qui démarre le vendredi soir, puis créez un profil périodique qui démarre le lundi matin avec vos paramètres par défaut.
Il crée un profil de week-end et un profil par défaut périodique pour mettre fin au profil week-end, tout en conservant les profils par défaut et à date fixe des étapes précédentes.
# Define parameters for New-AzAutoscaleProfileObject
$newAzAutoscaleProfileObjectParams = @{
Name = "Weekend"
CapacityDefault = "1"
CapacityMaximum = "1"
CapacityMinimum = "1"
RecurrenceFrequency = "Week"
ScheduleDay = @("Friday")
ScheduleHour = @(22)
ScheduleMinute = @(0)
ScheduleTimeZone = "Pacific Standard Time"
Rule = @($scaleOutRule, $scaleInRule)
}
$fridayProfile = New-AzAutoscaleProfileObject @newAzAutoscaleProfileObjectParams
# Define parameters for New-AzAutoscaleProfileObject
$newAzAutoscaleProfileObjectParams = @{
Name = "default recurring profile"
CapacityDefault = "2"
CapacityMaximum = "10"
CapacityMinimum = "2"
RecurrenceFrequency = "Week"
ScheduleDay = @("Monday")
ScheduleHour = @(0)
ScheduleMinute = @(0)
ScheduleTimeZone = "Pacific Standard Time"
Rule = @($scaleOutRule, $scaleInRule)
}
$defaultRecurringProfile = New-AzAutoscaleProfileObject @newAzAutoscaleProfileObjectParams
# Define parameters for Update-AzAutoscaleSetting
$updateAzAutoscaleSettingParams = @{
Name = $autoscaleName
ResourceGroupName = $resourceGroupName
Profile = @(
$defaultProfile
$highDemandDay
$defaultRecurringProfile
$fridayProfile
)
}
# Update the autoscale profiles
Update-AzAutoscaleSetting @updateAzAutoscaleSettingParams
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 applets de commande PowerShell pour la mise à l’échelle automatique, consultez PowerShell Module Browser.
Nettoyer les ressources
Pour nettoyer les ressources que vous avez créées dans ce tutoriel, supprimez le groupe de ressources dédié que vous avez créé. La cmdlet suivante supprime le groupe de ressources et toutes ses ressources.
L’exemple de Azure PowerShell suivant utilise l’applet Remove-AzResourceGroup de commande.
# Delete the example resource group
Remove-AzResourceGroup -Name $resourceGroupName