Azure Automation を使用してセッション ホストをスケーリングするScale session hosts using Azure Automation

仮想マシン (VM) をスケーリングすると、Windows Virtual Desktop の総デプロイ コストを削減できます。You can reduce your total Windows Virtual Desktop deployment cost by scaling your virtual machines (VMs). これは、ピーク時以外の使用時間帯にセッション ホスト VM をシャットダウンして割り当て解除し、ピーク時間帯に再びオンにして再割り当てすることを意味します。This means shutting down and deallocating session host VMs during off-peak usage hours, then turning them back on and reallocating them during peak hours.

この記事では、Azure Automation アカウントで構築されたスケーリング ツールと、Windows Virtual Desktop 環境でセッション ホスト VM を自動的にスケーリングする Azure Logic Apps について説明します。In this article, you'll learn about the scaling tool built with the Azure Automation account and Azure Logic App that automatically scales session host VMs in your Windows Virtual Desktop environment. スケーリング ツールの使用方法を確認するには、「前提条件」に進んでください。To learn how to use the scaling tool, skip ahead to Prerequisites.

スケーリング ツールのしくみHow the scaling tool works

スケーリング ツールでは、セッション ホスト VM のコストを最適化したいお客様のために低コストの自動化オプションを提供しています。The scaling tool provides a low-cost automation option for customers who want to optimize their session host VM costs.

スケーリング ツールを使用すると、次の操作を行えます。You can use the scaling tool to:

  • ピーク時とピーク時以外の営業時間に基づいて、VM の起動と停止をスケジュールします。Schedule VMs to start and stop based on Peak and Off-Peak business hours.
  • CPU コアあたりのセッション数に基づいて VM をスケールアウトします。Scale out VMs based on number of sessions per CPU core.
  • ピーク時以外の時間帯に VM をスケールインして、最低限の数のセッション ホスト VM だけを実行状態のままにします。Scale in VMs during Off-Peak hours, leaving the minimum number of session host VMs running.

スケーリング ツールは、Azure Automation アカウント、PowerShell Runbook、Webhook、Azure Logic Apps を組み合わせて使用することで機能します。The scaling tool uses a combination of an Azure Automation account, a PowerShell runbook, a webhook, and the Azure Logic App to function. ツールが実行されると、Azure Logic Apps によって Webhook が呼び出されて Azure Automation Runbook が起動します。When the tool runs, Azure Logic App calls a webhook to start the Azure Automation runbook. その後、Runbook によってジョブが作成されます。The runbook then creates a job.

ピーク時の使用時間帯は、このジョブによって現在のセッション数と現在実行中のセッション ホストの VM 容量が、ホスト プールごとにチェックされます。During peak usage time, the job checks the current number of sessions and the VM capacity of the current running session host for each host pool. この情報を使用して、実行中のセッション ホスト VM が既存のセッションをサポートできるかどうかが、CreateOrUpdateAzLogicApp.ps1 ファイルに定義された SessionThresholdPerCPU パラメーターに基づいて計算されます。It uses this information to calculate if the running session host VMs can support existing sessions based on the SessionThresholdPerCPU parameter defined for the CreateOrUpdateAzLogicApp.ps1 file. セッション ホスト VM が既存のセッションをサポートできない場合は、このジョブによってホスト プール内の追加のセッション ホスト VM が起動されます。If the session host VMs can't support existing sessions, the job starts additional session host VMs in the host pool.

注意

SessionThresholdPerCPU では、VM 上のセッション数は制限されません。SessionThresholdPerCPU doesn't restrict the number of sessions on the VM. このパラメーターは、接続を負荷分散するために、どのタイミングで新しい VM を起動する必要があるかを決めるだけのものです。This parameter only determines when new VMs need to be started to load-balance the connections. セッションの数を制限するには、「Update-AzWvdHostPool」の手順に従って、MaxSessionLimit パラメーターを適切に構成する必要があります。To restrict the number of sessions, you need to follow the instructions Update-AzWvdHostPool to configure the MaxSessionLimit parameter accordingly.

ピーク時以外の使用時間中に、MinimumNumberOfRDSH パラメーターに基づいて、シャットダウンすべきセッション ホスト VM の数がジョブによって決定されます。During the off-peak usage time, the job determines how many session host VMs should be shut down based on the MinimumNumberOfRDSH parameter. LimitSecondsToForceLogOffUser パラメーターを 0 以外の正の値に設定した場合、ジョブによってセッション ホスト VM はドレイン モードに設定され、新しいセッションがホストに接続できないようになります。If you set the LimitSecondsToForceLogOffUser parameter to a non-zero positive value, the job will set the session host VMs to drain mode to prevent new sessions from connecting to the hosts. その後、ジョブによって、現在サインインしているすべてのユーザーは作業内容を保存するよう通知され、構成された時間待機した後、ユーザーは強制的にサインアウトされます。セッション ホスト VM 上のすべてのユーザー セッションがサインアウトされると、ジョブによって VM がシャットダウンされます。The job will then notify any currently signed in users to save their work, wait the configured amount of time, and then force the users to sign out. Once all user sessions on the session host VM have been signed out, the job will shut down the VM. VM がシャットダウンされると、ジョブによってセッション ホストのドレイン モードがリセットされます。After the VM shuts down, the job will reset its session host drain mode.

注意

セッション ホスト VM を手動でドレイン モードに設定した場合、セッション ホスト VM はジョブでは管理されません。If you manually set the session host VM to drain mode, the job won't manage the session host VM. セッション ホスト VM が実行中で、ドレイン モードに設定されている場合は、使用不可として扱われます。これにより、ジョブで負荷を処理するために追加の VM が起動されます。If the session host VM is running and set to drain mode, it will be treated as unavailable, which will make the job start additional VMs to handle the load. Azure VM を手動でドレイン モードに設定する場合は、事前にタグを付けるようお勧めします。We recommend you tag any Azure VMs before you manually set them to drain mode. 後で Azure Logic Apps スケジューラを作成するときに、MaintenanceTagName パラメーターを使用してタグに名前を付けることができます。You can name the tag with the MaintenanceTagName parameter when you create Azure Logic App Scheduler later. タグを使用すると、こうした VM をスケーリング ツールが管理する VM と区別することができます。Tags will help you distinguish these VMs from the ones the scaling tool manages. メンテナンス タグを設定すると、タグを削除するまで、スケーリング ツールでその VM に変更を加えることもできなくなります。Setting the maintenance tag also prevents the scaling tool from making changes to the VM until you remove the tag.

LimitSecondsToForceLogOffUser パラメーターを 0 に設定した場合は、指定されたグループ ポリシー内のセッション構成設定で、ユーザー セッションのサインオフを処理することがジョブによって許可されます。If you set the LimitSecondsToForceLogOffUser parameter to zero, the job allows the session configuration setting in specified group policies to handle signing off user sessions. これらのグループ ポリシーを確認するには、 [コンピューターの構成] > [ポリシー] > [管理用テンプレート] > [Windows コンポーネント] > [リモート デスクトップ サービス] > [リモート デスクトップ セッション ホスト] > [セッションの時間制限] にアクセスしてください。To see these group policies, go to Computer Configuration > Policies > Administrative Templates > Windows Components > Remote Desktop Services > Remote Desktop Session Host > Session Time Limits. セッション ホスト VM にアクティブなセッションが存在する場合は、ジョブによってセッション ホスト VM は実行状態のままとなります。If there are any active sessions on a session host VM, the job will leave the session host VM running. アクティブなセッションが存在しない場合は、ジョブによってセッション ホスト VM はシャットダウンされます。If there aren't any active sessions, the job will shut down the session host VM.

常に、ジョブではホスト プールの MaxSessionLimit を考慮に入れて、現在のセッション数が最大容量の 90% を超えているかの判断も行われます。During any time, the job also takes host pool's MaxSessionLimit into account to determine if the current number of sessions is more than 90% of the maximum capacity. 超えている場合、ジョブによって追加のセッション ホスト VM が起動されます。If it is, the job will start additional session host VMs.

ジョブは、設定された繰り返し間隔に基づいて定期的に実行されます。The job runs periodically based on a set recurrence interval. Windows Virtual Desktop 環境のサイズに基づいてこの間隔を変更できますが、VM の起動とシャットダウンには時間がかかることがあるため、延期期間を考慮してください。You can change this interval based on the size of your Windows Virtual Desktop environment, but remember that starting and shutting down VMs can take some time, so remember to account for the delay. 繰り返し間隔を 15 分に設定することをお勧めします。We recommend setting the recurrence interval to every 15 minutes.

ただし、このツールには次の制限事項もあります。However, the tool also has the following limitations:

  • このソリューションは、プールされたマルチセッションのセッション ホスト VM にのみ適用されます。This solution applies only to pooled multi-session session host VMs.
  • このソリューションでは任意のリージョンの VM が管理されますが、Azure Automation アカウントおよび Azure Logic Apps と同じサブスクリプションでのみ使用できます。This solution manages VMs in any region, but can only be used in the same subscription as your Azure Automation account and Azure Logic App.
  • Runbook 内のジョブの最長実行時間は、3 時間です。The maximum runtime of a job in the runbook is 3 hours. ホスト プール内の VM の起動または停止に時間がかかる場合、ジョブは失敗します。If starting or stopping the VMs in the host pool takes longer than that, the job will fail. 詳細については、「共有リソース」を参照してください。For more details, see Shared resources.

注意

スケーリング ツールにより、現在スケーリングされているホスト プールの負荷分散モードが制御されます。The scaling tool controls the load balancing mode of the host pool it's currently scaling. このツールでは、ピーク時とピーク時以外の両方に対して、幅優先の負荷分散モードが使用されます。The tool uses breadth-first load balancing mode for both peak and off-peak hours.

前提条件Prerequisites

スケーリング ツールの設定を開始する前に、次の準備ができていることを確認してください。Before you start setting up the scaling tool, make sure you have the following things ready:

ツールのデプロイに使用するマシンには、次のものが必要です。The machine you use to deploy the tool must have:

  • Windows PowerShell 5.1 以降Windows PowerShell 5.1 or later
  • Microsoft Az PowerShell モジュールThe Microsoft Az PowerShell module

すべての準備が整ったら、始めましょう。If you have everything ready, then let's get started.

Azure Automation アカウントを作成または更新するCreate or update an Azure Automation account

注意

以前のバージョンのスケーリング スクリプトを実行している Runbook を持つ Azure Automation アカウントが既にある場合は、以下の手順に従って更新されていることを確認するだけで済みます。If you already have an Azure Automation account with a runbook running an older version of the scaling script, all you need to do is follow the instructions below to make sure it's updated.

まず、PowerShell Runbook を実行するために、Azure Automation アカウントが必要です。First, you'll need an Azure Automation account to run the PowerShell runbook. このセクションで説明するプロセスは、PowerShell Runbook の設定に使用するつもりの既存の Azure Automation アカウントがある場合でも有効です。The process this section describes is valid even if you have an existing Azure Automation account that you want to use to set up the PowerShell runbook. 以下に、設定の方法を説明します。Here's how to set it up:

  1. Windows PowerShell を開きます。Open Windows PowerShell.

  2. 次のコマンドレットを実行して、Azure アカウントにサインインします。Run the following cmdlet to sign in to your Azure account.

    Login-AzAccount
    

    注意

    アカウントには、スケーリング ツールをデプロイする Azure サブスクリプションに対する共同作成者の権限が必要です。Your account must have contributor rights on the Azure subscription where you want to deploy the scaling tool.

  3. 次のコマンドレットを実行して、Azure Automation アカウントを作成するためのスクリプトをダウンロードします。Run the following cmdlet to download the script for creating the Azure Automation account:

    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"
    
  4. 次のコマンドレットを実行してスクリプトを実行し、Azure Automation アカウントを作成します。Run the following cmdlet to execute the script and create the Azure Automation account. パラメーターの値を入力するか、既定値を使用するようにコメントを付けることができます。You can either fill in values for the parameters or comment them to use their defaults.

    $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
    
  5. コマンドレットの出力には、Webhook の URI が含まれています。The cmdlet's output will include a webhook URI. Azure Logic Apps の実行スケジュールを設定するときにパラメーターとして使用するため、必ずこの URI を記録しておいてください。Make sure to keep a record of the URI because you'll use it as a parameter when you set up the execution schedule for the Azure Logic App.

  6. Log Analytics に WorkspaceName パラメーターを指定した場合、コマンドレットの出力には、Log Analytics ワークスペース ID とその主キーも含まれます。If you specified the parameter WorkspaceName for Log Analytics, the cmdlet's output will also include the Log Analytics Workspace ID and its Primary Key. 後で Azure Logic Apps の実行スケジュールを設定するときにパラメーターとしてまた使用する必要があるため、必ずこの URI を覚えておいてください。Make sure to remember URI because you'll need to use it again later as a parameter when you set up the execution schedule for the Azure Logic App.

  7. Azure Automation アカウントの設定が完了したら、Azure サブスクリプションにサインインし、次の図に示すように、指定のリソースグループに Azure Automation アカウントと関連する Runbook が表示されていることを確認します。After you've set up your Azure Automation account, sign in to your Azure subscription and check to make sure your Azure Automation account and the relevant runbook have appeared in your specified resource group, as shown in the following image:

    新しく作成した Azure Automation アカウントと Runbook を示す Azure の概要ページの画像。An image of the Azure overview page showing the newly created Azure Automation account and runbook.

    Webhook が必要な場所にあるかどうかを確認するには、Runbook の名前を選択します。To check if your webhook is where it should be, select the name of your runbook. 次に、Runbook の Resources セクションに移動して、 [Webhooks] を選択します。Next, go to your runbook's Resources section and select Webhooks.

Azure Automation の実行アカウントを作成するCreate an Azure Automation Run As account

これで Azure Automation アカウントの用意ができたので、Azure Automation の実行アカウントがまだない場合はこれも作成する必要があります。Now that you have an Azure Automation account, you'll also need to create an Azure Automation Run As account if you don't have one already. このアカウントを使用すると、ツールから Azure リソースにアクセスできるようになります。This account will let the tool access your Azure resources.

Azure Automation の実行アカウントにより、Azure コマンドレットを使用して Azure のリソースを管理するための認証が提供されます。An Azure Automation Run As account provides authentication for managing resources in Azure with Azure cmdlets. 実行アカウントを作成すると、新しいサービス プリンシパル ユーザーが Azure Active Directory に作成され、サブスクリプション レベルでこのサービス プリンシパル ユーザーに共同作成者ロールが割り当てられます。When you create a Run As account, it creates a new service principal user in Azure Active Directory and assigns the Contributor role to the service principal user at the subscription level. Azure 実行アカウントは、資格情報オブジェクトにユーザー名とパスワードを保存しなくても、証明書とサービス プリンシパル名を使用して安全に認証するための優れた方法です。An Azure Run As account is a great way to authenticate securely with certificates and a service principal name without needing to store a username and password in a credential object. 実行アカウントの認証の詳細については、「実行アカウントのアクセス許可の制限」を参照してください。To learn more about Run As account authentication, see Limit Run As account permissions.

サブスクリプション管理者ロールのメンバーであり、サブスクリプションの共同管理者であるユーザーは、誰でも実行アカウントを作成できます。Any user who's a member of the Subscription Admins role and coadministrator of the subscription can create a Run As account.

Azure Automation アカウントで実行アカウントを作成するには、次の操作を行います。To create a Run As account in your Azure Automation account:

  1. Azure Portal で [すべてのサービス] を選択します。In the Azure portal, select All services. リソースの一覧で、 [Automation アカウント] を入力して選択します。In the list of resources, enter and select Automation accounts.

  2. [Automation アカウント] ページで、自分の Azure Automation アカウントの名前を選択します。On the Automation accounts page, select the name of your Azure Automation account.

  3. ウィンドウの左側のペインで、 [アカウント設定] セクションの [実行アカウント] を選択します。In the pane on the left side of the window, select Run As accounts under the Account Settings section.

  4. [Azure 実行アカウント] を選択します。Select Azure Run As account. [Azure 実行アカウントを追加する] ペインが表示されたら、概要情報を確認した後で [作成] を選択して、アカウントの作成プロセスを開始します。When the Add Azure Run As account pane appears, review the overview information, and then select Create to start the account creation process.

  5. Azure で実行アカウントが作成されるまで数分待ちます。Wait a few minutes for Azure to create the Run As account. メニューの [通知] で作成の進行状況を追跡できます。You can track the creation progress in the menu under Notifications.

  6. 作成プロセスが完了すると、指定の Azure Automation アカウントに AzureRunAsConnection という名前の資産が作成されます。When the process finishes, it will create an asset named AzureRunAsConnection in the specified Azure Automation account. [Azure 実行アカウント] を選択します。Select Azure Run As account. この接続資産には、アプリケーション ID、テナント ID、サブスクリプション ID、証明書の拇印が格納されます。The connection asset holds the application ID, tenant ID, subscription ID, and certificate thumbprint. [接続] ページでも同じ情報を確認できます。You can also find the same information on the Connections page. このページに移動するには、ウィンドウの左側のペインで、 [共有リソース] セクションの [接続] を選択し、AzureRunAsConnection という接続資産をクリックします。To go to this page, in the pane on the left side of the window, select Connections under the Shared Resources section and click on the connection asset named AzureRunAsConnection.

Azure Logic Apps と実行スケジュールを作成するCreate the Azure Logic App and execution schedule

最後に、Azure Logic Apps を作成し、新しいスケーリング ツールの実行スケジュールを設定する必要があります。Finally, you'll need to create the Azure Logic App and set up an execution schedule for your new scaling tool. まず、PowerShell セッション内で使用する Desktop Virtualization PowerShell モジュールをダウンロードしてインポートします (まだ行っていない場合)。First, download and import the Desktop Virtualization PowerShell module to use in your PowerShell session if you haven't already.

  1. Windows PowerShell を開きます。Open Windows PowerShell.

  2. 次のコマンドレットを実行して、Azure アカウントにサインインします。Run the following cmdlet to sign in to your Azure account.

    Login-AzAccount
    
  3. 次のコマンドレットを実行して、Azure Logic Apps を作成するためのスクリプトをダウンロードします。Run the following cmdlet to download the script for creating the 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"
    
  4. 次の PowerShell スクリプトを実行して、ホスト プール用の Azure Logic Apps と実行スケジュールを作成します。Run the following PowerShell script to create the Azure Logic App and execution schedule for your host pool

    注意

    このスクリプトは、自動スケーリングするホスト プールごとに実行する必要がありますが、必要な Azure Automation アカウントは 1 つだけです。You'll need to run this script for each host pool you want to autoscale, but you need only one Azure Automation account.

    $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"
    
    $AutoAccount = Get-AzAutomationAccount | Out-GridView -OutputMode:Single -Title "Select the Azure Automation account"
    $AutoAccountConnection = Get-AzAutomationConnection -ResourceGroupName $AutoAccount.ResourceGroupName -AutomationAccountName $AutoAccount.AutomationAccountName | Out-GridView -OutputMode:Single -Title "Select the Azure RunAs connection asset"
    
    $WebhookURIAutoVar = Get-AzAutomationVariable -Name 'WebhookURIARMBased' -ResourceGroupName $AutoAccount.ResourceGroupName -AutomationAccountName $AutoAccount.AutomationAccountName
    
    $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
         "ConnectionAssetName"           = $AutoAccountConnection.Name              # Optional. Default: "AzureRunAsConnection"
         "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"                    = $WebhookURIAutoVar.Value
    }
    
    .\CreateOrUpdateAzLogicApp.ps1 @Params
    

    スクリプトを実行すると、次の図に示すように、Azure Logic Apps がリソース グループに表示されます。After you run the script, the Azure Logic App should appear in a resource group, as shown in the following image.

    Azure ロジック アプリの例を表す概要ページの画像。An image of the overview page for an example Azure Logic App.

    繰り返し間隔やタイム ゾーンを変更するなど、実行スケジュールに変更を加えるには、Azure Logic Apps の自動スケーリングのスケジューラにアクセスし、 [編集] を選択して Azure Logic Apps デザイナーに移動します。To make changes to the execution schedule, such as changing the recurrence interval or time zone, go to the Azure Logic App autoscale scheduler and select Edit to go to the Azure Logic App Designer.

    Azure ロジック アプリ デザイナーの画像。An image of the Azure Logic App Designer. ユーザーが繰り返し時間と Webhook ファイルを編集するための [繰り返し] および [Webhook] メニューが開いています。The Recurrence and webhook menus that let the user edit recurrence times and the webhook file are open.

スケーリング ツールを管理するManage your scaling tool

スケーリング ツールの作成が完了したので、その出力にアクセスできます。Now that you've created your scaling tool, you can access its output. ここでは、役に立つと思われるいくつかの機能について説明します。This section describes a few features you might find helpful.

ジョブの状態を見るView job status

すべての Runbook ジョブの状態の概要を表示したり、Azure portal で特定の Runbook ジョブの詳細な状態を表示したりできます。You can view a summarized status of all runbook jobs or view a more in-depth status of a specific runbook job in the Azure portal.

選択した Azure Automation アカウントの右側にある [ジョブの統計情報] で、すべての Runbook ジョブの概要の一覧を表示できます。On the right of your selected Azure Automation account, under "Job Statistics," you can view a list of summaries of all runbook jobs. ウィンドウの左側にある [ジョブ] ページを開くと、現在のジョブの状態、開始時刻、完了時刻が表示されます。Opening the Jobs page on the left side of the window shows current job statuses, start times, and completion times.

ジョブの状態ページのスクリーンショット。A screenshot of the job status page.

ログとスケーリング ツールの出力を見るView logs and scaling tool output

スケールアウト操作やスケールイン操作のログを表示するには、Runbook を開いて、ジョブを選択します。You can view the logs of scale-out and scale-in operations by opening your runbook and selecting the job.

Azure Automation アカウントをホストしているリソース グループの Runbook に移動して、 [概要] を選択します。Navigate to the runbook in your resource group hosting the Azure Automation account and select Overview. [概要] ページで、 [最近のジョブ] の下にあるジョブを選択すると、次の図に示すようなスケーリング ツールの出力が表示されます。On the overview page, select a job under Recent Jobs to view its scaling tool output, as shown in the following image.

スケーリング ツールの出力ウィンドウの画像。An image of the output window for the scaling tool.

Runbook スクリプトのバージョン番号を確認するCheck the runbook script version number

使用している Runbook スクリプトのバージョンを確認するには、Azure Automation アカウントで Runbook ファイルを開き、 [表示] を選択します。You can check which version of the runbook script you're using by opening the runbook file in your Azure Automation account and selecting View. Runbook のスクリプトが画面の右側に表示されます。A script for the runbook will appear on the right side of the screen. このスクリプトでは、SYNOPSIS セクションにバージョン番号が v#.#.# 形式で表示されます。In the script, you'll see the version number in the format v#.#.# under the SYNOPSIS section. 最新のバージョン番号はこちらで入手できます。You can find the latest version number here. Runbook スクリプトにバージョン番号が表示されない場合は、以前のバージョンのスクリプトが実行されているということなので、すぐに更新する必要があります。If you don't see a version number in your runbook script, that means you're running an earlier version of the script and you should update it right away. Runbook スクリプトを更新する必要がある場合は、「Azure Automation アカウントを作成または更新する」の手順に従ってください。If you need to update your runbook script, follow the instructions in Create or update an Azure Automation account.

問題の報告Reporting issues

問題を報告する際には、トラブルシューティングに役立つ次の情報を提供する必要があります。When you report an issue, you'll need to provide the following information to help us troubleshoot:

  • 問題の原因となったジョブの [すべてのログ] タブのすべてのログ。A complete log from the All Logs tab in the job that caused the issue. ログを取得する方法については、「ログとスケーリング ツールの出力を見る」の手順に従ってください。To learn how to get the log, follow the instructions in View logs and scaling tool output. 機密または非公開の情報がログに含まれている場合は、問題を Microsoft にお送りいただく前に削除することができます。If there's any sensitive or private information in the log, you can remove it before submitting the issue to us.

  • 使用している Runbook スクリプトのバージョン。The version of the runbook script you're using. バージョン番号を取得する方法については、「Runbook スクリプトのバージョン番号を確認する」を参照してください。To find out how to get the version number, see Check the runbook script version number

  • Azure Automation アカウントにインストールされている次の PowerShell モジュールのそれぞれのバージョン番号。The version number of each of the following PowerShell modules installed in your Azure Automation account. これらのモジュールを確認するには、Azure Automation アカウントを開き、ウィンドウの左側のペインの [共有リソース] セクションで [モジュール] を選択し、モジュールの名前を検索します。To find these modules, open Azure Automation account, select Modules under the Shared Resources section in the pane on the left side of the window, and then search for the module's name.

    • Az.AccountsAz.Accounts
    • Az.ComputeAz.Compute
    • Az.ResourcesAz.Resources
    • Az.AutomationAz.Automation
    • OMSIngestionAPIOMSIngestionAPI
    • Az.DesktopVirtualizationAz.DesktopVirtualization
  • 実行アカウントの有効期限。The expiration date for your Run As account. これを確認するには、Azure Automation アカウントを開き、ウィンドウの左側のペインの [アカウント設定] の下にある [実行アカウント] を選択します。To find this, open your Azure Automation account, then select Run As accounts under Account Settings in the pane on the left side of the window. 有効期限は [Azure 実行アカウント] の下で確認できます。The expiration date should be under Azure Run As account.

Log AnalyticsLog Analytics

Log Analytics を使用することにした場合、Log Analytics ワークスペースの [ログ] ビューの [カスタム ログ] の下にある WVDTenantScale_CL という名前のカスタム ログですべてのログ データを表示できます。If you decided to use Log Analytics, you can view all the log data in a custom log named WVDTenantScale_CL under Custom Logs in the Logs view of your Log Analytics Workspace. 役に立ちそうなサンプル クエリをいくつか示しました。We've listed some sample queries you might find helpful.

  • ホスト プールのすべてのログを表示するには、次のクエリを入力してくださいTo see all logs for a host pool, enter the following query

    WVDTenantScale_CL
    | where hostpoolName_s == "<host_pool_name>"
    | project TimeStampUTC = TimeGenerated, TimeStampLocal = TimeStamp_s, HostPool = hostpoolName_s, LineNumAndMessage = logmessage_s, AADTenantId = TenantId
    
  • ホスト プールで現在実行中のセッション ホスト VM とアクティブ ユーザー セッションの合計数を表示するには、次のクエリを入力してくださいTo view the total number of currently running session host VMs and active user sessions in your host pool, enter the following query

    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
    
  • ホスト プール内のすべてのセッション ホスト VM の状態を表示するには、次のクエリを入力してくださいTo view the status of all session host VMs in a host pool, enter the following query

    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
    
  • エラーと警告を表示するには、次のクエリを入力してくださいTo view any errors and warnings, enter the following query

    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
    

レポートに関する問題Report issues

スケーリング ツールの問題に関する報告は、現在、Microsoft サポートで処理されています。Issue reports for the scaling tool are currently being handled by Microsoft Support. 問題の報告を作成する場合は、「問題の報告」に記載されている手順に従ってください。When you make an issue report, make sure to follow the instructions in Reporting issues. ツールに関するフィードバックがある場合、または新機能をリクエストする場合は、RDS GitHub ページで、"4-WVD-scaling-tool" という名前の GitHub 問題を開きます。If you have feedback about the tool or want to request new features, open a GitHub issue labeled "4-WVD-scaling-tool" on the RDS GitHub page.