Menyiapkan alat penskalaan menggunakan Azure Automation dan Azure Logic Apps untuk Azure Virtual Desktop
Dalam artikel ini, Anda akan mempelajari tentang alat penskalaan yang menggunakan buku pedoman Azure Automation dan Aplikasi Azure Logic untuk secara otomatis menskalakan mesin virtual host sesi di lingkungan Azure Virtual Desktop Anda. Untuk mempelajari selengkapnya tentang alat penskala, lihat Menskalakan host sesi menggunakan Azure Automation dan Azure Logic Apps.
Catatan
Solusi Autoscale asli Azure Virtual Desktop umumnya tersedia untuk kumpulan dan kumpulan host pribadi dan akan secara otomatis menskalakan masuk atau keluar VM host sesi berdasarkan jadwal penskalaan. Sebaiknya gunakan Autoscale untuk konfigurasi yang lebih mudah. Untuk informasi selengkapnya, lihat Paket penskalaan skala otomatis.
Anda tidak dapat menskalakan host sesi menggunakan Azure Automation dan Azure Logic Apps bersama-sama dengan autoscale pada kumpulan host yang sama. Anda harus menggunakan satu atau yang lain.
Prasyarat
Sebelum Anda memulai penyiapan alat penskalaan, pastikan hal berikut sudah siap:
- Kumpulan host Azure Virtual Desktop.
- VM kumpulan host sesi dikonfigurasi dan didaftarkan dengan layanan Azure Virtual Desktop.
- Pengguna dengan peran kontrol akses berbasis peran Kontributor (RBAC) yang ditetapkan pada langganan Azure untuk membuat sumber daya. Anda juga memerlukan peran Administrator aplikasi dan/atau Pemilik RBAC untuk membuat identitas terkelola.
- Ruang kerja Analitik Log (opsional).
Komputer yang Anda gunakan untuk menyebarkan alat tersebut harus memiliki:
- PowerShell 5.1 atau yang lebih baru
- Modul Azure Az PowerShell
Jika semua sudah siap, mari kita mulai.
Buat atau perbarui akun Azure Automation
Catatan
Jika sudah memiliki akun Azure Automation dengan runbook yang menjalankan versi skrip penskalaan yang lebih lama, Anda hanya perlu mengikuti petunjuk berikut untuk memastikan skrip tersebut diperbarui.
Pertama, Anda perlu akun Azure Automation untuk menjalankan runbook PowerShell. Proses yang dijelaskan bagian ini bersifat valid, meskipun Anda sudah memiliki akun Azure Automation yang ingin Anda gunakan untuk menyiapkan runbook PowerShell. Berikut cara menyiapkannya:
Buka PowerShell.
Jalankan cmdlet berikut untuk masuk ke akun Azure Anda.
Login-AzAccount
Catatan
Akun Anda harus memiliki hak kontributor pada langganan Azure, tempat Anda ingin menyebarkan alat penskalaan.
Jalankan cmdlet berikut untuk mengunduh skrip guna membuat akun Azure Automation:
New-Item -ItemType Directory -Path "C:\Temp" -Force Set-Location -Path "C:\Temp" $Uri = "https://raw.githubusercontent.com/Azure/RDS-Templates/master/wvd-templates/wvd-scaling-script/CreateOrUpdateAzAutoAccount.ps1" # Download the script Invoke-WebRequest -Uri $Uri -OutFile ".\CreateOrUpdateAzAutoAccount.ps1"
Jalankan cmdlet berikut untuk menjalankan skrip dan membuat akun Azure Automation. Anda dapat mengisi nilai untuk parameter atau memberi komentar untuk menggunakan default-nya.
$Params = @{ "AADTenantId" = "<Azure_Active_Directory_tenant_ID>" # Optional. If not specified, it will use the current Azure context "SubscriptionId" = "<Azure_subscription_ID>" # Optional. If not specified, it will use the current Azure context "UseARMAPI" = $true "ResourceGroupName" = "<Resource_group_name>" # Optional. Default: "WVDAutoScaleResourceGroup" "AutomationAccountName" = "<Automation_account_name>" # Optional. Default: "WVDAutoScaleAutomationAccount" "Location" = "<Azure_region_for_deployment>" "WorkspaceName" = "<Log_analytics_workspace_name>" # Optional. If specified, Log Analytics will be used to configure the custom log table that the runbook PowerShell script can send logs to } .\CreateOrUpdateAzAutoAccount.ps1 @Params
Catatan
Jika kebijakan Anda tidak mengizinkan Anda membuat sumber daya skrip penskalaan di wilayah tertentu, perbarui penetapan kebijakan dan tambahkan wilayah yang Anda inginkan ke daftar wilayah yang diizinkan.
Jika Anda belum pernah membuat akun otomatisasi sebelumnya, output cmdlet akan menyertakan URI webhook terenkripsi dalam variabel akun otomatisasi. Pastikan Anda mencatat URI karena akan digunakan sebagai parameter saat menyiapkan jadwal eksekusi untuk Azure Logic App. Jika Anda memperbarui akun otomatisasi yang ada, Anda dapat mengambil URI webhook menggunakan PowerShell untuk mengakses variabel.
Jika Anda menentukan parameter WorkSpaceName untuk Log Analytics, output cmdlet juga akan menyertakan ID Ruang Kerja Log Analytics dan Kunci Primernya. Catat ID Ruang Kerja dan Kunci Primer karena Anda harus menggunakannya lagi nanti dengan parameter saat Anda menyiapkan jadwal eksekusi Azure Logic App.
Setelah menyiapkan akun Azure Automation, masuk ke langganan Azure Anda dan periksa untuk memastikan akun Azure Automation Anda dan runbook terkait sudah muncul di grup sumber daya yang telah ditentukan, seperti yang ditunjukkan pada gambar berikut:
Untuk memeriksa apakah webhook Anda berada di tempat yang seharusnya, pilih nama runbook. Selanjutnya, buka bagian Sumber Daya runbook dan pilih Webhook.
Buat identitas terkelola
Sekarang setelah Anda memiliki akun Azure Automation, Anda juga harus menyiapkan identitas terkelola jika Anda belum melakukannya. Identitas terkelola akan membantu runbook Anda mengakses sumber daya terkait Microsoft Entra lainnya serta mengautentikasi proses otomatisasi penting.
Untuk menyiapkan identitas terkelola, ikuti petunjuk dalam Menggunakan identitas terkelola yang ditetapkan sistem untuk akun Azure Automation. Setelah Anda membuat identitas terkelola, tetapkan identitas tersebut dengan izin kontributor yang sesuai ke sumber daya Azure Virtual Desktop seperti kumpulan host, VM, dll. Setelah selesai, kembali ke artikel ini dan Buat Aplikasi Logika Azure dan jadwal eksekusi untuk menyelesaikan proses penyiapan awal.
Membuat Azure Logic App dan jadwal eksekusi
Terakhir, Anda harus membuat Azure Logic App dan menyiapkan jadwal eksekusi untuk alat penskalaan baru Anda. Pertama, unduh dan impor modul Azure Virtual Desktop PowerShell untuk digunakan dalam sesi PowerShell Anda, jika belum melakukannya.
Buka PowerShell.
Jalankan cmdlet berikut untuk masuk ke akun Azure Anda.
Login-AzAccount
Jalankan cmdlet berikut untuk mengunduh skrip untuk membuat akun Azure Logic App.
New-Item -ItemType Directory -Path "C:\Temp" -Force Set-Location -Path "C:\Temp" $Uri = "https://raw.githubusercontent.com/Azure/RDS-Templates/master/wvd-templates/wvd-scaling-script/CreateOrUpdateAzLogicApp.ps1" # Download the script Invoke-WebRequest -Uri $Uri -OutFile ".\CreateOrUpdateAzLogicApp.ps1"
Jalankan skrip PowerShell berikut untuk membuat Azure Logic App dan jadwal eksekusi untuk kumpulan host Anda
Catatan
Anda perlu menjalankan skrip ini untuk setiap kumpulan host yang ingin diskalakan otomatis, tetapi Anda hanya memerlukan satu akun Azure Automation.
$AADTenantId = (Get-AzContext).Tenant.Id $AzSubscription = Get-AzSubscription | Out-GridView -OutputMode:Single -Title "Select your Azure Subscription" Select-AzSubscription -Subscription $AzSubscription.Id $ResourceGroup = Get-AzResourceGroup | Out-GridView -OutputMode:Single -Title "Select the resource group for the new Azure Logic App" $WVDHostPool = Get-AzResource -ResourceType "Microsoft.DesktopVirtualization/hostpools" | Out-GridView -OutputMode:Single -Title "Select the host pool you'd like to scale" $LogAnalyticsWorkspaceId = Read-Host -Prompt "If you want to use Log Analytics, enter the Log Analytics Workspace ID returned by when you created the Azure Automation account, otherwise leave it blank" $LogAnalyticsPrimaryKey = Read-Host -Prompt "If you want to use Log Analytics, enter the Log Analytics Primary Key returned by when you created the Azure Automation account, otherwise leave it blank" $RecurrenceInterval = Read-Host -Prompt "Enter how often you'd like the job to run in minutes, e.g. '15'" $BeginPeakTime = Read-Host -Prompt "Enter the start time for peak hours in local time, e.g. 9:00" $EndPeakTime = Read-Host -Prompt "Enter the end time for peak hours in local time, e.g. 18:00" $TimeDifference = Read-Host -Prompt "Enter the time difference between local time and UTC in hours, e.g. +5:30" $SessionThresholdPerCPU = Read-Host -Prompt "Enter the maximum number of sessions per CPU that will be used as a threshold to determine when new session host VMs need to be started during peak hours" $MinimumNumberOfRDSH = Read-Host -Prompt "Enter the minimum number of session host VMs to keep running during off-peak hours" $MaintenanceTagName = Read-Host -Prompt "Enter the name of the Tag associated with VMs you don't want to be managed by this scaling tool" $LimitSecondsToForceLogOffUser = Read-Host -Prompt "Enter the number of seconds to wait before automatically signing out users. If set to 0, any session host VM that has user sessions, will be left untouched" $LogOffMessageTitle = Read-Host -Prompt "Enter the title of the message sent to the user before they are forced to sign out" $LogOffMessageBody = Read-Host -Prompt "Enter the body of the message sent to the user before they are forced to sign out" $WebhookURI = Read-Host -Prompt "Enter the webhook URI that has already been generated for this Azure Automation account. The URI is stored as encrypted in the above Automation Account variable. To retrieve the value, see https://learn.microsoft.com/azure/automation/shared-resources/variables?tabs=azure-powershell#powershell-cmdlets-to-access-variables" $Params = @{ "AADTenantId" = $AADTenantId # Optional. If not specified, it will use the current Azure context "SubscriptionID" = $AzSubscription.Id # Optional. If not specified, it will use the current Azure context "ResourceGroupName" = $ResourceGroup.ResourceGroupName # Optional. Default: "WVDAutoScaleResourceGroup" "Location" = $ResourceGroup.Location # Optional. Default: "West US2" "UseARMAPI" = $true "HostPoolName" = $WVDHostPool.Name "HostPoolResourceGroupName" = $WVDHostPool.ResourceGroupName # Optional. Default: same as ResourceGroupName param value "LogAnalyticsWorkspaceId" = $LogAnalyticsWorkspaceId # Optional. If not specified, script will not log to the Log Analytics "LogAnalyticsPrimaryKey" = $LogAnalyticsPrimaryKey # Optional. If not specified, script will not log to the Log Analytics "RecurrenceInterval" = $RecurrenceInterval # Optional. Default: 15 "BeginPeakTime" = $BeginPeakTime # Optional. Default: "09:00" "EndPeakTime" = $EndPeakTime # Optional. Default: "17:00" "TimeDifference" = $TimeDifference # Optional. Default: "-7:00" "SessionThresholdPerCPU" = $SessionThresholdPerCPU # Optional. Default: 1 "MinimumNumberOfRDSH" = $MinimumNumberOfRDSH # Optional. Default: 1 "MaintenanceTagName" = $MaintenanceTagName # Optional. "LimitSecondsToForceLogOffUser" = $LimitSecondsToForceLogOffUser # Optional. Default: 1 "LogOffMessageTitle" = $LogOffMessageTitle # Optional. Default: "Machine is about to shutdown." "LogOffMessageBody" = $LogOffMessageBody # Optional. Default: "Your session will be logged off. Please save and close everything." "WebhookURI" = $WebhookURI } .\CreateOrUpdateAzLogicApp.ps1 @Params
Setelah Anda menjalankan skrip, Azure Logic App akan muncul dalam grup sumber daya, seperti yang ditunjukkan dalam gambar berikut.
Untuk membuat perubahan pada jadwal eksekusi, seperti mengubah interval pengulangan atau zona waktu, buka penjadwal skala otomatis Azure Logic App lalu pilih Edit untuk membuka Azure Logic App Designer.
Kelola alat penskalaan Anda
Setelah membuat alat penskalaan, Anda dapat mengakses output-nya. Bagian ini menjelaskan beberapa fitur yang mungkin berguna bagi Anda.
Melihat status pekerjaan
Anda dapat menampilkan ringkasan status semua pekerjaan runbook atau menampilkan status yang lebih mendalam dari pekerjaan runbook tertentu di portal Azure.
Di sebelah kanan akun Azure Automation yang dipilih, di bagian "Statistik Pekerjaan", Anda dapat melihat daftar ringkasan semua pekerjaan runbook. Membuka halaman Kerja di sisi kiri jendela menunjukkan status pekerjaan saat ini, waktu mulai, dan waktu selesai.
Lihat log dan output alat penskalaan
Anda dapat melihat log operasi perluasan dan penyempitan skala dengan membuka runbook dan memilih pekerjaan.
Buka runbook di grup sumber daya yang menghosting akun Azure Automation, lalu pilih Gambaran Umum. Di halaman gambaran umum, pilih pekerjaan di Pekerjaan Terbaru untuk melihat output alat penskalaannya, seperti yang ditunjukkan pada gambar berikut.
Periksa nomor versi skrip runbook
Anda dapat memeriksa versi skrip runbook mana yang sedang digunakan dengan membuka file runbook di akun Azure Automation Anda dan memilih Lihat. Skrip untuk runbook akan muncul di sisi kanan layar. Dalam skrip, Anda akan melihat nomor versi dalam format v#.#.#
di bagian SYNOPSIS
. Anda dapat menemukan nomor versi terbaru di sini. Jika Anda tidak melihat nomor versi di skrip runbook, artinya Anda menjalankan versi skrip yang lebih lama dan harus segera memperbaruinya. Jika Anda perlu memperbarui skrip runbook Anda, ikuti petunjuk di Buat atau perbarui akun Azure Automation.
Melaporkan masalah
Saat melaporkan masalah, Anda harus memberikan informasi berikut untuk membantu kami memecahkan masalah:
Log lengkap dari tab Semua Log dalam pekerjaan yang menyebabkan masalah. Untuk mempelajari cara mendapatkan log, ikuti petunjuk di Lihat log dan output alat penskalaan. Jika ada informasi sensitif atau privat dalam log, Anda dapat menghapusnya sebelum mengirimkan masalah kepada kami.
Versi skrip runbook yang Anda gunakan. Untuk mengetahui cara mendapatkan nomor versi, lihat Periksa nomor versi skrip runbook
Nomor versi masing-masing modul PowerShell berikut diinstal di akun Azure Automation Anda. Untuk menemukan modul ini, buka akun Azure Automation, pilih Modul di bagian Sumber Daya Bersama di panel di sisi kiri jendela, lalu cari nama modul.
- Az.Accounts
- Az.Compute
- Az.Resources
- Az.Automation
- OMSIngestionAPI
- Az.DesktopVirtualization
Analitik Log
Jika ingin menggunakan Log Analytics, Anda dapat melihat semua data log dalam log kustom bernama WVDTenantScale_CL di Log Kustom di tampilan Log Anda dari Log Analytics Workspace. Kami telah mencantumkan beberapa sampel kueri yang mungkin berguna bagi Anda.
Untuk melihat semua log untuk kumpulan host, masukkan kueri berikut:
WVDTenantScale_CL | where hostpoolName_s == "<host_pool_name>" | project TimeStampUTC = TimeGenerated, TimeStampLocal = TimeStamp_s, HostPool = hostpoolName_s, LineNumAndMessage = logmessage_s, AADTenantId = TenantId
Untuk melihat total jumlah VM host sesi yang sedang berjalan dan sesi pengguna aktif di kumpulan host Anda, masukkan kueri berikut:
WVDTenantScale_CL | where logmessage_s contains "Number of running session hosts:" or logmessage_s contains "Number of user sessions:" or logmessage_s contains "Number of user sessions per Core:" | where hostpoolName_s == "<host_pool_name>" | project TimeStampUTC = TimeGenerated, TimeStampLocal = TimeStamp_s, HostPool = hostpoolName_s, LineNumAndMessage = logmessage_s, AADTenantId = TenantId
Untuk melihat status semua VM host sesi di kumpulan host ini, masukkan kueri berikut:
WVDTenantScale_CL | where logmessage_s contains "Session host:" | where hostpoolName_s == "<host_pool_name>" | project TimeStampUTC = TimeGenerated, TimeStampLocal = TimeStamp_s, HostPool = hostpoolName_s, LineNumAndMessage = logmessage_s, AADTenantId = TenantId
Untuk melihat kesalahan dan peringatan, masukkan kueri berikut:
WVDTenantScale_CL | where logmessage_s contains "ERROR:" or logmessage_s contains "WARN:" | project TimeStampUTC = TimeGenerated, TimeStampLocal = TimeStamp_s, HostPool = hostpoolName_s, LineNumAndMessage = logmessage_s, AADTenantId = TenantId
Pembatasan
Berikut adalah beberapa batasan dengan menskalakan VM host sesi dengan skrip penskalaan ini:
- Skrip penskalakan tidak mempertimbangkan perubahan waktu antara penghematan standar dan siang hari.