Citrix Virtual Apps and Desktopsサービス

マシンの動的なプロビジョニング

Autoscaleによるマシンの動的プロビジョニング

Autoscaleには、マシンを動的に作成および削除する機能が備えられています。PowerShellスクリプトを使用してこの機能を活用できます。このスクリプトで、現在の負荷条件に基づいて、デリバリーグループ内のマシンの数を動的にスケールアップまたはスケールダウンできます。

このスクリプトには、次の利点(およびその他)があります:

  • ストレージコストの削減。コンピューティングコストを削減させるAutoscaleとは異なり、スクリプトではマシンをプロビジョニングするためによりコスト効率の高いソリューションを実現します。

  • 負荷の変化の効率的的な処理。このスクリプトで、現在のデリバリーグループの負荷に基づいてマシンの数を自動的にスケールアップまたはスケールダウンすることにより、負荷の変化を処理できます。

スクリプトのダウンロード

PowerShellスクリプトは次の場所にあります。 https://github.com/citrix/Powershell-Scripts/tree/master/XAXD/AutoscaleMcs

スクリプトの機能の仕方

重要:

  • 1つのマシンカタログを複数のデリバリーグループに指定して、スクリプトで管理することはできません。つまり、複数のデリバリーグループが同じマシンカタログを共有している場合、これらのデリバリーグループのいずれでもスクリプトは機能しません。
  • 同じデリバリーグループのスクリプトを複数の場所から同時に実行することはできません。

スクリプトはデリバリーグループレベルで機能します。負荷を(負荷インデックス基準で)測定し、マシンを作成するか削除するかを決定します。

このスクリプトによって作成されたマシンには一意のタグが付けられるので(ScriptTagパラメーターを使用)、後で識別できます。マシンの作成または削除は、以下に基づいて行われます:

  • デリバリーグループの最大負荷率。Autoscaleで余分な負荷に対処するためにマシンを作成する最大レベルを指定します。このしきい値を超えると、マシンがバッチで作成され、現在の負荷はしきい値以下にされます。

  • デリバリーグループの最小負荷率。このスクリプトで作成され、アクティブなセッションのないマシンを削除する最小レベルを指定します。このしきい値を超えると、このスクリプトで作成され、アクティブなセッションのないマシンが削除されます。

このスクリプトはデリバリーグループ全体を監視し、トリガー条件が満たされたときにマシンを作成または削除することを目的としています。これはそれぞれの実行ごとに行われます。つまり、スクリプトが意図したとおりに機能するように、定期的にスクリプトを実行する必要があります。5分以上の間隔でスクリプトを実行することをお勧めします。これにより、全体的な応答性が向上します。

スクリプトは、以下のパラメーターに依存して機能します:

パラメーター 種類 デフォルト値 説明
DeliveryGroupName 文字列 現在の負荷を判定するために監視するデリバリーグループの名前。名前をセミコロンで区切ったリストを作成できます。例:Invoke-AutoscaleMachineCreation.ps1 -DeliveryGroupName ‘dg1;dg2;dg3’ -XdProfileName profile
XdProfileName 文字列 リモートサーバーの認証に使用するプロファイルの名前。このパラメーターを使用したリモートサーバーの認証の詳細については、「認証API」を参照してください。
HighWatermark 整数 80 Autoscaleで余分な負荷に対処するためにマシンを作成する(負荷インデックス基準での)最大負荷率。
LowWatermark 整数 15 このスクリプトで作成され、アクティブなセッションのないマシンを削除する(負荷インデックス基準での)最小負荷率。
MachineCatalogName 文字列 マシンが作成されるマシンカタログの名前。
MaximumCreatedMachines 整数 -1 指定されたデリバリーグループで作成できるマシンの最大数。値が0以下の場合、スクリプトはこのパラメーターを処理しません。
ScriptTag 文字列 AutoscaledScripted スクリプトで作成されたマシンに適用されるタグ。
EventLogSource 文字列 Windowsイベントビューアーに表示されるソース名。

注:

「X」は、そのパラメーターにデフォルト値が指定されていないことを示します。

デフォルトでは、スクリプトを初めて実行するときには(ScriptTagパラメーター以外の)すべてのパラメーターが必要です。それ以降の実行では、 DeliveryGroupNameおよびXdProfileNameパラメーターのみが必須です。必要に応じて、最小負荷率および最大負荷率を更新するよう選択できます。

スクリプトを初めて実行するときは、単一のデリバリーグループを指定する必要があることに注意してください。たとえば、スクリプトを初めて実行するときに次のPowerShellコマンドを使用して2つのデリバリーグループを指定すると、このスクリプトは機能しません

  • Invoke-AutoscaleMachineCreations.ps1 -DeliveryGroupName ‘dg1;dg2’ -XdProfileName profile -LowWatermark 20 -HighWatermark 70 -MachineCatalogName ‘cat1’\

代わりに、最初に次のコマンドを使用して単一のデリバリーグループ(この例ではdg1)を指定します:

  • Invoke-AutoscaleMachineCreations.ps1 -DeliveryGroupName ‘dg1’ -XdProfileName profile -LowWatermark 20 -HighWatermark 70 -MachineCatalogName ‘cat1’\

次に、次のコマンドを使用して、2番目のデリバリーグループ(この例ではdg 2)にスクリプトを実行します:

  • Invoke-AutoscaleMachineCreations.ps1 -DeliveryGroupName ‘dg1;dg2’ -XdProfileName profile

前提条件

スクリプトを実行するには、次の前提条件が満たされていることを確認してください:

  • マシンが作成されている同じドメイン内にマシンが存在する。
  • Remote PowerShell SDKがそのマシンにインストールされている。Remote PowerShell SDKについて詳しくは、「SDKおよびAPI」を参照してください。
  • その他の前提条件:
    • 監視対象とするデリバリーグループ
    • プロビジョニングスキーム(テンプレート)が関連付けられているMachine Creation Services(MCS)で作成されたマシンカタログ
    • プロビジョニングスキームに関連付けられているIDプール
    • スクリプトがWindowsイベントログに情報を書き込めるように作成されるイベントログソース
    • リモートサーバーへの認証を可能にするセキュアクライアント

権限、推奨事項、および通知

スクリプトを実行するときは、以下に注意してください:

  • XdProfileNameパラメーターを使用してリモートサーバーを認証する場合は、Citrix Cloudコンソールで作成されたAPIアクセスセキュアクライアントを使用して、認証プロファイルを定義する必要があります。詳しくは、「認証API」を参照してください。

  • Active Directoryでマシンアカウントを作成および削除する権限が必要です。

  • Windowsタスクスケジューラを使用してPowerShellスクリプトを自動化することをお勧めします。詳しくは、「Windowsタスクスケジューラを使用した自動化タスクの作成」を参照してください。

  • スクリプトでWindowsイベントログに情報(エラーやアクションなど)を書き込む場合は、最初にNew-EventLogコマンドレットを使用してソース名を指定する必要があります。たとえば、New-EventLog -LogName Application –Source <sourceName>などです。その後、Windowsイベントビューアーの [アプリケーション] ペインでイベントを表示できます。

  • スクリプトの実行中にエラーが発生した場合は、スクリプトを手動で実行してからスクリプトチェックを実行し、問題のトラブルシューティングを行います。

認証API

スクリプトを実行する前に、APIアクセスセキュアクライアントを使用して認証プロファイルを定義する必要があります。スクリプトを実行するアカウントと同じアカウントを使用して、セキュアクライアントを作成する必要があります。

セキュアクライアントには以下の権限が必要です:

  • MCSを使用してマシンを作成および削除する。
  • マシンカタログを編集する(マシンを追加および削除する)。
  • デリバリーグループを編集する(マシンを追加および削除する)。

セキュリティクライアントを作成するときには、セキュリティクライアントが現在のアカウントから自動的に権限を継承するので、アカウントに上記の権限があることを確認してください。

セキュアクライアントを作成するには、次の手順を実行します:

  1. Citrix Cloudにサインインし、[IDおよびアクセス管理]>[APIアクセス] に移動します。

  2. セキュアクライアントの名前を入力し、[クライアントの作成] をクリックします。

リモートサーバーを認証するには、Set-XDCredentials PowerShellコマンドを使用します。次に例を示します:

  • Set-XDCredentials -APIKey <key_id> -CustomerId <customer_id> -SecretKey <secret_key> -StoreAs <name specified by the XdProfileName parameter>

Windowsタスクスケジューラを使用した自動化タスクの作成

Windowsタスクスケジューラを使用してPowerShellスクリプトを自動化できます。これにより、特定の間隔で、または特定の条件が満たされたときに、スクリプトが自動的に実行されます。このスクリプトをWindowsタスクスケジューラで実行するには、必ず [タスクの作成]>[設定] タブで [新しいインスタンスを開始しない] を選択します。これにより、スクリプトが既に実行されている場合でも、Windowsタスクスケジューラではスクリプトの新しいインスタンスを実行できなくなります。

スクリプト実行例

スクリプトの実行例については、下記を参照してください。スクリプトファイルは複数回呼び出されることに注意してください。この例では、負荷をシミュレートするために、1つのセッションが起動され、終了します。

スクリプト実行例

スクリプトのトラブルシューティングチェックリスト

スクリプトは、情報(エラーやアクションなど)をWindowsイベントログに書き込みます。この情報は、スクリプトの実行時に発生する問題のトラブルシューティングに役立ちます。以下のトラブルシューティングチェックリストを念頭に置いておくと役立つでしょう:

  • リモートサーバーと通信できない。選択できるアクション:
    • サーバーへの接続を確認します。
    • 使用するAPIキーが有効であることを確認します。
  • マシンを作成できない。選択できるアクション:
    • スクリプトを実行しているユーザーアカウントに、ユーザーアカウントをドメインに作成するための十分な権限があることを確認します。
    • APIキーを作成したユーザーに、MCSを使用してマシンをプロビジョニングするための十分な権限があることを確認します。
    • マシンカタログの有効性(つまり、そのイメージがまだ存在し、良好な状態であること)を確認します。
  • マシンをマシンカタログまたはデリバリーグループに追加できない。選択できるアクション:
    • APIキーを作成したユーザーが、マシンカタログおよびデリバリーグループとの間でマシンを追加および削除するための十分な権限を持っていることを確認します。