Mengonfigurasi skala otomatis dengan PowerShell

Pengaturan Autoscale membantu memastikan bahwa Anda memiliki jumlah sumber daya yang tepat yang berjalan untuk menangani beban aplikasi Anda yang berfluktuasi. Anda dapat mengonfigurasi skala otomatis menggunakan templat portal Azure, Azure CLI, PowerShell, atau ARM atau Bicep.

Artikel ini memperlihatkan kepada Anda cara mengonfigurasi skala otomatis untuk Virtual Machine Scale Set dengan PowerShell, menggunakan langkah-langkah berikut:

  • Membuat set skala yang dapat Anda skalakan secara otomatis
  • Membuat aturan untuk menskalakan masuk dan meluaskan skala
  • Membuat profil yang menggunakan aturan Anda
  • Menerapkan pengaturan skala otomatis
  • Memperbarui pengaturan skala otomatis Anda dengan pemberitahuan

Prasyarat

Untuk mengonfigurasi skala otomatis menggunakan PowerShell, Anda memerlukan akun Azure dengan langganan aktif. Anda dapat membuat akun secara gratis.

Menyiapkan lingkungan Anda

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

Membuat Set Skala Komputer Virtual

Buat set skala menggunakan cmdlet berikut. Atur $resourceGroupName variabel dan $vmssName agar sesuai dengan lingkungan Anda.

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

Membuat pengaturan skala otomatis

Untuk membuat pengaturan skala otomatis menggunakan PowerShell, ikuti urutan di bawah ini:

  1. Membuat aturan menggunakan New-AzAutoscaleScaleRuleObject
  2. Membuat profil menggunakan New-AzAutoscaleProfileObject
  3. Membuat pengaturan skala otomatis menggunakan New-AzAutoscaleSetting
  4. Memperbarui pengaturan menggunakan Update-AzAutoscaleSetting

Membuat aturan

Buat aturan skala masuk dan peluasan skala lalu kaitkan dengan profil. Aturan dibuat menggunakan New-AzAutoscaleScaleRuleObject.

Skrip PowerShell berikut membuat dua aturan.

  • Peluasan skala ketika Persentase CPU melebihi 70%
  • Menskalakan ketika Persentase CPU kurang dari 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))

Tabel di bawah ini menjelaskan parameter yang digunakan dalam New-AzAutoscaleScaleRuleObject cmdlet .

Parameter Deskripsi
MetricTriggerMetricName Mengatur metrik pemicu skala otomatis
MetricTriggerMetricResourceUri Menentukan sumber daya tempat MetricTriggerMetricName metrik berada. MetricTriggerMetricResourceUri dapat menjadi sumber daya apa pun dan bukan hanya sumber daya yang sedang diskalakan. Misalnya, Anda dapat menskalakan Virtual Machine Scale Sets berdasarkan metrik yang dibuat oleh load balancer, database, atau set skala itu sendiri. MetricTriggerMetricName harus ada untuk yang ditentukanMetricTriggerMetricResourceUri.
MetricTriggerTimeGrain Frekuensi pengambilan sampel metrik yang dipantau aturan. MetricTriggerTimeGrain harus menjadi salah satu nilai yang telah ditentukan sebelumnya untuk metrik yang ditentukan dan harus antara 12 jam dan 1 menit. Misalnya, MetricTriggerTimeGrain = PT1M"* berarti bahwa metrik diambil sampelnya setiap 1 menit dan diagregasi menggunakan metode agregasi yang ditentukan dalam MetricTriggerStatistic.
MetricTriggerTimeAggregation Metode agregasi dalam periode timeGrain. Misalnya, statistik = "Rata-rata" dan timeGrain = "PT1M" berarti bahwa metrik dikumpulkan setiap 1 menit dengan mengambil rata-rata.
MetricTriggerStatistic Metode agregasi yang digunakan untuk mengagregasi metrik sampel. Misalnya, TimeAggregation = "Average" mengagregasi metrik sampel dengan mengambil rata-rata.
MetricTriggerTimeWindow Jumlah waktu yang dilihat mesin skala otomatis kembali untuk mengagregasi metrik. Nilai ini harus lebih besar dari penundaan pengumpulan metrik, yang bervariasi menurut sumber daya. Harus antara 5 menit dan 12 jam. Misalnya, 10 menit berarti bahwa setiap kali skala otomatis berjalan, ia meminta metrik selama 10 menit terakhir. Fitur ini memungkinkan metrik Anda untuk menstabilkan dan menghindari bereaksi terhadap lonjakan sementara.
MetricTriggerThreshold Menentukan nilai metrik yang memicu peristiwa skala.
MetricTriggerOperator Menentukan operasi komparatif logis untuk digunakan saat mengevaluasi nilai metrik.
MetricTriggerDividePerInstance Saat diatur untuk true membagi metrik pemicu dengan jumlah total instans. Misalnya, Jika jumlah pesan adalah 300 dan ada 5 instans yang berjalan, nilai metrik yang dihitung adalah 60 pesan per instans. Properti ini tidak berlaku untuk semua metrik.
ScaleActionDirection Tentukan penskalakan masuk atau keluar. Nilai yang valid adalah Increase dan Decrease.
ScaleActionType Menskalakan berdasarkan jumlah instans tertentu, menskalakan ke jumlah instans tertentu, atau menskalakan berdasarkan persentase jumlah instans saat ini. Nilai yang valid termasuk ChangeCount, ExactCount, dan PercentChangeCount.
ScaleActionCooldown Jumlah waktu minimum untuk menunggu di antara operasi skala. Hal ini untuk memungkinkan metrik stabil dan menghindari flapping. Misalnya, jika ScaleActionCooldown adalah 10 menit dan operasi skala baru saja terjadi, Skala otomatis tidak akan mencoba menskalakan lagi selama 10 menit.

Membuat profil skala otomatis default dan mengaitkan aturan

Setelah menentukan aturan skala, buat profil. Profil menentukan batas jumlah instans default, atas, dan bawah, dan waktu penerapan aturan terkait. New-AzAutoscaleProfileObject Gunakan cmdlet untuk membuat profil skala otomatis baru. Karena ini adalah profil default, profil tersebut tidak memiliki parameter jadwal apa pun. Profil default aktif kadang-kadang tidak ada profil lain yang aktif

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

Tabel di bawah ini menjelaskan parameter yang digunakan dalam New-AzAutoscaleProfileObject cmdlet .

Parameter Deskripsi
CapacityDefault Jumlah instans yang jika metrik tidak tersedia untuk dievaluasi. Default hanya digunakan jika jumlah instans saat ini lebih rendah dari default.
CapacityMaximum Jumlah maksimum instans untuk sumber daya. Jumlah maksimum instans dibatasi lebih lanjut oleh jumlah inti yang tersedia dalam langganan.
CapacityMinimum Jumlah minimum instans untuk sumber daya.
FixedDateEnd Waktu akhir untuk profil dalam format ISO 8601 untuk.
FixedDateStart Waktu mulai untuk profil dalam format ISO 8601.
Rule Kumpulan aturan yang menyediakan pemicu dan parameter untuk tindakan penskalaan saat profil ini aktif. Maksimal 10, aturan yang dipisahkan koma dapat ditentukan.
RecurrenceFrequency Seberapa sering profil terjadwal berlaku. Nilai ini harus week.
ScheduleDay Kumpulan hari yang diterapkan profil saat menentukan jadwal berulang. Nilai yang mungkin adalah Minggu hingga Sabtu. Untuk informasi selengkapnya tentang jadwal berulang, lihat Menambahkan profil berulang menggunakan CLI
ScheduleHour Kumpulan jam yang diterapkan profil. Nilai yang didukung adalah 0 hingga 23.
ScheduleMinute Kumpulan menit di mana profil berlaku.
ScheduleTimeZone Zona waktu untuk jam profil.

Menerapkan pengaturan skala otomatis

Setelah membuat aturan dan profil, terapkan pengaturan skala otomatis menggunakan New-AzAutoscaleSetting. Untuk memperbarui penggunaan pengaturan skala otomatis yang ada 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"

Menambahkan pemberitahuan ke pengaturan skala otomatis Anda

Tambahkan pemberitahuan ke pengaturan penjualan Anda untuk memicu webhook atau mengirim pemberitahuan email saat peristiwa skala terjadi. Untuk informasi selengkapnya tentang pemberitahuan webhook, lihat New-AzAutoscaleWebhookNotificationObject

Atur webhook menggunakan cmdlet berikut;


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

Konfigurasikan pemberitahuan menggunakan webhook dan siapkan pemberitahuan email menggunakan New-AzAutoscaleNotificationObject cmdlet :


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

Memperbarui pengaturan skala otomatis Anda untuk menerapkan pemberitahuan


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

Meninjau pengaturan skala otomatis Anda

Untuk meninjau pengaturan skala otomatis Anda, muat pengaturan ke dalam variabel menggunakan Get-AzAutoscaleSetting lalu keluarkan variabel sebagai berikut:

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

Mendapatkan riwayat skala otomatis Anda menggunakan AzAutoscaleHistory

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

Profil terjadwal dan berulang

Menambahkan profil terjadwal untuk acara khusus

Siapkan profil skala otomatis untuk menskalakan secara berbeda untuk peristiwa tertentu. Misalnya, untuk hari ketika permintaan akan lebih tinggi dari biasanya, buat profil dengan peningkatan batas instans maksimum dan minimum.

Contoh berikut menggunakan aturan yang sama dengan profil default yang ditentukan di atas, tetapi menetapkan batas instans baru untuk tanggal tertentu. Anda juga dapat mengonfigurasi aturan yang berbeda untuk digunakan dengan profil baru.

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

Menambahkan profil terjadwal berulang

Profil berulang memungkinkan Anda menjadwalkan profil penskalaan yang berulang setiap minggu. Misalnya, skalakan ke satu instans pada akhir pekan dari Jumat malam hingga Senin pagi.

Meskipun profil terjadwal memiliki tanggal mulai dan berakhir, profil berulang tidak memiliki waktu akhir. Profil tetap aktif hingga waktu mulai profil berikutnya. Oleh karena itu, saat membuat profil berulang, Anda harus membuat profil default berulang yang dimulai saat Anda ingin profil berulang sebelumnya selesai.

Misalnya, untuk mengonfigurasi profil akhir pekan yang dimulai pada Jumat malam dan berakhir pada Senin pagi, buat profil yang dimulai pada Jumat malam, lalu buat profil berulang dengan pengaturan default Anda yang dimulai pada Senin pagi.

Skrip berikut membuat profil akhir pekan dan profil default tambahan untuk mengakhiri profil akhir pekan.

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

Untuk informasi selengkapnya tentang profil terjadwal, lihat Skala otomatis dengan beberapa profil

Perintah skala otomatis lainnya

Untuk daftar lengkap cmdlet PowerShell untuk skala otomatis, lihat Browser Modul PowerShell

Membersihkan sumber daya

Untuk membersihkan sumber daya yang Anda buat dalam tutorial ini, hapus grup sumber daya yang Anda buat. Cmdlet berikut menghapus grup sumber daya dan semua sumber dayanya.


Remove-AzResourceGroup -Name $resourceGroupName