Configurar o dimensionamento automático com o Azure PowerShell

O dimensionamento automático garante que você tenha a quantidade certa de recursos em execução para lidar com a carga flutuante do seu aplicativo. Pode configurar o autoscale usando o portal Azure, CLI do Azure, Azure PowerShell, ou templates ARM ou Bicep.

Este artigo mostra como configurar o dimensionamento automático para um Conjunto de Dimensionamento de Máquina Virtual com o PowerShell. As configurações usam as seguintes etapas:

  • Cria um conjunto de dimensionamento que pode ser dimensionado automaticamente.
  • Cria regras para reduzir e aumentar.
  • Cria um perfil que use as tuas regras.
  • Aplica as definições de autoescala.
  • Atualize as configurações de dimensionamento automático e notificações.

Pré-requisitos

Para configurar o dimensionamento automático usando o PowerShell, você precisa de uma conta do Azure com uma assinatura ativa. Você pode criar uma conta gratuitamente.

Configurar o ambiente

Note

Executa os exemplos na mesma sessão PowerShell com a subscrição pretendida selecionada.

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

Criar um Conjunto de Dimensionamento de Máquinas Virtuais

O exemplo seguinte do Azure PowerShell utiliza os cmdlets New-AzResourceGroup e New-AzVmss.

Note

Usa um grupo de recursos dedicado para este exemplo para poderes apagar os recursos quando terminares.

O exemplo cria um endereço IP público. Para acesso à gestão, use o Azure Bastion em vez de expor portas 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

Criar configurações de dimensionamento automático

Para criar a configuração de dimensionamento automático usando o PowerShell, siga a sequência abaixo:

  1. Crie regras usando New-AzAutoscaleScaleRuleObject.
  2. Crie um perfil usando New-AzAutoscaleProfileObject.
  3. Crie as definições de autoescala usando New-AzAutoscaleSetting.
  4. Atualize as definições usando Update-AzAutoscaleSetting.

Criar regras

Crie regras de redução horizontal e expansão horizontal, e depois associe-as a um perfil.

O exemplo seguinte do Azure PowerShell utiliza o New-AzAutoscaleScaleRuleObject cmdlet.

Note

Cria duas regras:

  • Aumente horizontalmente quando a percentagem de CPU exceder 70%.
  • Reduzir horizontalmente quando a percentagem de CPU for inferior a 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

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

Parâmetro Descrição
MetricTriggerMetricName Define a métrica de gatilho de escala automática
MetricTriggerMetricResourceUri Especifica o recurso ao qual a MetricTriggerMetricName métrica pertence. MetricTriggerMetricResourceUri pode ser qualquer recurso e não apenas o recurso que está sendo dimensionado. Por exemplo, você pode dimensionar seus Conjuntos de Escala de Máquina Virtual com base em métricas criadas por um balanceador de carga, banco de dados ou o próprio conjunto de escala. O MetricTriggerMetricName deve existir para o MetricTriggerMetricResourceUri especificado.
MetricTriggerTimeGrain A frequência de amostragem da métrica que a regra monitora. MetricTriggerTimeGrain deve ser um dos valores predefinidos para a métrica especificada e deve 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 usando 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, tomando a média.
MetricTriggerStatistic O método de agregação utilizado para agregar as métricas amostradas. Por exemplo, TimeAggregation = "Average" agrega as métricas amostradas tomando a média.
MetricTriggerTimeWindow O período de tempo que o mecanismo de dimensionamento automático considera retroativamente para agregar os valores da métrica. Esse valor deve ser maior do que o atraso na coleta métrica, que varia de acordo com o recurso. Deve ser entre 5 minutos e 12 horas. Por exemplo, 10 minutos significa que toda vez que o dimensionamento automático é executado, ele consulta métricas dos últimos 10 minutos. Esse recurso permite que suas métricas se estabilizem e evita reagir a picos transitórios.
MetricTriggerThreshold Define o valor da métrica que dispara um evento de escala.
MetricTriggerOperator Especifica a operação comparativa lógica a ser usada ao avaliar o valor métrico.
MetricTriggerDividePerInstance Quando definido para true, divide a métrica de acionamento pelo número total de instâncias. Por exemplo, se a contagem de mensagens for 300 e houver 5 instâncias em execução, o valor da métrica calculada será 60 mensagens por instância. Esta propriedade não é aplicável a todas as métricas.
ScaleActionDirection Especifique a expansão para dentro ou para fora. Os valores válidos são Increase e Decrease.
ScaleActionType Dimensionar por um número específico de instâncias, dimensionar para uma contagem de instâncias específicas ou dimensionar por porcentagem da contagem de instâncias atual. Os valores válidos incluem ChangeCount, ExactCount, e PercentChangeCount.
ScaleActionCooldown O período mínimo de tempo que tem de decorrer após uma operação de dimensionamento para que esta regra possa iniciar outra ação de dimensionamento. O Autoscale verifica o período de espera de cada regra de forma independente. O período de arrefecimento permite que as métricas estabilizem e evita oscilações.

Criar um perfil de dimensionamento automático padrão e associar as regras

Depois de definires as regras de escala, cria um perfil. O perfil especifica os limites de contagem de instâncias padrão, superior e inferior e as vezes em que as regras associadas podem ser aplicadas.

O exemplo seguinte do Azure PowerShell utiliza o New-AzAutoscaleProfileObject cmdlet.

Note

Como este perfil é um perfil padrão, não tem quaisquer parâmetros de agendamento. O perfil padrão está ativo em momentos em que não há outros perfis ativos.

# Define parameters for New-AzAutoscaleProfileObject
$newAzAutoscaleProfileObjectParams = @{
    Name            = "default"
    CapacityDefault = "1"
    CapacityMaximum = "10"
    CapacityMinimum = "1"
    Rule            = @($scaleOutRule, $scaleInRule)
}
$defaultProfile = New-AzAutoscaleProfileObject @newAzAutoscaleProfileObjectParams

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

Parâmetro Descrição
CapacityDefault O número de instâncias se as métricas não estiverem disponíveis para avaliação. O padrão só será usado se a contagem de instâncias atual for menor que o padrão.
CapacityMaximum O número máximo de instâncias para o recurso. O número máximo de instâncias está também limitado pelo número de núcleos disponíveis na subscrição.
CapacityMinimum O número mínimo de instâncias para o 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 gatilhos e parâmetros para a ação de dimensionamento quando esse perfil está ativo. É possível especificar um máximo de 10 regras separadas por vírgula.
RecurrenceFrequency Com que frequência o perfil programado é aplicado. Este valor deve ser week.
ScheduleDay Uma coleção de dias em que o perfil entra em vigor ao especificar uma agenda recorrente. Os valores possíveis são de domingo a sábado. Para mais informações sobre agendamentos recorrentes, consulte Perfis recorrentes usando PowerShell.
ScheduleHour Um conjunto de horas durante as quais o perfil tem efeito. Os valores suportados são de 0 a 23.
ScheduleMinute Um conjunto de minutos a partir dos quais o perfil entra em vigor.
ScheduleTimeZone O fuso horário para as horas do perfil.

Aplicar as definições de escala automática

Depois de definires as regras e o perfil, aplica as definições de escalamento automático. Para atualizar uma configuração de autoescala existente, use Update-AzAutoscaleSetting.

O exemplo seguinte do Azure PowerShell utiliza o New-AzAutoscaleSetting cmdlet.

# 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

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

Adicione notificações à sua configuração de autoscale para acionar um webhook ou enviar notificações por email quando ocorra um evento de escala.

O exemplo seguinte do Azure PowerShell utiliza o New-AzAutoscaleWebhookNotificationObject cmdlet.

# Set variables
$webhookUri = "<WebhookUri>"

# Create the webhook notification
$webhook = New-AzAutoscaleWebhookNotificationObject -Property @{} -ServiceUri $webhookUri

O exemplo seguinte do Azure PowerShell usa o New-AzAutoscaleNotificationObject cmdlet para configurar notificações de webhook e email.

Note

Usa um endpoint HTTPS para o webhook.

# Set variables
$notificationEmail = "<NotificationEmail>"

# Define parameters for New-AzAutoscaleNotificationObject
$newAzAutoscaleNotificationObjectParams = @{
    EmailCustomEmail                      = @($notificationEmail)
    EmailSendToSubscriptionAdministrator   = $true
    EmailSendToSubscriptionCoAdministrator = $true
    Webhook                               = @($webhook)
}
$notification = New-AzAutoscaleNotificationObject @newAzAutoscaleNotificationObjectParams

O seguinte exemplo do Azure PowerShell usa o Update-AzAutoscaleSetting cmdlet para aplicar a notificação.

# Define parameters for Update-AzAutoscaleSetting
$updateAzAutoscaleSettingParams = @{
    Name              = $autoscaleName
    ResourceGroupName = $resourceGroupName
    Notification      = @($notification)
}

# Update the autoscale notification
Update-AzAutoscaleSetting @updateAzAutoscaleSettingParams

Reveja as definições de escalabilidade automática

O exemplo seguinte do Azure PowerShell usa o Get-AzAutoscaleSetting cmdlet para recuperar a definição de autoscale.

# Define parameters for Get-AzAutoscaleSetting
$getAzAutoscaleSettingParams = @{
    ResourceGroupName = $resourceGroupName
    Name              = $autoscaleName
}
$autoscaleSetting = Get-AzAutoscaleSetting @getAzAutoscaleSettingParams
$autoscaleSetting | Select-Object -Property *

O exemplo seguinte do Azure PowerShell utiliza o Get-AzAutoscaleHistory cmdlet.

Note

Consulta o histórico da definição de autoscale, não o ID do recurso do conjunto de escala.

# 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

Perfis agendados e recorrentes

Note

Quando atualizar Profile, inclua todos os perfis que quer manter. Os exemplos seguintes acrescentam perfis à definição criada anteriormente neste artigo. Mantém quaisquer outros perfis ao adaptá-los para outra configuração de autoescala.

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 demanda será maior do que o normal, crie um perfil com limites máximos e mínimos de instância aumentados.

O exemplo seguinte do Azure PowerShell utiliza os cmdlets New-AzAutoscaleProfileObject e Update-AzAutoscaleSetting.

Note

O exemplo seguinte utiliza as mesmas regras do perfil padrão definido anteriormente, mas define novos limites de instância para uma data específica. Também podes configurar regras diferentes para usar com o novo perfil. Os valores de início e fim utilizam marcas temporais ISO 8601 em 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

Adicionar um perfil agendado recorrente

Os perfis recorrentes permitem agendar um perfil de dimensionamento que se repete a cada semana.

Embora os perfis agendados tenham uma data de início e de fim, os perfis recorrentes não têm uma hora de término. Um perfil permanece ativo até a hora de início do próximo perfil. Portanto, ao criar um perfil recorrente, você deve criar um perfil padrão recorrente que começa quando você deseja que o perfil recorrente anterior seja concluído.

O exemplo seguinte do Azure PowerShell utiliza os cmdlets New-AzAutoscaleProfileObject e Update-AzAutoscaleSetting.

Note

Por exemplo, reduza para uma única instância desde sexta-feira à noite até segunda-feira de manhã. Para configurar um perfil de fim de semana que comece às sextas-feiras à noite e termine às segundas-feiras de manhã, crie um perfil que comece na sexta-feira à noite e depois crie um perfil recorrente com as suas definições predefinidas que começa na segunda-feira de manhã.

Cria um perfil de fim de semana e um perfil predefinido recorrente para terminar o perfil de fim de semana, mantendo os perfis padrão e de data fixa dos passos anteriores.

# 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

Para mais informações sobre perfis agendados, consulte Autoscale com múltiplos perfis.

Outros comandos de dimensionamento automático

Para uma lista completa de cmdlets PowerShell para dimensionamento automático, consulte o Navegador de Módulos PowerShell.

Limpar recursos

Para limpar os recursos que criaste neste tutorial, elimina o grupo de recursos dedicado que criaste. O cmdlet a seguir exclui o grupo de recursos e todos os seus recursos.

O exemplo seguinte do Azure PowerShell utiliza o Remove-AzResourceGroup cmdlet.

# Delete the example resource group
Remove-AzResourceGroup -Name $resourceGroupName