Configurar o dimensionamento automático com o PowerShell

As definições de dimensionamento automático ajudam a garantir que tem a quantidade certa de recursos em execução para lidar com a carga flutuante da sua aplicação. Pode configurar o dimensionamento automático com os modelos portal do Azure, CLI do Azure, PowerShell ou ARM ou Bicep.

Este artigo mostra-lhe como configurar o dimensionamento automático para um Conjunto de Dimensionamento de Máquinas Virtuais com o PowerShell, com os seguintes passos:

  • Criar um conjunto de dimensionamento que pode dimensionar automaticamente
  • Criar regras para aumentar verticalmente e aumentar horizontalmente
  • Criar um perfil que utilize as suas regras
  • Aplicar as definições de dimensionamento automático
  • Atualizar as definições de dimensionamento automático com notificações

Pré-requisitos

Para configurar o dimensionamento automático com o PowerShell, precisa de uma conta do Azure com uma subscrição ativa. Pode criar uma conta gratuitamente.

Configurar o ambiente

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

Criar um Conjunto de Dimensionamento de Máquinas Virtuais

Crie um conjunto de dimensionamento com os seguintes cmdlets. Defina as $resourceGroupName variáveis e $vmssName para suiter o seu 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"

Criar definições de dimensionamento automático

Para criar uma definição de dimensionamento automático com o PowerShell, siga a sequência abaixo:

  1. Criar regras com New-AzAutoscaleScaleRuleObject
  2. Criar um perfil com New-AzAutoscaleProfileObject
  3. Criar as definições de dimensionamento automático com New-AzAutoscaleSetting
  4. Atualizar as definições com Update-AzAutoscaleSetting

Criar regras

Crie regras de escalamento horizontal e de aumento horizontal e associá-las a um perfil. As regras são criadas com o New-AzAutoscaleScaleRuleObject.

O seguinte script do PowerShell cria duas regras.

  • Aumentar horizontalmente quando a Percentagem de CPU exceder os 70%
  • Dimensionar quando percentagem de CPU é inferior a 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))

A tabela abaixo descreve os parâmetros utilizados no New-AzAutoscaleScaleRuleObject cmdlet.

Parâmetro Description
MetricTriggerMetricName Define a métrica do acionador de dimensionamento automático
MetricTriggerMetricResourceUri Especifica o recurso ao qual a MetricTriggerMetricName métrica pertence. MetricTriggerMetricResourceUri pode ser qualquer recurso e não apenas o recurso que está a ser dimensionado. Por exemplo, pode dimensionar o seu Conjuntos de Dimensionamento de Máquinas Virtuais com base em métricas criadas por um balanceador de carga, base de dados ou o próprio conjunto de dimensionamento. O MetricTriggerMetricName tem de existir para o especificado MetricTriggerMetricResourceUri.
MetricTriggerTimeGrain A frequência de amostragem da métrica que a regra monitoriza. MetricTriggerTimeGrain tem de ser um dos valores predefinidos para a métrica especificada e tem de estar entre 12 horas e 1 minuto. Por exemplo, MetricTriggerTimeGrain = PT1M"* significa que as métricas são amostradas a cada 1 minuto e agregadas com o método de agregação especificado em MetricTriggerStatistic.
MetricTriggerTimeAggregation O método de agregação dentro do período timeGrain. Por exemplo, estatística = "Média" e timeGrain = "PT1M" significa que as métricas são agregadas a cada 1 minuto ao tirar a média.
MetricTriggerStatistic O método de agregação utilizado para agregar as métricas de exemplo. Por exemplo, TimeAggregation = "Average" agrega as métricas de exemplo ao obter a média.
MetricTriggerTimeWindow A quantidade de tempo que o motor de dimensionamento automático olha para trás para agregar a métrica. Este valor tem de ser maior do que o atraso na coleção de métricas, que varia consoante o recurso. Tem de estar entre 5 minutos e 12 horas. Por exemplo, 10 minutos significa que sempre que o dimensionamento automático é executado, consulta as métricas dos últimos 10 minutos. Esta funcionalidade permite que as métricas estabilizem e evite reagir a picos transitórios.
MetricTriggerThreshold Define o valor da métrica que aciona um evento de dimensionamento.
MetricTriggerOperator Especifica a operação comparativa lógica a utilizar ao avaliar o valor da métrica.
MetricTriggerDividePerInstance Quando definida para true dividir a métrica do acionador pelo número total de instâncias. Por exemplo, se a contagem de mensagens for 300 e existirem 5 instâncias em execução, o valor da métrica calculada é de 60 mensagens por instância. Esta propriedade não é aplicável a todas as métricas.
ScaleActionDirection Especifique o aumento ou redução horizontal. Os valores válidos são Increase e Decrease.
ScaleActionType Dimensione por um número específico de instâncias, dimensione para uma contagem de instâncias específica ou dimensione por percentagem da contagem de instâncias atual. Os valores válidos incluem ChangeCount, ExactCounte PercentChangeCount.
ScaleActionCooldown A quantidade mínima de tempo a aguardar entre operações de dimensionamento. Isto é para permitir que as métricas estabilizem e evite bater. Por exemplo, se ScaleActionCooldown for de 10 minutos e uma operação de dimensionamento tiver ocorrido, o Dimensionamento Automático não tentará dimensionar novamente durante 10 minutos.

Criar um perfil de dimensionamento automático predefinido e associar as regras

Depois de definir as regras de dimensionamento, crie um perfil. O perfil especifica os limites de contagem de instâncias predefinidos, superiores e inferiores e as horas em que as regras associadas podem ser aplicadas. Utilize o New-AzAutoscaleProfileObject cmdlet para criar um novo perfil de dimensionamento automático. Uma vez que se trata de um perfil predefinido, não tem parâmetros de agendamento. O perfil predefinido está ativo às vezes em que nenhum outro perfil está ativo

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

A tabela abaixo descreve os parâmetros utilizados no New-AzAutoscaleProfileObject cmdlet.

Parâmetro Description
CapacityDefault O número de instâncias que se encontram se as métricas não estiverem disponíveis para avaliação. A predefinição só é utilizada se a contagem de instâncias atual for inferior à predefinição.
CapacityMaximum O número máximo de instâncias do recurso. O número máximo de instâncias é ainda limitado pelo número de núcleos disponíveis na subscrição.
CapacityMinimum O número mínimo de instâncias do recurso.
FixedDateEnd A hora de fim do perfil no formato ISO 8601 para.
FixedDateStart A hora de início do perfil no formato ISO 8601.
Rule Uma coleção de regras que fornecem os acionadores e parâmetros para a ação de dimensionamento quando este perfil está ativo. Pode especificar um máximo de 10 regras separadas por vírgulas.
RecurrenceFrequency Com que frequência o perfil agendado entra em vigor. Este valor tem de ser week.
ScheduleDay Uma coleção de dias em que o perfil entra em vigor ao especificar uma agenda periódica. Os valores possíveis são de domingo a sábado. Para obter mais informações sobre agendamentos periódicos, veja Adicionar um perfil periódico com a CLI
ScheduleHour Uma coleção de horas em que o perfil entra em vigor. Os valores suportados são 0 a 23.
ScheduleMinute Uma coleção de minutos em que o perfil entra em vigor.
ScheduleTimeZone O fuso horário das horas do perfil.

Aplicar as definições de dimensionamento automático

Depois de fining as regras e o perfil, aplique as definições de dimensionamento automático com New-AzAutoscaleSetting. Para atualizar a utilização da definição de dimensionamento automático existente 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"

Adicionar notificações às definições de dimensionamento automático

Adicione notificações à definição de venda para acionar um webhook ou enviar notificações por e-mail quando ocorrer um evento de dimensionamento. Para obter mais informações sobre as notificações do webhook, consulte New-AzAutoscaleWebhookNotificationObject

Defina um webhook com o seguinte cmdlet;


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

Configure a notificação com o webhook e configure a notificação por e-mail com o New-AzAutoscaleNotificationObject cmdlet:


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

Atualizar as definições de dimensionamento automático para aplicar a notificação


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

Reveja as definições de dimensionamento automático

Para rever as definições de dimensionamento automático, carregue as definições para uma variável utilizando Get-AzAutoscaleSetting e, em seguida, produza a variável da seguinte forma:

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

Obter o histórico de dimensionamento automático com AzAutoscaleHistory

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

Perfis agendados e periódicos

Adicionar um perfil agendado para um evento especial

Configure perfis de dimensionamento automático para dimensionar de forma diferente para eventos específicos. Por exemplo, para um dia em que a procura seja superior ao habitual, crie um perfil com limites máximos e mínimos de instâncias aumentados.

O exemplo seguinte utiliza as mesmas regras que o perfil predefinido definido acima, mas define novos limites de instância para uma data específica. Também pode configurar regras diferentes para serem utilizadas com o novo perfil.

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

Adicionar um perfil agendado periódico

Os perfis periódicos permitem-lhe agendar um perfil de dimensionamento que se repete todas as semanas. Por exemplo, dimensione para uma única instância no fim de semana de sexta-feira à noite para segunda-feira de manhã.

Embora os perfis agendados tenham uma data de início e de fim, os perfis periódicos não têm uma hora de fim. Um perfil permanece ativo até à hora de início do perfil seguinte. Por conseguinte, quando cria um perfil periódico, tem de criar um perfil predefinido periódico que é iniciado quando pretende que o perfil periódico anterior seja concluído.

Por exemplo, para configurar um perfil de fim de semana que começa às sextas-feiras à noite e termina às segundas-feiras de manhã, crie um perfil que começa na sexta-feira à noite e, em seguida, crie um perfil periódico com as suas predefinições que começam na segunda-feira de manhã.

O script seguinte cria um perfil de fim de semana e um perfil predefinido de adição para terminar o perfil de fim de semana.

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

Para obter mais informações sobre perfis agendados, veja Dimensionamento automático com múltiplos perfis

Outros comandos de dimensionamento automático

Para obter uma lista completa dos cmdlets do PowerShell para dimensionamento automático, veja o Browser de Módulos do PowerShell

Limpar os recursos

Para limpar os recursos que criou neste tutorial, elimine o grupo de recursos que criou. O cmdlet seguinte elimina o grupo de recursos e todos os respetivos recursos.


Remove-AzResourceGroup -Name $resourceGroupName