Mengonfigurasi skala otomatis dengan Azure PowerShell

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

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:

  1. Buat aturan dengan menggunakan New-AzAutoscaleScaleRuleObject.
  2. Buat profil dengan menggunakan New-AzAutoscaleProfileObject.
  3. Buat pengaturan skala otomatis dengan menggunakan New-AzAutoscaleSetting.
  4. 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