IICSでコマンドタスクの引数にファイルリスナが検知したファイル名を渡す

コマンドタスクで実行するセキュアエージェントサーバー上のシェルスクリプトに、ファイルリスナで検知したファイルの情報を渡してみました。
2023.03.22

データアナリティクス事業本部の鈴木です。

今回は、タスクフローをファイルリスナから起動した際に、起動のトリガーとなったファイル名をタスクフロー上でコマンドタスクに引数で渡す方法を試してみたのでご紹介します。

やりたいこと

タスクフローではコマンドタスクを使い、セキュアエージェントサーバー上のシェルスクリプトを実行することが可能です。また、タスクフローはファイルリスナから起動することができます。

普通、ファイルリスナの監視対象になっているファイル名はそのときによって変わる可能性があるので、そのファイルに対してシェルスクリプトから処理を実行したい場合は、上手くファイル名をシェルスクリプトの引数に渡してやる必要があります。

タスクフローをファイルリスナから起動した際に、起動のトリガーとなったファイル名をタスクフロー上でコマンドタスクに引数で渡す方法を確認できれば、これにより、検知したファイル名に対して、シェルスクリプトから処理を行うことができます。

リソースの準備

IICSリソースの準備

検証では以下のようにタスクフローとファイルリスナを一つずつ作成しました。

作成したリソース

タスクフローは、以下のようにコマンドタスクだけを設定した簡単なものを準備しました。

タスクフローの設定

ファイルリスナをトリガーにして、タスクフローを実行するようにしました。

トリガー設定

コマンドタスクの設定の詳細は後述します。

ファイルリスナは以下のように、検証用S3バケットに、/inputで終わるキープレフィクスでアップロードすると検知するように設定し、開始しておきました。

ファイルリスナの設定

シェルスクリプトの準備

セキュアエージェントサーバー上に、コマンドタスクから実行するシェルスクリプトを準備しました。

コマンドタスクから1つ引数を受け取り、同じディレクトリのファイルに書き込むシェルスクリプトを準備し、例えば今回の検証環境だと、/home/infa/cm_nayuts/に配置しました。

コマンドタスクからシェルスクリプトに、第一引数としてトリガーとなったファイル名を渡し、確かに名前が渡っていることを確認します。

test.sh

echo $1 > home/infa/cm_nayuts/test.txt

シェルスクリプトのパスはコマンドタスクで設定するので控えておきます。また、test.shにはセキュアエージェントから実行するための権限があることを確認しておきました。

やってみる

コマンドタスクの設定

コマンドタスクでは、スクリプトファイル名にセキュアエージェント上のシェルスクリプトのファイルパスをそのまま記載しました。入力引数の方は"で囲って、ファイルリスナで検知したファイルの名前を"{$input.sample_fl[1]/arrivedFiles[1]/name}"という風に指定しました。スクリプトファイル名・入力引数は共にコンテンツを選択しています。

コマンドタスクの設定

コンテンツの場合の記載のフォーマットは、以下の公式ドキュメントのコマンドタスクステップのページに記載されています。

  • https://docs.informatica.com/ja_jp/integration-cloud/cloud-data-integration/current-version/_taskflows_cloud-data-integration_current-version_ditamap/GUID-90D4E9B7-1FBA-4E47-B1F2-CB6C5F5930F3/GUID-B9258137-0DCB-4709-8895-6C6A01D43D94/GUID-E4F6EC72-11E8-4EF7-936F-8BE593FF2905.html

入力引数に設定する、ファイルリスナで検知したファイルの名前は、入力欄右側の(x)ボタンを押すと、以下のようにトグルを開いて入力することができます。

ファイル名の生成

ドキュメントによると、スクリプトファイル名はコンテンツの場合、実行するスクリプトへのパスを入力します。入力引数はコンテンツの場合、各引数は二重引用符(")で囲み、カンマ(,)を使用して区切る必要があります。

実行して結果を確認する

ファイルリスナを開始し、監視先にsample_data.csvをアップロードしました。

モニターからタスクフローが正常に実行されたことを確認しました。

正常終了の確認

最後に、セキュアエージェントサーバー上から、できたファイルの中身を確認して、アップロードしたファイルの名前が書かれていることを確認しました。

できたファイルの中身

これで確かに、コマンドタスクの引数経由で、ファイルリスナで検知したファイル名が渡せていることが分かりました。

最後に

今回はタスクフローをファイルリスナから起動した際に、起動のトリガーとなったファイル名をタスクフロー上でコマンドタスクに引数で渡す方法を試してみました。

慣れてしまうと簡単ですが、初めての場合はパスと引数の設定についてドキュメントをまず確認してから行うことになります。試してみたい方の参考になれば幸いです。