マシンの動的なプロビジョニング
Autoscaleによるマシンの動的プロビジョニング
Autoscaleには、マシンを動的に作成および削除する機能が備えられています。PowerShellスクリプトを使用してこの機能を活用できます。このスクリプトで、現在の負荷条件に基づいて、デリバリーグループ内のマシンの数を動的にスケールアップまたはスケールダウンできます。
このスクリプトには、次の利点(およびその他)があります:
-
ストレージコストの削減。コンピューティングコストを削減させるAutoscaleとは異なり、スクリプトではマシンをプロビジョニングするためによりコスト効率の高いソリューションを実現します。
-
負荷の変化の効率的的な処理。このスクリプトで、現在のデリバリーグループの負荷に基づいてマシンの数を自動的にスケールアップまたはスケールダウンすることにより、負荷の変化を処理できます。
スクリプトのダウンロード
PowerShellスクリプトは次の場所にあります。 https://github.com/citrix/Powershell-Scripts/tree/master/XAXD/AutoscaleMcs
スクリプトの機能の仕方
重要:
- 1つのマシンカタログを複数のデリバリーグループに指定して、スクリプトで管理することはできません。つまり、複数のデリバリーグループが同じマシンカタログを共有している場合、これらのデリバリーグループのいずれでもスクリプトは機能しません。
- 同じデリバリーグループのスクリプトを複数の場所から同時に実行することはできません。
スクリプトはデリバリーグループレベルで機能します。負荷を(負荷インデックス基準で)測定し、マシンを作成するか削除するかを決定します。
このスクリプトによって作成されたマシンには一意のタグが付けられるので(ScriptTag
パラメーターを使用)、後で識別できます。マシンの作成または削除は、以下に基づいて行われます:
-
デリバリーグループの最大負荷率。Autoscaleで余分な負荷に対処するためにマシンを作成する最大レベルを指定します。このしきい値を超えると、マシンがバッチで作成され、現在の負荷はしきい値以下にされます。
-
デリバリーグループの最小負荷率。このスクリプトで作成され、アクティブなセッションのないマシンを削除する最小レベルを指定します。このしきい値を超えると、このスクリプトで作成され、アクティブなセッションのないマシンが削除されます。
このスクリプトはデリバリーグループ全体を監視し、トリガー条件が満たされたときにマシンを作成または削除することを目的としています。これはそれぞれの実行ごとに行われます。つまり、スクリプトが意図したとおりに機能するように、定期的にスクリプトを実行する必要があります。5分以上の間隔でスクリプトを実行することをお勧めします。これにより、全体的な応答性が向上します。
スクリプトは、以下のパラメーターに依存して機能します:
パラメーター | 種類 | デフォルト値 | 説明 |
---|---|---|---|
DeliveryGroupName | 文字列 | X | 現在の負荷を判定するために監視するデリバリーグループの名前。名前をセミコロンで区切ったリストを作成できます。例:Invoke-AutoscaleMachineCreation.ps1 -DeliveryGroupName ‘dg1;dg2;dg3’ -XdProfileName profile 。 |
XdProfileName | 文字列 | X | リモートサーバーの認証に使用するプロファイルの名前。このパラメーターを使用したリモートサーバーの認証について詳しくは、「認証API」を参照してください。 |
HighWatermark | 整数 | 80 | Autoscaleで余分な負荷に対処するためにマシンを作成する(負荷インデックス基準での)最大負荷率。 |
LowWatermark | 整数 | 15 | このスクリプトで作成され、アクティブなセッションのないマシンを削除する(負荷インデックス基準での)最小負荷率。 |
MachineCatalogName | 文字列 | X | マシンが作成されるマシンカタログの名前。 |
MaximumCreatedMachines | 整数 | -1 | 指定されたデリバリーグループで作成できるマシンの最大数。値が0以下の場合、スクリプトはこのパラメーターを処理しません。 |
ScriptTag | 文字列 | AutoscaledScripted | スクリプトで作成されたマシンに適用されるタグ。 |
EventLogSource | 文字列 | X | 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を使用してマシンを作成および削除する。
- マシンカタログを編集する(マシンを追加および削除する)。
- デリバリーグループを編集する(マシンを追加および削除する)。
セキュリティクライアントを作成するときには、セキュリティクライアントが現在のアカウントから自動的に権限を継承するので、アカウントに上記の権限があることを確認してください。
セキュアクライアントを作成するには、次の手順を実行します:
-
Citrix Cloudにサインインし、[IDおよびアクセス管理]>[APIアクセス] に移動します。
-
セキュアクライアントの名前を入力し、[クライアントの作成] をクリックします。
リモートサーバーを認証するには、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キーを作成したユーザーが、マシンカタログおよびデリバリーグループとの間でマシンを追加および削除するための十分な権限を持っていることを確認します。