IM-LogicDesigner(REST定義)を使用したオンプレRPAとの連携

はじめに

本CookBookでは IM-LogicDesignerのユーザ定義(REST定義)を使用したRPA連携をご紹介します。

また、RPA実行環境に設置する連携エージェントとして Nginx&Waitressを使用した様々な機能(認証、キューイング、状況確認など)をご紹介します。

cookbook253715_system_configuration_image

本CookBookで連携するRPA製品はWinActorを使用していますが、オンプレミス(デスクトップ)対応のRPA製品、コマンド等で起動可能なRPA製品であれば、応用利用が可能です。基幹系サーバとRPA実行環境を分離、RESTやキューイング機能などが必要なユースケースなどでご活用ください。

IM-RPA(WinActor連携)との違い

本Cookbookでご紹介している連携方法は、IM-RPAのWinActor連携とは全面的に異なる仕様・機能になります。

IM-RPA で実現されていない機能の代用として、適用・応用できる場合は、ぜひご活用ください。
また、機能を取捨選択し、組み合わせて利用するケースや、別の目的(例:RPA以外の用途)で連携手法を活用する場合もご活用ください。

IM-RPA との違いについては、以下1~9を参照してください。

1. 管理機能

IM-RPA(WinAcor連携)には専用画面や設定機能が備わっていますが、本CookBookには含まれていません。

2. エージェント呼び出しタスク

IM-RPA(WinAcor連携)には専用タスクが備わっていますが、本CookBookではユーザー定義(REST定義)を利用します。

3. セキュリティ(暗号化、認証)

IM-RPA(WinAcor連携)には備わっていませんが、本CookBookではSSLおよびBasic認証が含まれます。

4. ファイル送受信

IM-RPA(WinAcor連携)にはファイル種類などの制約がありますが、本CookBookには制約がありません。(Zipなども可)

5. WinActor同期実行

IM-RPA(WinAcor連携)では同期実行ですが、本CookBookでは非同期実行です。

6. プロセス管理

IM-RPA(WinAcor連携)には備わっていませんが、本CookBookではプロセス状況、プロセス終了などの管理が可能です。

7. 拡張性

IM-RPA(WinAcor連携)のソースは非公開ですが、本CookBookではサンプルソースの位置付けとなり、変更や拡張が可能です。

8. ドキュメント

IM-RPA(WinAcor連携)には専用ドキュメントがありますが、本CookBookでは必要に応じてNginxやWaitressに関するドキュメントを参照する必要があります。

9. 製品サポート

IM-RPA(WinAcor連携)はサポート対象ですが、本CookBookはサポート対象外です。

IM-LogicDesigner資材構成

各ユースケースを想定した13種類のユーザ定義(REST定義)とロジックフローの概要をご紹介します。

詳細は以下のLogicDesignerインポートデータをダウンロード、IM-LogicDesignerインポート機能でインポートしてご確認ください。

LogicDesignerインポートデータcookbook_253715_logicdesigner.zip

cookbook253715_logic_flow_definition_list

1. get_status

RPA実行環境のOS状態を取得するREST定義とロジックフローです。

疎通確認、CPU・メモリ・ディスクサイズを監視するユースケースを想定したフローです。

cookbook253715_get_status

2. get_processes

RPA実行環境の実行中プロセス一覧を取得するREST定義とロジックフローです。

RPAプロセスやRPAシナリオから派生するプロセスが起動中なのか停止中なのかを監視するユースケース想定したフローです。

プロセス名の指定が可能です。(例:name=chrome.exe、name=WinActor7.exe&name=wa7.exe)

cookbook253715_get_processes

3. create_directory_with_uuid

RPA実行環境に一時作業ディレクトリを作成するREST定義とロジックフローです。

エージェントとのファイル送受信やRPAシナリオからファイル操作する際の一時作業ディレクトリを作成するユースケースで想定したフローです。

作成時に一時作業ディレクトリを示すUUIDが生成されます。

cookbook253715_create_directory_with_uuid

4. delete_directory_with_uuid

RPA実行環境のUUIDディレクトリを削除するREST定義とロジックフローです。

必要なファイルは受信済など、ディスクを節約したいユースケースを想定したフローです。

cookbook253715_delete_directory_with_uuid

5. save_screenshot

RPA実行環境のデスクトップ画面スクリーンショット画像を取得するREST定義とロジックフローです。

RPAシナリオの稼働状況を定期取得、モニタ監視するユースケースを想定したフローです。

cookbook253715_save_screenshot

6. upload

RPA実行環境のUUIDディレクトリ内にファイルをアップロードするREST定義とロジックフローです。

RPAシナリオファイルや業務データファイルなどを実行環境に送信するユースケースを想定したフローです。

cookbook253715_upload

7. list_files

RPA実行環境のUUIDディレクトリ内のファイル一覧を取得するREST定義とロジックフローです。

アップロードしたファイルの確認、RPAシナリオで生成したファイルなどを確認したいユースケースを想定したフローです。

cookbook253715_list_files

8. download

RPA実行環境のUUIDディレクトリ内からファイルをダウンロードするREST定義とロジックフローです。

RPAシナリオで生成したファイル、証跡ログファイルなどを受信、ストレージに格納するユースケースを想定したフローです。

cookbook253715_download

9. kill_process

RPA実行環境のプロセスをpidを指定して終了するREST定義とロジックフローです。

特定のプロセスを終了するユースケースを想定したフローです。

cookbook253715_kill_process

10. kill_processes_by_names

RPA実行環境のプロセスをプロセス名を指定して一致する全プロセスを終了するREST定義とロジックフローです。

特定のアプリケーションを終了するユースケースを想定したフローです。
(例:name=chrome.exe、name=WinActor7.exe&name=wa7.exe)

cookbook253715_kill_processes_by_names

11. start_winactor

RPA実行環境のタスクキューにWinActor起動リクエストを送信するREST定義とロジックフローです。

逐次タスクキューを取り出しながらRPA起動を行うユースケースを想定したフローです。

cookbook253715_start_winactor

12. get_winactor_queue

RPA実行環境の取り出し前のタスクキュー情報を取得するREST定義とロジックフローです。

タスク滞留を確認するユースケースを想定したフローです。

cookbook253715_get_winactor_queue

13. reset_winactor_queue

RPA実行環境の取り出し前のタスクキュー情報をリセットするREST定義とロジックフローです。

環境間のタスクキュー調整などでリセットするユースケースを想定したフローです。

cookbook253715_reset_winactor_queue

エージェント(Waitress)

Waitress(Python)を使用して、RESTインタフェース(app.py)を実現します。

詳細は以下のエージェント実装サンプル(Zip)をダウンロード、Zipを解凍してご確認ください。

エージェント実装サンプルcookbook_253715_002_app_py.zip

運用で想定される最低限のエンドポイントのみ実装しています。ユースケースに合わせて自由に変更してください。

また、環境変数を使用してWinActor7.exeのパスを取得しています。事前にWinActor7.exeをインストールした場所を確認、環境変数に設定してください。
例(setコマンドで設定する場合):

set WINACTOR7_EXE_PATH=C:\Users\im\Desktop\WinActor7\WinActor7.exe

(執筆時バージョン:WinActor7.4.4)
(販売終了したWinActor6.x.xには対応していません)
(setコマンドで設定した環境変数は、そのコマンドプロンプトセッション内でのみ有効です)
(環境変数を永続化する場合はシステム環境変数として設定してください)

以下、エージェントのセットアップおよび起動方法をご紹介します。

1. Pythonのインストール

Pythonの公式サイトから最新バージョンをダウンロードします。

(執筆時バージョン:python-3.13.1-amd64.exe)

インストーラーを実行し、「Add Python to PATH」にチェックを入れてインストールします。

2. 仮想環境の作成

仮想環境を使用すると、プロジェクトごとに依存関係を分離できます。

コマンドプロンプトまたはPowerShellを開き、以下のコマンドを実行して仮想環境を作成します(一回のみ)。
例:

mkdir cookbook_sample_project
cd cookbook_sample_project
python -m venv sample_env

次に、仮想環境を有効化します。
例:

cd cookbook_sample_project
sample_env\Scripts\activate

3. 必要なパッケージのインストール

仮想環境が有効化された状態で、必要なパッケージをインストールします(仮想環境内で一回のみ)。
例:

pip install Flask psutil pyperclip waitress pyautogui

4. Pythonスクリプトの実行

仮想環境が有効化された状態で、waitress(Pythonスクリプト:app.py)を実行します。
例:

waitress-serve --listen=*:8000 app:app

以上で Waitressが起動、RESTインタフェースとして機能するようになります。

起動に問題がある場合は、Waitressのドキュメントなどを参考にトラブルシューティングしてください。

エージェント(Nginxを利用したリバースプロキシー、SSL化、Basic認証)

NginxとOpenSSLを使用して、WaitressへのリバースプロキシーおよびSSL化、Basic認証を実現します。

尚、Nginxは一例です。リバースプロキシーの構成として Apache HTTP Server や Traefik などの選択肢もあります。

SSL化は任意です。また、OpenSSL以外の選択肢もあります。(例:Caddy、Let's Encrypt、DigiCertなどの有料証明書)

以下、Nginxのセットアップおよび起動方法をご紹介します。

1. Nginxのインストール

Nginxの公式サイトから最新のWindows用Nginxをダウンロードします。

(執筆時バージョン:nginx-1.27.3.zip)

ダウンロードしたファイルを解凍し、適当なディレクトリに配置します。
(例:C:\nginx)

2. OpenSSLのインストール

Windows用のOpenSSLインストーラをダウンロードするには、以下のリンクからアクセスできます。

OpenSSLプロジェクトの公式サイトではありませんが、信頼性の高いインストーラを提供しています。

(執筆時バージョン:Win64OpenSSL_Light-3_4_0.msi)

インストーラを実行し、指示に従ってインストールを完了します。

3. SSL証明書の作成

コマンドプロンプトを開き、以下のコマンドを実行して秘密鍵を生成します。
例:

mkdir C:\nginx\ssl
openssl genpkey -algorithm RSA -out C:\nginx\ssl\nginx.key

次に、証明書署名要求(CSR)を生成します。
例:

openssl req -new -key C:\nginx\ssl\nginx.key -out C:\nginx\ssl\nginx.csr

プロンプトに従って情報を入力します。
(例:国名、組織名、共通名など)

次に、自己署名証明書を生成します。
例:

openssl x509 -req -days 365 -in C:\nginx\ssl\nginx.csr -signkey C:\nginx\ssl\nginx.key -out C:\nginx\ssl\nginx.crt

4. Nginxの設定

nginx.confファイルをテキストエディタで開き、以下のように設定を追加します。
例:

http {
    server {
        listen 80;
        server_name localhost;
        # Basic認証の設定
        auth_basic "Restricted Content";
        auth_basic_user_file C:\\nginx\\.htpasswd;
        location / {
            proxy_pass http://127.0.0.1:8000;  # WaitressアプリのURL
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
    server {
        listen 443 ssl;
        server_name localhost;
        ssl_certificate C:\\nginx\\ssl\\nginx.crt;
        ssl_certificate_key C:\\nginx\\ssl\\nginx.key;
        # Basic認証の設定
        auth_basic "Restricted Content";
        auth_basic_user_file C:\\nginx\\.htpasswd;
        location / {
            proxy_pass http://127.0.0.1:8000;  # WaitressアプリのURL
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
}

5. Basic認証の設定

.htpasswdファイルを作成し、ユーザー名とパスワードを追加します。
(例:C:\nginx.htpasswd)

開発・検証目的であれば平文も使用可能です。
例:

user:{PLAIN}pass

6. Nginxの起動

コマンドプロンプトを開き、Nginxのディレクトリに移動します。

以下のコマンドを実行してNginxを起動します。
例:

cd C:\nginx
nginx.exe

以上で Nginxがリバースプロキシとして動作し、SSLとBasic認証を使用してWaitressに接続できるようになります。

接続に問題がある場合は、Nginxのエラーログやドキュメントなどを参考にトラブルシューティングしてください。

intra-mart Accel Platform サーバ側にサーバー証明書を追加

1. 証明書を信頼ストアに追加

サーバー証明書をiAPサーバ側のJava信頼ストア(通常は cacerts ファイル)に追加します。
例:

keytool -import -alias server-alias -keystore C:/Java/jre1.8.0_221/lib/security/cacerts -file C:/nginx/ssl/nginx.crt

2. 自己署名証明書を許可

開発環境(Resin利用時)および自己署名証明書を利用する場合、resin.propertiesのjvm_argsに以下を追加します。
例:

-Djavax.net.ssl.trustStore=C:/Java/jre1.8.0_221/lib/security/cacerts -Djavax.net.ssl.trustStorePassword=changeit

以上で Nginxに対してSSL接続できるようになります。

まとめ

本CookBookでは、REST定義を使用してRPA連携を行う方法をご紹介しました。
様々なプロジェクトのユースケースに柔軟に対応するためのアプローチの一つになることを期待しています。是非ご活用ください。