Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Skala otomatis memastikan bahwa Anda memiliki jumlah sumber daya yang tepat yang berjalan untuk menangani beban aplikasi Anda yang berfluktuasi. Anda dapat mengonfigurasi skala otomatis dengan menggunakan portal Azure, Azure CLI, Azure PowerShell, atau ARM atau templat Bicep.
Artikel ini memperlihatkan kepada Anda cara mengonfigurasi skala otomatis untuk Virtual Machine Scale Set dengan PowerShell. Konfigurasi menggunakan langkah-langkah berikut:
- Buat scale set yang dapat Anda skalakan secara otomatis.
- Buat aturan untuk memperkecil skala dan memperbesar skala.
- Buat profil yang menggunakan aturan Anda.
- Terapkan pengaturan skala otomatis.
- Perbarui 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.
Siapkan lingkungan Anda
Gunakan PowerShell di Azure Cloud Shell.
Nota
Jalankan contoh dalam sesi PowerShell yang sama dengan langganan tujuan sudah dipilih.
# 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"
Membuat Set Skala Komputer Virtual
Contoh Azure PowerShell berikut menggunakan New-AzResourceGroup dan New-AzVmss cmdlet.
Nota
Gunakan grup sumber daya khusus untuk contoh ini sehingga Anda dapat menghapus sumber dayanya setelah selesai.
Contoh membuat alamat IP publik. Untuk akses manajemen, gunakan Azure Bastion alih-alih mengekspos port RDP atau SSH ke 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
Membuat pengaturan skala otomatis
Untuk membuat pengaturan skala otomatis menggunakan PowerShell, ikuti urutan di bawah ini:
- Buat aturan dengan menggunakan
New-AzAutoscaleScaleRuleObject. - Buat profil dengan menggunakan
New-AzAutoscaleProfileObject. - Buat pengaturan skala otomatis dengan menggunakan
New-AzAutoscaleSetting. - Perbarui pengaturan dengan menggunakan
Update-AzAutoscaleSetting.
Membuat aturan
Buat aturan scale-in dan scale-out, lalu kaitkan dengan profil.
Contoh Azure PowerShell berikut menggunakan New-AzAutoscaleScaleRuleObject cmdlet.
Nota
Ini membuat dua aturan:
- Perluas skala ketika Persentase CPU melebihi 70%.
- Lakukan scale in ketika Persentase CPU kurang dari 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
Tabel di bawah ini menjelaskan parameter yang digunakan dalam New-AzAutoscaleScaleRuleObject cmdlet.
| Pengaturan | Deskripsi |
|---|---|
MetricTriggerMetricName |
Mengatur metrik pemicu penskalaan 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 Set berdasarkan metrik yang dibuat oleh load balancer, database, atau skala set itu sendiri.
MetricTriggerMetricName harus ada untuk MetricTriggerMetricResourceUri yang ditentukan. |
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" menggabungkan metrik sampel dengan mengambil rata-rata. |
MetricTriggerTimeWindow |
Jumlah waktu mesin skala otomatis melihat 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 penskalaan 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 yang akan digunakan saat mengevaluasi nilai metrik. |
MetricTriggerDividePerInstance |
Ketika diatur ke true, metrik pemicu dibagi 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 bagi semua metrik. |
ScaleActionDirection |
Tentukan skala masuk atau skala keluar. Nilai yang valid adalah Increase dan Decrease. |
ScaleActionType |
Skalakan menurut jumlah instans tertentu, skalakan ke jumlah instans tertentu, atau skalakan berdasarkan persentase jumlah instans saat ini. Nilai yang valid meliputi ChangeCount, ExactCount, dan PercentChangeCount. |
ScaleActionCooldown |
Jumlah waktu minimum setelah operasi penskalaan yang harus berlalu sebelum aturan ini memenuhi syarat untuk memulai tindakan penskalaan lainnya. Skala otomatis memeriksa cooldown setiap aturan secara independen. Masa tunggu memungkinkan metrik menjadi stabil dan mencegah flapping. |
Buat profil skala otomatis default dan hubungkan aturan
Setelah Anda menentukan aturan skala, buat profil. Profil menentukan batas jumlah instans default, atas, dan bawah, dan waktu aturan terkait dapat diterapkan.
Contoh Azure PowerShell berikut menggunakan New-AzAutoscaleProfileObject cmdlet.
Nota
Sebagai profil default, profil ini tidak memiliki parameter jadwal apa pun. Profil default aktif saat tidak ada profil lain yang aktif.
# Define parameters for New-AzAutoscaleProfileObject
$newAzAutoscaleProfileObjectParams = @{
Name = "default"
CapacityDefault = "1"
CapacityMaximum = "10"
CapacityMinimum = "1"
Rule = @($scaleOutRule, $scaleInRule)
}
$defaultProfile = New-AzAutoscaleProfileObject @newAzAutoscaleProfileObjectParams
Tabel di bawah ini menjelaskan parameter yang digunakan dalam New-AzAutoscaleProfileObject cmdlet.
| Pengaturan | Deskripsi |
|---|---|
CapacityDefault |
Jumlah instans jika metrik tidak tersedia untuk evaluasi. 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 berdasarkan jumlah inti yang tersedia dalam langganan. |
CapacityMinimum |
Jumlah minimum instans untuk sumber daya. |
FixedDateEnd |
Waktu akhir untuk profil dalam format ISO 8601. |
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 sepuluh aturan, yang dipisahkan dengan koma, dapat ditentukan. |
RecurrenceFrequency |
Seberapa sering profil terjadwal berlaku. Nilai ini harus .week |
ScheduleDay |
Kumpulan hari ketika profil diterapkan pada saat menentukan jadwal berulang. Nilai yang mungkin adalah Minggu hingga Sabtu. Untuk informasi selengkapnya tentang jadwal berulang, lihat Profil rekuren menggunakan PowerShell. |
ScheduleHour |
Jam-jam di mana profil berlaku. Nilai yang didukung adalah 0 hingga 23. |
ScheduleMinute |
Serangkaian menit saat profil mulai berlaku. |
ScheduleTimeZone |
Zona waktu untuk jam operasional profil pengguna. |
Menerapkan pengaturan skala otomatis
Setelah Anda menentukan aturan dan profil, terapkan pengaturan skala otomatis. Untuk memperbarui pengaturan skala otomatis yang ada, gunakan Update-AzAutoscaleSetting.
Contoh Azure PowerShell berikut menggunakan 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
Menambahkan pemberitahuan ke pengaturan skala otomatis Anda
Tambahkan pemberitahuan ke pengaturan skala otomatis Anda untuk memicu webhook atau mengirim pemberitahuan email saat peristiwa skala terjadi.
Contoh Azure PowerShell berikut menggunakan New-AzAutoscaleWebhookNotificationObject cmdlet.
# Set variables
$webhookUri = "<WebhookUri>"
# Create the webhook notification
$webhook = New-AzAutoscaleWebhookNotificationObject -Property @{} -ServiceUri $webhookUri
Contoh Azure PowerShell berikut menggunakan New-AzAutoscaleNotificationObject cmdlet untuk mengonfigurasi pemberitahuan webhook dan email.
Nota
Gunakan titik akhir HTTPS untuk webhook.
# Set variables
$notificationEmail = "<NotificationEmail>"
# Define parameters for New-AzAutoscaleNotificationObject
$newAzAutoscaleNotificationObjectParams = @{
EmailCustomEmail = @($notificationEmail)
EmailSendToSubscriptionAdministrator = $true
EmailSendToSubscriptionCoAdministrator = $true
Webhook = @($webhook)
}
$notification = New-AzAutoscaleNotificationObject @newAzAutoscaleNotificationObjectParams
Contoh Azure PowerShell berikut menggunakan Update-AzAutoscaleSetting cmdlet untuk menerapkan notifikasi.
# Define parameters for Update-AzAutoscaleSetting
$updateAzAutoscaleSettingParams = @{
Name = $autoscaleName
ResourceGroupName = $resourceGroupName
Notification = @($notification)
}
# Update the autoscale notification
Update-AzAutoscaleSetting @updateAzAutoscaleSettingParams
Meninjau pengaturan skala otomatis Anda
Contoh Azure PowerShell berikut menggunakan Get-AzAutoscaleSetting cmdlet untuk mengambil pengaturan skala otomatis.
# Define parameters for Get-AzAutoscaleSetting
$getAzAutoscaleSettingParams = @{
ResourceGroupName = $resourceGroupName
Name = $autoscaleName
}
$autoscaleSetting = Get-AzAutoscaleSetting @getAzAutoscaleSettingParams
$autoscaleSetting | Select-Object -Property *
Contoh Azure PowerShell berikut menggunakan Get-AzAutoscaleHistory cmdlet.
Nota
Ini mengkueri riwayat pengaturan skala otomatis tersebut, bukan ID sumber daya set skala.
# 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
Profil terjadwal dan berulang
Nota
Saat Anda memperbarui Profile, sertakan setiap profil yang ingin Anda simpan. Contoh berikut menambahkan profil ke pengaturan yang dibuat sebelumnya di artikel ini. Pertahankan profil lain saat mengadaptasinya ke pengaturan skala otomatis lain.
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 Azure PowerShell berikut menggunakan cmdlet New-AzAutoscaleProfileObject dan Update-AzAutoscaleSetting.
Nota
Contoh berikut menggunakan aturan yang sama dengan profil default yang ditentukan sebelumnya, tetapi menetapkan batas instans baru untuk tanggal tertentu. Anda juga dapat mengonfigurasi aturan yang berbeda untuk digunakan dengan profil baru. Nilai awal dan akhir menggunakan tanda waktu ISO 8601 di 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
Menambahkan profil terjadwal berulang
Profil berulang memungkinkan Anda menjadwalkan profil penskalaan yang berulang setiap minggu.
Meskipun profil terjadwal memiliki tanggal mulai dan berakhir, profil berulang tidak memiliki waktu akhir. Profil akan tetap aktif sampai 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.
Contoh Azure PowerShell berikut menggunakan cmdlet New-AzAutoscaleProfileObject dan Update-AzAutoscaleSetting.
Nota
Misalnya, skalakan ke satu instans pada akhir pekan dari Jumat malam hingga Senin pagi. 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.
Ini membuat profil akhir pekan dan profil default berulang untuk mengakhiri profil akhir pekan, sambil mempertahankan profil default dan profil tanggal tetap dari langkah-langkah sebelumnya.
# 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
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 khusus yang Anda buat. Cmdlet berikut menghapus grup sumber daya dan semua sumber dayanya.
Contoh Azure PowerShell berikut menggunakan Remove-AzResourceGroup cmdlet.
# Delete the example resource group
Remove-AzResourceGroup -Name $resourceGroupName