[UiPath] よくわかるUnattendedロボット(同時実行編)

こんにちは。[UiPath Friendsコミュニティ](https://uipath-friends.doorkeeper.jp/)運営メンバの @masatomix です。


## イントロ

前回の記事 [[UiPath] よくわかるUnattendedロボット(イントロ編)](https://qiita.com/masatomix/items/c63115254ed59d06ff9a) のつづきです。
前回は1台構成のUnattended ロボット環境を構築したのでした。

![orch](https://imgur.com/tjscGHz.png)

今回はPC2台(以上) でUnattendedロボットを構築する際に、どこにどのように設定すればよいかを説明します。

![multi000](https://imgur.com/XQ2fvez.png)


## 対象のかた

- すこしはUiPath Orchestratorを知ってる・触ったことがあるよ、という方を想定しています。
- ぼんやりとUnattendedロボットは使ってるけど、もうすこし細かく知りたいなぁ、という方。
- [前回の記事](https://qiita.com/masatomix/items/c63115254ed59d06ff9a)のつづきが知りたい方


## コレをやったらできること

- オンプレのUiPath Orchestratorで、2台以上のUnattendedロボットを構築し、サンプルワークフローを動かすことができるようになります。

- PC複数台に対してマシンキーをどのように発行すればよいか、またキーごとのランタイム数をどのように設定すればよいか、などが分かるようになります。

## TL;DR

- ライセンスを複数もっているばあい、複数のPCにライセンスを割り振ることで、最大そのライセンス数分のワークフローを同時に実行できる。**ライセンスは原則、OCへのPC接続ごとに、1つ消費**される。


- マシンテンプレートをフォルダに紐付けることで、**テンプレート単位でワークフローの実行可・不可を制御** できる。
- したがって、PCそれぞれに個別のマシンキーを設定すると、**マシンごとにワークフローの実行可・不可を制御**できる。
- 複数のPCでマシンキーを共有すると、実行時に**キーを共有しているPCたちで、空いているPCがワークフローを実行する**など、いわゆるラウンドロビン的なスケールアウトができる。
- **マシンキーを共有する・しないにかかわらず、基本的にランタイム数は1にしておけばよい**。
    -  ランタイム数1のマシンキーを1コ作成し、3台のPCで共有してOC接続した場合、1x3=3ライセンス必要。
    -  ランタイム数1のマシンキーを3コ作成し、3台のPCそれぞれに設定してOC接続した場合も、3ライセンス必要。
- **ランタイム数を増やすときはPC1台で同時にワークフロー**を動かすとき。
    - たとえばPC1台で同時に2コのワークフローを動かしたい場合、ランタイム数を2とする。その場合1PCでライセンスを2消費する。そのマシンキーを3台のPCで利用すると、2x3=6ライセンス消費する。
    - ただし複数ユーザが同時ログイン可能なWindowsサーバ機などが必要(たぶん)。



## 今回は複数PCで運用してみる 

さあやってみます。

- テスト1: PCごとにマシンキーを用意するケース
- テスト2: PC2台でマシンキーを共有するケース

こんなテストをやってみます。

## 前提の環境

| サーバ環境の項目 | 値                                      |
| ---------------- | --------------------------------------- |
| Orchestrator     | オンプレのOrchestrator 2020.10.7        |
| Robot            | UiPath Robot (v20.10.9) /サービスモード |
| URのライセンス数 | 2つ以上                                 |



![multi000](https://imgur.com/XQ2fvez.png)




## テスト1: PCごとにマシンキーを用意


- PC情報

| PC名 | マシンテンプレート名 |
| ------ | ---- |
| s001 | s001_template (URランタイムを1つ割り当て) |
| s002 | s002_template (URランタイムを1つ割り当て) |

- ユーザ/ロボット情報

| ユーザ名 | AR自動 | UR自動 |
| ------ | ------ | ------ |
| ad\user001 | × | ○ |
| ad\user002 | × | ○ |

- フォルダ情報

| フォルダ名 | プロセス名 | ユーザ | マシン |
| ------ | ---- | ---- | ---- |
| f001 | ModernTest ver.1.0.1 | ad\user001 | s001_template |
| f002 | ModernTest ver.1.0.2 | ad\user002 | s002_template |

まとめると、PCごとにマシンテンプレートを用意し、

- PC: s001 では ModernTest ver.1.0.1 をuser001が実行
- PC: s002 では ModernTest ver.1.0.2 をuser002が実行

できるようになっています。図示するとこんな感じ。

![multi001](https://imgur.com/RXzhrWn.png)


そして、別のPCからOCのWeb画面経由でワークフローをそれぞれ実行してみました。想定結果は先に書いたとおり、

- PC: s001にad\user001で自動でログインされて、ワークフロー(ModernTest) のver.1.0.1が実行される。
- PC: s002にad\user002で自動でログインされて、ワークフロー(ModernTest) のver.1.0.2が実行される。

ですね。

### 動画はこちら

https://youtu.be/FIcGhDwaV8s?list=PLa6DCBgbi2crKzli4ddRwwhkuo4ldJVv5



### わかること

- ライセンスを複数もっていると、**複数のPC上で同時にワークフローが実行できる**(あたりまえか)
- マシンキーを分けることで特定のフォルダに特定のPCを紐付けることが可能なので、結果**マシンごとに実行可能なワークフローを制御**できる

ことが分かりました。
**ライセンスが単数のときは複数PCを同時に有効化できません**でしたが、**ライセンスが複数あると、PCをそのライセンス数ぶん同時に有効化できる**ので、並列にワークフローが実行できるわけですね。

まあいろいろ書きましたが、ここまでは感覚的に当たり前の結果です。



## テスト2: PC2台で、マシンキーを共有

さてさてマシンテンプレートは複数台で共有できるので、つぎは**マシンキーを共有する設定**にしてみます。
設定方法はさきの例からマシンキーを共通にしただけです。具体的には**「shared_template」というマシンテンプレートを作って、URランタイムを一つ割り当て**ておきます。

- PC情報

| PC名 | マシンテンプレート名                        |
| ---- | ------------------------------------------- |
| s001 | shared_template (URランタイムを1つ割り当て) |
| s002 | 同上                                        |

- フォルダ情報

| フォルダ名 | プロセス名           | ユーザ名   | マシンテンプレート名 |
| ---------- | -------------------- | ---------- | -------------------- |
| f001       | ModernTest ver.1.1.1 | ad\user001 | shared_template      |
| f002       | ModernTest ver.1.1.2 | ad\user002 | shared_template      |



![orch-複数構成](https://imgur.com/q3PSzKB.png)



PC2台は、**共通のテンプレート(shared_template)でどちらもフォルダ f001,f002 に紐付いている**ということですね。なので**どちらのPCでも、ver.1.1.1, ver.1.1.2 のワークフローが動くはず**です。
ちなみにユーザは、単純化のためフォルダごとに別のユーザを紐付けました。

やってみましょう。

### 動画はこちら

https://youtu.be/J7Z8C112Fh4?list=PLa6DCBgbi2crKzli4ddRwwhkuo4ldJVv5


### わかること

- ライセンスを複数台もっていると、複数のPC上で同時にワークフローが実行できる(テスト1とおなじ)
- マシンキーを共有すると、ジョブの実行時に**キーを共有しているPCたちで、空いているPCがワークフローを実行する**など、いわゆるラウンドロビン的なスケールアウトができる。


- マシンキーを共有した場合でも、**ジョブの作成時に明示的にPCを指定することも可能**
- **マシンキーを共有する場合でもランタイム数は1でよい**。

などがわかりました。
マシンキーの共有については「PCたちをひとかたまりと見なしていい場合は同じマシンキーにする」とか「あるPCは個別のフォルダに紐付けたいなどの場合は個別のキーを配布する」とか、そういったことを考慮すれば良さそうです[^1]

[^1]: 「あるPCだけランタイム数を複数にしたい場合とかは別キー」にした方が効率的なのですが、細かい説明は省略( PC台数xランタイム数になるからね)



[公式にランタイムの説明](https://docs.uipath.com/orchestrator/lang-ja/v2020.10/docs/managing-robots-modern-folders#unattended-setup) があるのですが、最初は意味が分かりませんでした。ここまで理解してあらためて読んでみると、、、

> たとえば、あるマシン テンプレートに 2 つの Unattended ランタイムを割り当てたとします。そのマシン テンプレートを使用して Orchestrator に接続された 3 台のワークステーションは、6  つの Unattended ライセンス (2 つの Unattended ライセンス × 3 台のワークステーション) をテナントのライセンス プールから確保します。これにより、2 つの Unattendedを各ワークステーションで同時に実行できます。

(公式の表記を少しシンプルにしています)
なるほど。ようやく意味が分かりました。今回のケースのように **2台のPCで共有されるマシンテンプレートは、ランタイム2とかにするのではなく** 、ランタイムは1でOKで、そのかわりテンプレートを2台が使ってるから、ライセンスは「2台PC」x「テンプレのランタイム1」 = 2消費するよという考え方なんですね。なるほど。



## まとめ

- 複数台のUnattended ロボットを動かしてみました。
- マシンキーを個別に設定した場合、共有した場合でどのような違いがあるかが分かりました。
- マシンテンプレートのランタイム数をどう設定すれば良いかがわかりました。
- あとは冒頭のTL;DRに書いてあるようなことが、理解できました。

以上おつかれさまでしたー。

## 関連リンク

- [UiPath Orchestrator のバージョンその他による挙動の違いにぐったりきたので整理(用語集)](https://qiita.com/masatomix/items/48a6cd104be52c53a618) 用語集です
- [Unattended 設定](https://docs.uipath.com/orchestrator/lang-ja/v2020.10/docs/managing-robots-modern-folders#unattended-setup) ランタイムの設定の考え方
- [[UiPath] よくわかるUnattendedロボット(イントロ編)](https://qiita.com/masatomix/items/c63115254ed59d06ff9a) 前回の記事
- [2種類のロボット接続【UiPath Orchestratorをもっとよく知る動画シリーズ】#11](https://www.youtube.com/watch?v=0UVokA3urtE&list=PLQBe36ilIwgj8MBS84ZYShooKcit61w5q&index=11) 公式。おなじような内容だけどもっと丁寧に解説されてますね! (クラウド版でOC2021ベースだけどね)