UiPath Blog
本記事ではUiPath製品をVDI環境にて使用する際の展開方法および留意事項について記載します。 この内容はバージョン2023.10 に基づくものであり、将来のバージョンアップにより製品仕様が変更される可能性がありますので、予めご了承ください。 また本記事の対応バージョンは 2021.10 以降 としております。
UiPath製品は特定のVDI製品に依存することがないため、本記事では可能な限りニュートラルに記述しております。 本文書で扱う仮想デスクトップは主に Windows 10 または 11 などのクライアントOS (同時に1ユーザーのデスクトップセッションのみ許可される) を前提とします。 同時にマルチユーザーセッションが許可されるサーバーOSやAzure Virtual DesktopにおけるWindows 10/11 Enterprise マルチセッションは本文書では対象外としています。マルチセッションでのUiPath Robotの利用手順は 高密度ロボットのWebガイド をご参照ください。
検証済みの製品についてはUiPath Studio/Robotのソフトウェア要件をご参照ください。
UiPath環境およびVDI環境の構成により、製品の展開方法および留意点が異なります。ポイントとなる構成は下記の3点です。
Orchestrator: Orchestratorによってライセンスアクティベーションされるか?
Orchestratorによるアクティベーション有りの環境はOrchestratorであらかじめユーザーまたはマシンごとにライセンス種類を設定し、一元管理します。Studio/Robot利用ユーザーまたはマシンがOrchestratorに接続した時にライセンスが付与されます。
Orchestratorによるアクティベーション無しの環境はローカルアクティベーションを行い、ローカルディレクトリ上にアクティベーション情報を保持します。
割り当て: ユーザーとマシンの割り当てが固定(静的)かランダム(動的・流動的・プール型)か?
Orchestratorによるアクティベーション有りの環境では、Orchestrator上のロボットは従来はユーザーと標準マシンの組み合わせで定義されていたため、ユーザーとマシンの割り当てがランダムの場合にはそれぞれを掛け算した数のロボットを登録する必要がありました。この問題は、マシンテンプレートを使用することによって解決され、各種ロボットを任意のマシンで利用可能となりました。
Orchestratorによるアクティベーション無しの環境では、デフォルトでローカルディスク上にアクティベーション情報が保持されますが、割り当てがランダムの場合には、再アクティベーションが求められる場合があります。この問題を回避するには移動プロファイルを使用する、もしくはファイル共有など永続的なディスク上にアクティベーション情報を保持しスクリプトなどによってローカルディスクに同期する実装が必要となります。
パーシステンス: OS再起動やマスターイメージ更新した場合でもファイル変更が保持されるか?
パーシステンス有りの環境では個々の仮想デスクトップをマスターイメージからフルクローンして作成するため、個々にファイル変更を永続的に保持することができます。
パーシステンス無しの環境ではマスターイメージを一対多で仮想デスクトップに割り当て、個々のデスクトップでは差分情報のみを保持します。この差分情報はOS再起動やマスターイメージ更新などの操作によりリセットされるため、個々のデスクトップでのファイル変更は破棄されます。よって永続的に設定を保持する場合 (たとえばマシンテンプレートを使用してUnattendedロボットをOrchestrator接続する場合など) は予めマスターイメージにてこの設定を実施します。
Orchestratorによるアクティベーション有り・パーシステンス無しの環境では、マシンテンプレートによるOrchestrator接続を予めマスターイメージ上で設定し、仮想デスクトップにてStudio、AttendedロボットまたはUnattendedロボットとして利用することが可能です。Studio、Attendedロボットではマシンテンプレートの代わりに対話型サインインを利用することも可能です。
Orchestratorによるアクティベーション無し・パーシステンス無しの環境では、ローカルディスクのユーザープロファイル上にアクティベーション情報が保存されますが、この情報が保持されない場合には再アクティベーションが求められます。この問題を回避するには移動プロファイルを利用する、もしくはファイル共有など永続的なディスク上にアクティベーション情報を保持しスクリプトなどによってローカルディスクに同期する実装が必要となります。
Orchestratorによるアクティベーション有り・割り当てランダムまたはパーシステンス無しの環境でStudioまたはAttendedロボット利用の場合 (パターン3, 5)
マシンテンプレートを使用することにより、ユーザーのみをロボットとして登録し、共通のマシンキーまたはクライアント資格情報を使用してOrchestrator接続された任意のマシンでStudioまたはAttendedロボットを実行することができます。
パーシステンス無しの環境では、予めマスターイメージにてマシンキーまたはクライアント資格情報を使用してOrchestratorへの接続設定を行います。
またはマシンテンプレートの代わりに 対話型サインイン を利用することも可能です。
パーシステンス無しの環境でサインイン先のURLを既定の https://cloud.uipath.com より変更するには、予めマスターイメージにて uipath.config ファイルの設定を変更 します。
移動プロファイル環境では下記セクション「移動プロファイル環境での留意事項」をご参照ください。
Orchestratorによるアクティベーション無し・割り当てランダムまたはパーシステンス無しの環境でStudioまたはAttendedロボット利用の場合 (パターン9, 11)
Orchestratorによるアクティベーション無しの環境では、通常はローカルディスクのユーザープロファイル上に生成されるアクティベーション情報が保持されずに再アクティベーションが求められる可能性があります。
この問題を回避するには、次の手順によりアクティベーション情報を保持するように構成変更します。
アクティベーション情報 (license.dat) は %AppData%\UiPath\LicenseInternal 配下に生成されます。
このディレクトリおよびファイルは移動プロファイル環境下であれば自動的に同期されるため、初回起動時のみアクティベーションが求められますが、2回目以降は別マシンの仮想デスクトップにログオンした場合でも再アクティベーションする必要はありません。
移動プロファイルを使用していない環境は、初回アクティベーション後、ファイルサーバーに仮想デスクトップのログインユーザーごとに license.dat を保存し、ログオンスクリプトなどでファイルサーバーから対応するユーザーの license.dat を %AppData%\UiPath\LicenseInternal にコピーする実装が必要となります。ただし同一ユーザーによってStudioまたはAttendedロボットを複数端末にて同時利用する場合には弊社のライセンス規約をご確認ください。
Orchestratorによるアクティベーション有り・割り当てランダムまたはパーシステンス無しの環境でUnattendedロボット利用の場合 (パターン4, 6)
マシンテンプレートを利用することにより、共通のマシンキーまたはクライアント資格情報を使用してOrchestrator接続された任意のマシンでUnattendedロボットを実行することができます。
この方法を使用するには前提として下記の環境が必要となります。
Orchestratorにてモダンフォルダーを利用
Unattendedロボット実行ユーザーがADドメインに所属
移動プロファイル環境では下記セクション「移動プロファイル環境での留意事項」をご参照ください。
パーシステンス無しの環境にて、マシンテンプレートによるUnattendedロボットの設定およびジョブ実行までの大まかな流れは下記の手順となります。(パーシステンス有りの環境では個々のVMをクローンした後Orchestratorの接続設定を行うこともできます)
Orchestratorにてマシンテンプレートを作成します。本番環境では「ライセンス - Unattended ランタイム」、非本番環境では「ライセンス - Testing ランタイム」を 1とします。
Unattendedロボットマシンの元となるマスターイメージにて、UiPath Robot をインストールし、Orchestratorとの接続に(1)で生成したマシンキーまたはクライアント資格情報を使用します。必要に応じてSysprepを実行して一般化します。
マスターイメージをクローンして仮想デスクトップを必要台数プロビジョニングします。この操作はハイパーバイザー上での手動クローン、またはVDI製品のデスクトッププロビジョニング機能を使用します。
Unattendedロボット実行ユーザーとして、Orchestratorにてユーザーまたはロボットアカウントを追加します。ユーザーまたはロボットアカウントの [無人オートメーションの設定] にて、無人オートメーションを有効化し、ドメインユーザーのパスワードを登録します。Orchestratorにおけるローカルユーザーの場合は、対応するドメインユーザー名を手動で割り当てます。追加されたユーザーに対してRobotロールを割り当てます。
モダンフォルダーを作成し、(4)で作成したユーザーを割り当てます。さらに(1)で作成したマシンテンプレートをモダンフォルダーに割り当てます。
Unattendedロボットに実行させるプロセスをモダンフォルダーに追加します。
プロセス・実行回数・実行ユーザー(指定またはすべて)を選択し、ジョブを実行します。トリガーによる実行も可能です。 ジョブは「利用可」のマシンに動的に割り当てられます。すべてのマシンが「実行中」の場合には「保留中」となり、前のジョブが完了次第、実行が開始されます。 ※ 注意: マスターイメージからクローンされたVMがOrchestrator接続した時にUnattendedライセンスが消費されます。クローンするVM数がUnattendedライセンス数を超過しないようにUnattended用に専用のVDIプールを作成することを推奨します。
移動プロファイル環境にてプロセス実行する際に下記の4条件に合致した場合には エラーが発生します。
ログインに使用するWindowsユーザのプロファイルの種類が「移動」である。
実行対象のプロセスが、対応OS「Windowsレガシー」プロジェクトにて作成されている。
UiPath Robotの動作モードが「サービスモード」である。(services.msc にて UiPath Robot サービスが存在すればサービスモード、存在しなければユーザーモード)
移動プロファイルを使用した同一 Windows ユーザが異なる端末へログインし、「2回目以降」プロセス実行を行っている。
このエラーの原因は下記の通りです。
初回Windowsログインでのプロセス実行時において、Windowsレガシーで作成されたパッケージは %UserProfile%.nuget\packages 配下にXAMLファイルとして展開されますが、サービスモードのセキュリティ強化の仕様上、ユーザー権限ではXAMLファイルのコピーが行えません。
このためWindowsログアウト時にローカルからファイルサーバへの移動プロファイル同期の際にXAMLファイルのみコピーに失敗します。この状態で別端末へWindowsログインした場合、XAMLファイルが欠落した状態でファイルサーバからローカルへの移動プロファイルの同期が行われるため、2回目以降 UiPath Robotからプロセスを起動する際にXAMLファイルが見つからず "Could not find file 'C:\Users\<UserName>\.nuget\packages\<PackageName>\<Version>\lib\net45\Main.xaml'." というエラーが発生します。
回避策は下記のいずれかの方法を検討します。
WindowsレガシーのプロジェクトをStudio v2022.10以降で開くことにより、Windowsプロジェクトに変換することができます。Windowsプロジェクトのワークフローは内部的にはXAMLではなくDLLとしてコンパイルされ、ユーザー権限でのファイルコピーが可能なため上記のエラーは発生しなくなります。
UiPath Robot設定によりXAMLセキュリティを無効化します。uipath.configにて下記設定を変更します。 <configuration> <packageSettings> <add key="disableSecureXaml" value="true" /> </packageSettings> </configuration>
グループポリシー「ユーザーの構成 > ポリシー > 管理テンプレート > システム > ユーザー プロファイル > 特定のディレクトリを移動プロファイルから除外する」にて .nuget ディレクトリを指定し、Windowsログインに利用するユーザアカウントに対して適用します。
Amazon WorkSpacesの仮想デスクトップ接続時にはコンソールセッションが使用され、クライアントのウィンドウサイズに応じて動的に解像度が変更されます。 自動化プロセス実行時には最後のウィンドウサイズが使用されるため、UR実行時には解像度に依存する対向アプリケーション(たとえばレスポンシブデザインのWebサイトはブラウザーのウィンドウサイズに応じて表示されるメニューが変化)の自動化を安定稼働させるには、下記のいずれかの対策を取るようにします。
Amazon WorkSpacesクライアントでアクセスする際には、「切断時は最大化する」など解像度が適切にセットされるよう運用ルールを定めます。
ロボット設定にて「コンソールへログイン(LoginToConsole)」を既定値の「はい」から「いいえ」に変更することにより、コンソールセッションの代わりにリモートデスクトップセッションにて自動化プロセスを実行することができます。リモートデスクトップセッションではUnattendedジョブ実行時の解像度を指定することができます。この設定は「最後のウィンドウサイズ」よりも優先されますが、解像度指定を反映させるにはWorkSpacesクライアント接続からは切断ではなくサインアウトする必要があります。
Azure Virtual Desktop(以下AVDと略す)環境では、 UiPath Robotソフトウェア要件 に記載されている下記の制約事項があります。
仮想マシンで Unattended ロボットを使用する場合は、Azure Virtual Desktop セッションを disconnected 状態のままにしないでください (ユーザーは AVD 環境のホスト プールに接続されますが、セッション ホストにもまだ接続された状態になっています)。ロボットは切断されたセッションを使用できません。セッションは AVD を介して作成されているので、ロボットにはアクセス権がないからです。このため、ロボットは新しいセッションを作成して無人ジョブを実行しようとしても、失敗します。これは、AVD セッションは作成済みで disconnected 状態にあるからです。この状態が発生すると、ジョブは最終的にタイムアウトで失敗します。
上記のようにAVDセッションが切断された状態でUnattendedジョブ実行した場合には次のエラーで失敗します。
Could not start executor. A specified logon session does not exist. It may already have been terminated. (0x80070520) RemoteException wrapping System.Exception: Could not start executor. A specified logon session does not exist. It may already have been terminated. (0x80070520)
Unattendedジョブを安定稼働させるためにはAVDセッションに接続した場合には切断せずに必ずログアウトする必要があります。切断セッションを防止する一つの方法として、次のグループポリシーを利用して一定時間経過後に強制的にログアウトすることも可能です。但しこの方法を採った場合には切断セッションにて保存されていないデータは失われてしまうことにご注意ください。
コンピューターの構成 > ポリシー > 管理テンプレート > Windows コンポーネント > リモート デスクトップ サービス > リモート デスクトップ セッション ホスト > セッションの時間制限 配下の次のポリシーを更新します。
切断されたセッションの制限時間を設定する → 有効, 5 分 (切断状態から強制ログアウトするまでの時間を環境に応じて設定)
制限時間に達したらセッションを終了する → 有効
AVD環境ではWindows 10 / 11 マルチセッションのVMを利用することにより、1台のマシンにて複数のジョブを同時実行させることも可能です。詳細な設定手順は 高密度ロボットのWebガイド をご参照ください。
Topics:
OrchestratorTeam, UiPath