【UiPath】オンプレ版Orchestratorのログインで500エラーが出た時に確認すべきこと

## はじめに

“RPA…様々な作業を連携させて自動化する技術” 程度の知識しか持ち合わせていなかった私が、最近、Uipathを扱うプロジェクトに参画しました。
学習のため、AWSでサーバー構築→オンプレミスOrchestrator（以下OC）をインストール→AR実行/UR実行という流れを数回試行。なんとなく分かってきたぞ…という段階で、OCとStudioのバージョンの違いによる仕様の差異の調査をすることに。
OCサーバーとSQLサーバーの構築が割とスムーズに完了し、さてOCのパブリックURLにアクセスしてログインしよう！というところで500エラーに遭遇。しかも全く同じ流れで2度も。なぜだ…
結論、原因は些細なことでしたが、かなり沼にはまりました。未来の自分のために、確認すべきポイントを書き留めておきます。

:::note warn
注意
初学者のため内容に不備があると思われます。
誤りがありましたらコメントでご教示いただけますと幸いです。
:::

![画像.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3368170/3f1b980a-2824-f1ae-ae4a-170f86ad4c37.png)

## 前提条件
### OC環境（サーバー・DB構成）
- OCサーバー：EC2上でOrchestratorが稼働するサーバー
- SQLサーバー：EC2上でOrchestratorのデータを保存するサーバー
- RDS：Orchestratorのデータを保存するデータベース

クライアントからOrchestratorサーバーに接続する際は、443番ポートを使用。
OrchestratorサーバーからSQLサーバーの接続する際は、1433番ポートを使用。
※2台のサーバー間でネットワークの疎通が取れている必要がある。

### ソフトウェア要件
下記UiPathドキュメントの「Orchestrator インストール ガイド」に記載されているソフトウェア要件に則っている。

https://docs.uipath.com/ja/orchestrator/standalone/2023.10/installation-guide/orchestrator-software-requirements

### インストールしたコンポーネント
|コンポーネント|バージョン |
|:-----------|------------:|
|IIS設定スクリプト|―|
|.NET 6.0 Hosting Bundle |3.1.32|
|URL Rewrite |2.1|
|WebDeploy|3.6| 
|Orchestrator（On-premise）|2022.10.4|

 ### サーバー証明書
 自己署名証明書を利用。
 参照：
 
 https://docs.uipath.com/ja/orchestrator/standalone/2023.10/installation-guide/using-a-certificate-for-the-https-protocol

 ## 確認すべきポイント
 本題です。
 500エラー（サーバーサイドのエラー）であることが分かっているので、特に疑うべきはDB接続orサーバー証明書関連。
 - **IISの状態**
サーバー マネージャーのインターネット インフォメーション サービス(IIS)マネージャーでIISが正常に起動しているか確認。

 - **DB接続状態**
	- SSMS（SQL Server Management Studio）でDBに接続できているか確認
	- PowerShellで下記コマンドを叩き、SQL Serverデータベースに接続できるか確認
```
$connectionString = "Server=[プライベートIPアドレスorサーバー名];Database=[データベース名];User Id=[ユーザー名];Password=[パスワード];"
$conn = New-Object System.Data.SqlClient.SqlConnection
$conn.ConnectionString = $connectionString
$conn.Open()
if ($conn.State -eq 'Open') {
    Write-Host "Connection succeeded"
} else {
    Write-Host "Connection failed"
}
$conn.Close()
```

 - **サーバー証明書**
次の3点を確認。
	- サーバー証明書がOCサーバー（IIS）側で、Windowsキー＋R → certlm.mscを開き「個人」と「信頼されたルート証明機関」に存在しているか確認
	- サーバー マネージャーのインターネット インフォメーション サービス(IIS)マネージャーに存在しているサーバー証明書の拇印が①に存在しているサーバー証明書の拇印と一致しているか
	- SAN値（サブジェクト代替名）が適切に設定されているか（＝URLのドメイン名と同じdnsNameになっているか）

 - **名前解決**
/etc/hostsファイルの設定が正しいか次の2点を確認。
	- OCサーバー（IIS）側にSQLサーバーのサーバー名と**プライベートIPアドレス**を指定している
	- ローカルPC側にOCサーバーのサーバ名と**パブリックIPアドレス**を指定を指定している
	
 - **OCサーバー（IIS）→ SQLサーバの疎通確認**
  	- コマンドプロンプトでpingコマンドを実行し疎通確認
  	- PowerShellでTestnet Connectionコマンドを実行し指定ポート（1433）が開いているか確認
```
Test-NetConnection [SQLサーバーのプライベートIPアドレス or サーバ名] -Port 1433
```

 - **ログの確認**
 	- C:\Windows\System32\LogFiles\HTTPERR内の該当するログを見る
 	- %SystemDrive%\inetpub\logs\LogFiles内の該当するログの500エラーの箇所を見る
 	
 　※ 今回はあまり有益な情報を得られず…

  - **その他**
   ①接続情報を見てみる（ClientIDとかDB情報とか）
	- C:\Program Files (x86)\UiPath\Orchestrator\Identity\appsettings.Production.json
	- C:\Program Files (x86)\UiPath\OrchestratorのUiPath.Orchestrator.dll.config
	- C:\Program Files (x86)\UiPath\Orchestrator\Webhooks\appsettings.Production.json

　 ②500エラーの画面でデベロッパーツールを開き、ⅽtrl＋F5でスーパーリロードを行う。
　　→エラーログを見る。

## 今回の原因
今回遭遇した500エラーのそれぞれの原因は、不明点も残りますがおそらく次の通りと思われます。
 #### ①名前解決が正しくできていなかった
OCサーバー（IIS側）の/etc/hostsファイルを書き換えているつもりが、実際はローカルPC側の方に設定しまっていたのだと思います。
**リモートデスクトップを全画面表示にすると、時々ローカルPC側のタスクバーが表示されてしまうようです。**
…罠ですね（笑）
全く気がつきませんでした。何度設定し直してもうまくいかないわけです(-_-;)

 #### ②何らかのバグ
時間を空けて数回IISを再起動したら、何事もなかったかのようにOrchestratorのログイン画面が出ました。（えぇ…涙）
ちなみに、EC2インスタンスを停止→起動では解決できませんでした。

## おわりに
確認すべきポイントを何周もしたり、手順書を初めから読み返して設定を確認したり、少し前のEBSのスナップショットからサーバーを構築し直したり…とエラー解決に想定よりもかなり時間が掛かってしまいました。
ただ、色々試行錯誤したことで得られた知見も多く、今後の他の業務でも活かせるのではないかと思います。大変勉強になりました。