IDMC CDI で作成したタスクを、コマンドラインから簡単に実行する

## この記事は インフォマティカ [Advent Calendar 2022 Day 22](https://qiita.com/advent-calendar/2022/informatica) の記事として書かれています。

インフォマティカのデータ連携ソリューションである Cloud Data Integrationサービス(以下、CDI)で開発したETLジョブを、ジョブ管理システムにて任意のタイミングで実行したい場合があります（例：ジョブネットの一部として実行する）。

CDIにはファイルリスナーというコンポーネントが有り、指定したディレクトリにファイルが生成された時点でタスクを実行することが出来ます。シェルコマンドで該当ディレクトリにファイルを作成することによって、任意の時点でタスクを実行することが出来ますが、直感的でないですし、セキュリティを確保するためリモートサーバーでファイルを自由に作成できない場合もあります。また、実行結果（成功/エラー)を取得するためにも一工夫必要です。

CDIのタスク起動にREST APIを利用することが出来ますが、もっと簡便にタスクの実行(ジョブ実行)と結果取得を行う方法があります。それが RunAJob ユーティリティです。

RunAJobユーティリティはSecureAgentを構成時に、`<Secure Agent installation directory>\apps\runAJobCli`にインストールされます。また、インフォマティカ・ネットワークのアカウントをお持ちの方は、[こちらから](https://infa.my.salesforce.com/sfc/dist/version/download/?oid=00D41000000dqX7&ids=0686S00000O8ECj&d=%2Fa%2F6S000000VKjH%2FOipoXdhUWFsfkgTsEQqd54gqecpdI1PmP0PkUML7Yho&asPdf=false)ダウンロードが可能です。

RunAJobユーティリティは、Informatica Intelligent Cloud Services REST APIを呼び出してジョブを実行するJARファイルを実行します。ジョブが完了すると、次のようなジョブの詳細が返されます。

•ジョブを開始したユーザー。
•ジョブが開始された時刻。
•ジョブの実行ID。

RunAJobユーティリティを使用するには、以下の二つの設定ファイルを用意する必要があります。
•restenv.properties。ログイン資格証明とジョブポーリング動作を指定します。
•log4j2.properties。ログファイルに返す詳細のレベルを指定します。
なお、テンプレートとして、Restenv_default.properties, Log4j2_default.propertiesをお使い下さい。
詳細はマニュアルを参照頂くとして、restenv.propertiesの以下4項目は設定頂きたいです。
|パラメータ|説明|
|---|---|
|baseUrl|ベースURL。デフォルトはhttps://dm-us.informaticacloud.com/ma です。日本のPodをご利用の方は、ベースURLをhttps://dm-ap.informaticacloud.com/ma と指定下さい。|
|username|Informatica Intelligent Cloud Servicesのユーザー名|
|password|Informatica Intelligent Cloud Servicesのパスワード。または暗号化されたパスワード文字列。|
|use.encryption|暗号化されたパスワードの使用を有効にします。暗号化されたパスワードを使用するには、値をtrueに設定します。|

暗号化されたパスワードを利用するためには、暗号化パスワードを作成します。作成するには、次のいずれかのコマンドを使用します。
./cli.sh encryptText -t \<password\>

その他の準備として、JARファイルを実行するための環境変数(JAVA_HOMEやPATH)も合わせて設定します。

では、実際の実行例を見てみます。Restenv.propertiesファイルにユーザ名、パスワードを記述済みで、コマンドラインにて実行するタスクタイプ(-t)、フォルダパス(-ft)、タスク名(-n)を指定して実行するケースを例をご紹介します。実行対象は、フォルダ "Advent" に格納されている、マッピングタスク "Task_RunAJob_Local" です。

![RunAJob_TaskFrame.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984401/7f278f88-8afb-dfa0-aebb-bac46a2525e6.png)


実行結果の抜粋
```
$ ./cli.sh runAJobCli -t MTT -fp Advent -n Task_RunAJob_Local

482  [main] INFO  com.informatica.saas.utilities.plugins.EncryptTextPlugin  - Keystore : key-store.txt
578  [main] INFO  com.informatica.saas.plugins.RestClientPlugin  - Welcome to Informatica CLI tool
581  [main] INFO  com.informatica.saas.plugins.RestClientPlugin  - Based on your configuration CLI tool will assume you are working in Florence(IICS) mode
https://dm-us.informaticacloud.com/ma/api/v3/InternalLogin
 
<中略>
 
18449 [main] INFO  com.informatica.saas.utilities.task.ICSTask  - Job Status:  Success
18449 [main] INFO  com.informatica.saas.utilities.task.ICSTask  - Details: ID: font 01064OC1000000002V38 run Id: 11 Start Time: 2022-12-19T03:29:43.000Z End Time: 2022-12- 19T03:29:52.000Z Source Rows: 6, Target Rows: 6 Failed Rows: 0
18449 [main] INFO  com.informatica.saas.utilities.plugins.RunAJobPlugin  - Mon Dec 19 17:29:58 JST 2022 Task XXXXXXXXXXXXXXXXXXXX with run Id 11 exited from activity monitor
https://dm-us.informaticacloud.com/ma/api/v3/Logout
18961 [main] INFO  com.informatica.saas.delegate.florence.FlorenceUserDelegate  - Logged OUT, IDS-SESSION-ID=XXXXXXXXXXXXXXXXXX
18964 [main] INFO  com.informatica.saas.utilities.plugins.UserHandler  - Logged out at Mon Dec 19 17:29:58 JST 2022
18964 [main] INFO  com.informatica.saas.utilities.plugins.RunAJobPlugin  - Main returning: 0
```
<中略>後の、行頭が"18449で始まる2行のメッセージに表示されている`job Status: Success` と`Source Rows: 6, Target Rows: 6 Failed Rows: 0`から「ソースから6行読み込み、ターゲットに6行を書き込む処理が正常処理された」事が分かります。RunAJobユーティリティから実行した結果は、ブラウザ画面の"マイジョブ"でも確認できます。メッセージの中で run ID=11と表示されていますが、これはマイジョブ画面で表示された赤枠の部分に表示されています。
![RunAJob_Result.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984401/ced3f5e6-a424-e790-d5f0-b9c92c6219f1.png)

そして、RunAJobユーティリティ実行時メッセージの最終行に、ジョブ実行結果が示されています。
`Main returning: 0`
この"0"は成功を示します。
以下にジョブステータスコードリストを示します。

|コード|意味|
|---|---|
|-1|例外|
|0|成功|
|1|警告|
|2|待機なし|
|3|失敗|
|4|タイムアウト|
|5|エラー|
|6|実行中|
|7|起動失敗|

このコードはRunAJobユーティリティの実行結果コードとして取り扱えます。RunAJobユーティリティを実行した後、Linuxで変数$!を参照するとジョブステータスコードが格納されていることがわかります。
タスクの完了までコマンド完了を待機してタスクの実行結果を確認したい場合は、-wオプション（待機オプション）を指定するとタスクが完了するまでRunAJobコマンドの完了を待機します。

## まとめ
CUI、シェルスクリプトでREST APIを呼び出し慣れている方にはあまりメリットが感じられないかもしれませんが、そうでない方々には、お手軽にタスクを実行し、結果を把握できるrunAJobユーティリティを使って、楽をして頂きたいです。設定できるパラメータやログレベルなどはIICSのオンラインマニュアルに詳細が記載されていますのでご参照下さい。

なお、RunAJobユーティリティを使用するには、IICSのOrgでRunAJobCliパッケージが有効になっている必要があります。IICS管理者サービスのライセンス画面でご確認頂けます。
![RunAJob_Lic.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984401/070b2522-5a87-aabf-4c0c-7df0d0c0486f.png)
当然ですが、RunAJobユーティリティユーティリティを使用してタスクフローを実行するには、タスクフローがパブリッシュされる必要があります。また、Taskflow Designerの［許可されたユーザー］および［許可されたグループ］に値を含める必要があります。ご注意下さい！