PowerShell ile otomatik ölçeklendirmeyi yapılandırma

Otomatik ölçeklendirme, uygulamanızın dalgalı yükünü işlemek için doğru miktarda kaynak çalıştırmanızı sağlar. Azure portalı, Azure CLI, PowerShell veya ARM veya Bicep şablonlarını kullanarak otomatik ölçeklendirmeyi yapılandırabilirsiniz.

Bu makalede, PowerShell ile bir Sanal Makine Ölçek Kümesi için otomatik ölçeklendirmeyi yapılandırma işlemi gösterilmektedir. Yapılandırmalar aşağıdaki adımları kullanır:

  • Otomatik ölçeklendirme yapabileceğiniz bir ölçek kümesi oluşturma
  • Ölçeği daraltmak ve ölçeği genişletmek için kurallar oluşturma
  • Kurallarınızı kullanan bir profil oluşturma
  • Otomatik ölçeklendirme ayarlarını uygulama
  • Otomatik ölçeklendirme ayarlarınızı bildirimlerle güncelleştirme

Önkoşullar

PowerShell kullanarak otomatik ölçeklendirmeyi yapılandırmak için etkin aboneliği olan bir Azure hesabına ihtiyacınız vardır. Ücretsiz bir hesap oluşturabilirsiniz.

Ortamınızı ayarlama

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

Sanal Makine Ölçek Kümesi oluşturma

Aşağıdaki cmdlet'leri kullanarak bir ölçek kümesi oluşturun. $resourceGroupName $vmssName ortamınızı paketleye ve değişkenlerini ayarlayın.

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

Otomatik ölçeklendirme ayarları oluşturma

PowerShell kullanarak otomatik ölçeklendirme ayarı oluşturmak için aşağıdaki sırayı izleyin:

  1. Kullanarak kural oluşturma New-AzAutoscaleScaleRuleObject
  2. kullanarak profil oluşturma New-AzAutoscaleProfileObject
  3. kullanarak otomatik ölçeklendirme ayarlarını oluşturma New-AzAutoscaleSetting
  4. Kullanarak ayarları güncelleştirme Update-AzAutoscaleSetting

Kural oluşturma

Ölçeği daraltma ve ölçeği genişletme kuralları oluşturup bunları bir profille ilişkilendirin. Kurallar kullanılarak New-AzAutoscaleScaleRuleObjectoluşturulur.

Aşağıdaki PowerShell betiği iki kural oluşturur.

  • CPU Yüzdesi %70'i aştığında ölçeği genişletme
  • CPU Yüzdesi %30'dan az olduğunda ölçeği daraltma

$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şağıdaki tabloda cmdlet'inde New-AzAutoscaleScaleRuleObject kullanılan parametreler açıklanmaktadır.

Parametre Açıklama
MetricTriggerMetricName Otomatik ölçeklendirme tetikleyicisi ölçümünü ayarlar
MetricTriggerMetricResourceUri Ölçümün ait olduğu MetricTriggerMetricName kaynağı belirtir. MetricTriggerMetricResourceUri yalnızca ölçeklendirilen kaynak değil herhangi bir kaynak olabilir. Örneğin, Sanal Makine Ölçek Kümeleri bir yük dengeleyici, veritabanı veya ölçek kümesinin kendisi tarafından oluşturulan ölçümlere göre ölçeklendikleyebilirsiniz. MetricTriggerMetricName belirtilen MetricTriggerMetricResourceUriiçin mevcut olmalıdır.
MetricTriggerTimeGrain Kuralın izlediği ölçümün örnekleme sıklığı. MetricTriggerTimeGrain belirtilen ölçüm için önceden tanımlanmış değerlerden biri olmalı ve 12 saat ile 1 dakika arasında olmalıdır. Örneğin PT1M"*, = MetricTriggerTimeGrain ölçümlerin her 1 dakikada bir örneklendiğini ve içinde MetricTriggerStatisticbelirtilen toplama yöntemi kullanılarak toplandığını gösterir.
MetricTriggerTimeAggregation timeGrain dönemi içinde toplama yöntemi. Örneğin, istatistik = "Ortalama" ve timeGrain = "PT1M", ölçümlerin ortalama alınarak 1 dakikada bir toplandığını gösterir.
MetricTriggerStatistic Örneklenen ölçümleri toplamak için kullanılan toplama yöntemi. Örneğin, TimeAggregation = "Average" örneklenen ölçümleri ortalamayı alarak toplar.
MetricTriggerTimeWindow Otomatik ölçeklendirme altyapısının ölçümü toplamak için geriye baktığı süre. Bu değer, kaynağa göre değişen ölçüm koleksiyonundaki gecikmeden büyük olmalıdır. 5 dakika ile 12 saat arasında olmalıdır. Örneğin, 10 dakika, otomatik ölçeklendirme her çalıştığında son 10 dakikadaki ölçümleri sorgular. Bu özellik ölçümlerinizin kararlı olmasını sağlar ve geçici ani artışlara tepki vermekten kaçınıyor.
MetricTriggerThreshold Ölçek olayını tetikleyen ölçümün değerini tanımlar.
MetricTriggerOperator Ölçüm değeri değerlendirilirken kullanılacak mantıksal karşılaştırmalı işletimi belirtir.
MetricTriggerDividePerInstance Tetikleyici ölçümünü toplam örnek sayısına bölecek şekilde ayarlandığında true . Örneğin, ileti sayısı 300 ise ve 5 örnek çalışıyorsa, hesaplanan ölçüm değeri örnek başına 60 iletidir. Bu özellik tüm ölçümler için geçerli değildir.
ScaleActionDirection Ölçeği daraltma veya genişletmeyi belirtin. Geçerli değerler ve DecreasedeğerleridirIncrease.
ScaleActionType Belirli sayıda örneğe göre ölçeklendirin, belirli bir örnek sayısına ölçeklendirin veya geçerli örnek sayısının yüzdesine göre ölçeklendirin. Geçerli değerler , ExactCountve PercentChangeCountdeğerlerini içerirChangeCount.
ScaleActionCooldown Ölçeklendirme işlemleri arasında beklenme süresi minimum. Bu, ölçümlerin dengelenmesini sağlamaktır ve dokunmayı önler. Örneğin, 10 dakika ise ve bir ölçeklendirme işlemi yeni gerçekleştiyse ScaleActionCooldown , Otomatik Ölçeklendirme 10 dakika boyunca yeniden ölçeklendirmeyi denemez.

Varsayılan otomatik ölçeklendirme profili oluşturma ve kuralları ilişkilendirme

Ölçek kurallarını tanımladıktan sonra bir profil oluşturun. Profil varsayılan, üst ve alt örnek sayısı sınırlarını ve ilişkili kuralların uygulanabileceği saatleri belirtir. New-AzAutoscaleProfileObject Yeni bir otomatik ölçeklendirme profili oluşturmak için cmdlet'ini kullanın. Bu varsayılan bir profil olduğundan zamanlama parametresi yoktur. Varsayılan profil, başka hiçbir profilin etkin olmadığı zamanlarda etkindir

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

Aşağıdaki tabloda cmdlet'inde New-AzAutoscaleProfileObject kullanılan parametreler açıklanmaktadır.

Parametre Açıklama
CapacityDefault Ölçümler değerlendirme için kullanılamıyorsa olan örnek sayısı. Varsayılan, yalnızca geçerli örnek sayısı varsayılandan düşükse kullanılır.
CapacityMaximum Kaynak için en fazla örnek sayısı. Maksimum örnek sayısı, abonelikte kullanılabilen çekirdek sayısıyla da sınırlıdır.
CapacityMinimum Kaynak için en az örnek sayısı.
FixedDateEnd IÇIN ISO 8601 biçiminde profilin bitiş zamanı.
FixedDateStart PROFILIn ISO 8601 biçimindeki başlangıç zamanı.
Rule Bu profil etkin olduğunda ölçeklendirme eylemi için tetikleyicileri ve parametreleri sağlayan kurallar koleksiyonu. En fazla 10 virgülle ayrılmış kural belirtilebilir.
RecurrenceFrequency Zamanlanan profilin ne sıklıkta etkin olduğu. Bu değer olmalıdır week.
ScheduleDay Yinelenen bir zamanlama belirtirken profilin etkin olduğu gün koleksiyonu. Olası değerler Pazar ile Cumartesi arasıdır. Yinelenen zamanlamalar hakkında daha fazla bilgi için bkz . CLI kullanarak yinelenen profil ekleme
ScheduleHour Profilin etkili olduğu saat koleksiyonu. Desteklenen değerler 0-23'lerdir.
ScheduleMinute Profilin etkin olduğu dakika koleksiyonu.
ScheduleTimeZone Profilin saatleri için saat dilimi.

Otomatik ölçeklendirme ayarlarını uygulama

Kuralları ve profili yüzgeçledikten sonra kullanarak otomatik ölçeklendirme ayarlarını New-AzAutoscaleSettinguygulayın. Mevcut otomatik ölçeklendirme ayarını güncelleştirmek için 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"

Otomatik ölçeklendirme ayarlarınıza bildirim ekleme

Bir web kancasını tetiklemek veya bir ölçek olayı gerçekleştiğinde e-posta bildirimleri göndermek için satış ayarınıza bildirimler ekleyin. Web kancası bildirimleri hakkında daha fazla bilgi için bkz. New-AzAutoscaleWebhookNotificationObject

Aşağıdaki cmdlet'i kullanarak bir web kancası ayarlayın;


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

Web kancasını kullanarak bildirimi yapılandırın ve cmdlet'ini kullanarak e-posta bildirimini New-AzAutoscaleNotificationObject ayarlayın:


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

Bildirimi uygulamak için otomatik ölçeklendirme ayarlarınızı güncelleştirme


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

Otomatik ölçeklendirme ayarlarınızı gözden geçirin

Otomatik ölçeklendirme ayarlarınızı gözden geçirmek için, kullanarak ayarları bir değişkene Get-AzAutoscaleSetting yükleyin ve ardından değişkenin çıkışını aşağıdaki gibi yapın:

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

Kullanarak otomatik ölçeklendirme geçmişinizi alma AzAutoscaleHistory

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

Zamanlanmış ve yinelenen profiller

Özel bir etkinlik için zamanlanmış profil ekleme

Belirli olaylar için farklı ölçeklendirilecek şekilde otomatik ölçeklendirme profilleri ayarlayın. Örneğin, talebin normalden yüksek olacağı bir gün için, artan maksimum ve en düşük örnek sınırlarına sahip bir profil oluşturun.

Aşağıdaki örnek, yukarıda tanımlanan varsayılan profille aynı kuralları kullanır, ancak belirli bir tarih için yeni örnek sınırları ayarlar. Yeni profille kullanılacak farklı kuralları da yapılandırabilirsiniz.

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

Yinelenen zamanlanmış profil ekleme

Yinelenen profiller, her hafta tekrarlanan bir ölçeklendirme profili zamanlamanıza olanak sağlar. Örneğin, cuma gecesinden Pazartesi sabahına kadar hafta sonunda tek bir örneğe ölçeklendirin.

Zamanlanmış profillerin başlangıç ve bitiş tarihi olsa da, yinelenen profillerin bitiş saati yoktur. Profil, bir sonraki profilin başlangıç zamanına kadar etkin kalır. Bu nedenle, yinelenen bir profil oluşturduğunuzda, önceki yinelenen profilin bitmesini istediğinizde başlayan bir yinelenen varsayılan profil oluşturmanız gerekir.

Örneğin, Cuma geceleri başlayan ve Pazartesi sabahları biten bir hafta sonu profili yapılandırmak için, Cuma gecesi başlayan bir profil oluşturun ve ardından Pazartesi sabahı başlayan varsayılan ayarlarınızla yinelenen profil oluşturun.

Aşağıdaki betik, hafta sonu profilini sonlandırmak için bir hafta sonu profili ve ek varsayılan profil oluşturur.

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

Zamanlanmış profiller hakkında daha fazla bilgi için bkz. Birden çok profille otomatik ölçeklendirme

Diğer otomatik ölçeklendirme komutları

Otomatik ölçeklendirme için PowerShell cmdlet'lerinin tam listesi için bkz . PowerShell Modül Tarayıcısı

Kaynakları temizleme

Bu öğreticide oluşturduğunuz kaynakları temizlemek için oluşturduğunuz kaynak grubunu silin. Aşağıdaki cmdlet kaynak grubunu ve tüm kaynaklarını siler.


Remove-AzResourceGroup -Name $resourceGroupName