はじめに
以前紹介した Tomcat9 と MySQL8 、Management Console(以降、MC)の構築を前提にして、今回は ロボット・ファイル・システム(以降、RFS)の構築と設定について紹介します。
本ブログは、BizRobo! v11.3.0.2 の利用を前提に解説します。
環境の準備
RFSの構築に必要なファイルやリソースを準備します。細かい調達方法は省略します。
RFS 構築のための調達リソース
# | リソース | 準備方法 |
---|---|---|
1 | rfs.war | BizRobo!のインストールフォルダ配下の 📁WebApps から rfs.war をコピー |
環境構築におけるパラメータ一覧
以下を前提として構築作業を実行。設定値は各自適当に判断してください。
パラメータ | 設定値 | 補足 |
---|---|---|
mc-path | http://192.168.3.13:8080/mc | RFS と連携する MC の URL を指定します。1 |
data-path | C:/RFS | RFS のルートフォルダを設定します。 |
RFS の URL | http://192.168.3.13:8081/rfs | MC からアクセスする RFS の URL を設定 します。 |
構築する環境のサーバー構成
ちょっとした検証作業用に、単体のPC(local IP:192.168.3.13
)へ一式セットアップします。
MC も RFS も Tomcat 上で動作するシステムなので、同居させてもいいのですが、 RFS に絞った検証をする際に同居環境がノイズにならないよう、下記の通り独立したWebコンテナ上に構築します。
単一端末上に複数の Tomcat
を起動する場合、待ち受けポートについてはバッティングしないように 8080
と 8081
に変更しますが、それとは別にシャットダウンポートとして利用されている 8005
についても 8006
に変更します。(起動エラーとなるため)
構築環境のフォルダ構成
📁 apache-tomcat-9.0.x
├─ 📁 webapps # TomcatにデプロイするWebアプリケーションが格納されています。
│ ├─ 📁 rfs
│ │ └─ 📁 WEB-INF
│ │ └─ 📄 web.xml
│ └─ 📄 rfs.war
├─ 📁 logs
│ └─ 📄 rfs.log
:
環境構築の流れ
RFSサーバを構築するには以下の3ステップを実施します。
- アプリケーションファイルのサーバへの配置
-
web.xml
の設定 - MC の設定
構築手順
サーバ状態の確認
Tomcat9 サーバーが停止していることが望ましいですが、WEB-INF/web.xml
を編集するだけであれば Tomcat は自動的に変更を感知して設定ファイルをリロードするので、起動したままでも構いません。
conf/context.xml
に WatchedResource
として設定されているファイルは Tomcat が自動的にその変更を監視しつつ、変更を感知したら再読み込みするため、サーバ自体の再起動は不要です。
<!--The contents of this file will be loaded for each web application-->
<Context>
<!--Default set of monitored resources. If one of these changes, -->
<!--the web application will be reloaded. -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
<WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
:
</Context>
1.Web Application aRchive(war)ファイルの配置
📁 webapps
配下に 📄 rfs.war
を配置し、ファイルを解凍/展開します。
2.web.xml
への必要事項設定
展開した 📁 WEB-INF
配下の 📄 web.xml
をエディタで開き、以下の通り編集します。
<?xml version="1.0" encoding="utf-8"?>
:
<servlet>
<servlet-name>RFSSessionManager</servlet-name>
<servlet-class>com.kapowtech.robotfilesystem.SessionManager</servlet-class>
<init-param>
<param-name>mc-path</param-name>
- <param-value>http://url-for-mc</param-value>
+ <param-value>http://192.168.3.13:8080/mc</param-value>
</init-param>
<init-param>
<!-- the path to where local data is stored -->
<param-name>data-path</param-name>
- <param-value>/data</param-value>
+ <param-value>C:/RFS</param-value>
</init-param>
<init-param>
<!-- the create local folders for static shares -->
<param-name>create-folders</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
:
<param-name>allow-absolute-paths</param-name>
<param-value>false</param-value>
</init-param>
</servlet>
:
その他の項目
-
create-folders :
true(default)
とした場合、初回ロボット実行時にdata-path
に指定したフォルダが自動生成され、併せて MC のレポジトリで設定した各ロボットファイルシステムのフォルダも生成されます。2 -
allow-absolute-paths :
false(default)
とした場合、パス
で指定できる領域がdata-path
を頂点としたその配下に制限される代わりに、MC のレポジトリでパス
の値を相対パスで指定可能になります。
true
とした場合、MC のレポジトリに設定するパス
の値にC:\Other\外部
といった絶対パスを指定して、data-path
外の場所に連携フォルダを指定することが可能になります。
RFSで連携する先が外部のFTPサーバ(ftps://ftp.box.com:21
など)やネットワークドライブ(\\san-server\remote-rfs
など)の場合 allow-absolute-paths
は false のままで問題ありません。
Tomcat の開始
Tomcat を起動して RFS が動作していることを確認します。
📁 logs
配下に 📄 rfs.log
ファイルが生成されていればOKです。
3. MCの設定
MC の 設定
> 一般
> ロボット ファイル システムサーバー
画面から、ロボットが接続する RFS サーバのURL を設定します。
その他の環境設定
オンラインヘルプによると 3 が、RFSサーバローカルでの移動であれば、「400MB強のファイルをロボットの中に読み込み、そのまま別のRFSフォルダを指定して書き出す」ことができたので、この制限がどこに聞いてくるのかはちょっと不明です。4ロボット ファイル システムにアップロードできるファイルの最大サイズは 100 MB です。
また、RFSは Tomcat上で動作する仕組みなので、同様に maxPostSize
の設定が必要なのかな?とも思いましたが、server.xml
内の値を 1KB に設定してみても、10MB以上のファイルを RFS で読み書きできたので、設定ファイルの編集は必要ないでしょう。(マニュアルにも記載なかったので)
<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8444"
maxParameterCount="1000"
maxPostSize="1024" … ★
/>
ロボットファイルシステムのレポジトリ設定
RFS の環境設定が完了したので、具体的にロボットから利用するためのレポジトリ設定をしていきます。
RFS 自体はファイルアクセスのための窓口にすぎず、実際に誰がどの範囲で、どこにアクセス可能かについては、プロジェクトごと・ロボットごとにリポジトリを設定することで、以下のように権限のあるロボットだけが安全に指定のリソースにアクセスできるようになります。
まぁ、このあたりの交通整理が面倒臭いと言われがちではありますが、一定の規模を超えたロボットの基盤を運用するのであれば、必須の機能だと思います。
それでは、以下順番にレポジトリを設定していきます。
- 一般情報:RFSのリソース定義情報一式
- ロボットマッピング:RFS リソースにアクセス可能なロボットの指定
- 認証されたアクセストークン:RFS リソースにアクセス可能なロボットや環境の設定
ロボットマッピング と 認証されたアクセストークン については、どちらかを設定すればよく、両方設定する必要はありません。
また、一般情報 の設定において プロジェクト範囲
のチェックボックスを「ON」にすることで、指定したプロジェクト内の全ロボットから当該 RFSリソースにアクセスが可能となります。
一般情報の設定
項目 | 内容 |
---|---|
プロジェクト | プロジェクトを指定します。 |
プロジェクト範囲 | RFSを指定したプロジェクト内の全てのロボットと共有する場合にチェックを入れます。 |
ファイルシステム名 | 任意の名称。ロボット内から指定する際に使用する文字列。 |
パス | ファイルシステム上の指定場所 。 data-path で指定したパスを起点に指定します |
ユーザー名 | リモートドライブやFTPサーバなど、指定した パス へのアクセスに認証が必要な場合に設定。(通常は空でOK) |
パスワード | 同上 |
ロボットマッピング
指定したプロジェクト内のロボット一覧の中から、当該 RFS へのアクセスを許可するロボットを選択します。
認証されたアクセストークン
レポジトリ
> ロボット
から MC に登録されたロボットの「リソース アクセストークン」をコピーして、アクセスコードを設定します。
もしくは、ロボット開発中に DS から RFS へアクセスする場合には、DS のメニューバーから ヘルプ(H)
> 製品について …
を選択し、表示されるダイアログ内の「Design Studio アクセストークン」の中の文字列をコピーしてアクセスコードを設定します。
ロボットからの利用設定
ロボットから RFS を利用する形態には 2 つの種類があります。
- サーバ local(サーバ上)で集中処理をする
- DAS (クライアント端末上)で分散処理をする
本項ではロボットからの疎通確認が目的なので、より簡単に試せる サーバ local
からの処理を実施します。
ロボットファイルの作成
- ロボットファイルを開き、
ファイルシステム
>ファイルの読み取り
を選択します。 -
ファイル アクセス
を 「RFS 経由」に変更し、ファイル名に MC のリポジトリで設定した名前
と読み込むファイル名
を/
(スラッシュ)を区切り文字として設定します。 -
変数
には バイナリ型 の変数を指定します。
必要なデータを設定したら、ステップオーバーし、変数にファイルがバイナリ値として設定されれば完成です。
まとめ
セキュリティの重要性が叫ばれている昨今、エンタープライズ用途におけるBizRobo!のいち推し機能はRFSだと思っています。何気にRFSを通じたファイルのやり取りは全て rfs.log
内に監査ログとして記録されますし5、運用者目線ではログが残るというのは大きいですよね。
運用観点で RFSは有用な仕組みですが、ロボットを作るだけの人にとっては「単なる面倒ごとの一つ」に映ってしまうかもしれません。
とはいえ、ロボットの利用規模が増えるほど外部ファイルのロボットからの取り扱いは複雑になり、アクセス権限含めどこか一か所で管理したいなぁ。。と思うようになると思います。 net use
を前提とした開発も大変でしょう。
導入当初から必要な機能ではないだけに途中から導入しようとすると最初は苦戦するとは思いますが、是非長い目で見て有用なものと考え、徐々にでも使ってもらえればと思います。
-
自己署名証明書を使用した HTTPS 経由の Robot File System へのアクセスはサポートされていません。 ↩
-
false にした場合、MC のレポジトリに設定したパスのフォルダが生成されないため、手動で作成しない限りはロボット実行時にエラーになります。敢えてレポジトリからの登録を制限したい場合以外に必要性は感じられません。 ↩
-
その後開発チームに確認したところ、
現在(少なくとも v11.3.0.2)においてはこの制限は撤廃しているということで、今後参照のオンラインドキュメントに関しても修正していく.
とのことでした。 ↩ -
ちょっとした検証の目的で、
BOX
に対して FTPS接続で 以下400MB強のファイルをRFS経由でアップロードしてみましたが、問題なく処理できてしまいました。
ちなみに、BOXへのftps接続には990
ポートと21
ポートが用意されていますが、RFSにおいては21
ポートを利用してください。その際、間違ってプロトコルをftp://
にしないよう気を付けましょう。ftps://
にしないと暗号化されません。 ↩ -
ログの例(以下)
rfs.log2023-06-06 08:47:51 INFO SessionManager:140 - Session created 559BCB7FF281FD682128EFAF5BADFBA5 2023-06-06 08:47:51 INFO SessionManager:140 - Session created 3747144CB990571C70D493B56A470648 2023-06-06 08:47:51 INFO SessionManager:329 - File system session '3747144CB990571C70D493B56A470648' created 2023-06-06 08:47:51 INFO RFS:39 - [Audit] OK Read C:\RFS\週報\aa.msi: main_BridgePJ (3747144CB990571C70D493B56A470648) 2023-06-06 08:48:00 INFO RFS:39 - [Audit] OK Write C:\RFS\共有レポート\bridge.msi: main_BridgePJ (3747144CB990571C70D493B56A470648) 2023-06-06 08:48:00 INFO SessionManager:359 - Explicit deletion of session 3747144CB990571C70D493B56A470648 2023-06-06 08:48:00 INFO SessionManager:151 - Session deleted 3747144CB990571C70D493B56A470648 2023-06-06 08:49:50 INFO SessionManager:151 - Session deleted 559BCB7FF281FD682128EFAF5BADFBA5