IICS CDIのタスクフローでパラメータファイルを使用する

2020.12.10

こんにちは。データアナリティクス事業本部の松村です。
本エントリはクラスメソッド インフォマティカ Advent Calendar 2020のエントリです。

ジョブの設定値を外部から与える

Informatica Intelligent Cloud Services(以降IICS)のCloud Data Integration(以降CDI)では、マッピングにおける設定内容をパラメータファイルに記述することができます。開発環境/本番環境で設定が異なる箇所をパラメータファイルに集約することで、マッピングの内容を一切手直しすることなくそのまま本番環境にデプロイ、といったことなどができるようになります。
パラメータファイルはマッピングだけではなく、タスクフローでも参照することができますので、今回はその方法をご紹介します。例として、通知タスクの宛先メールアドレスをパラメータファイルから取得してみます。

パラメータファイルの作成

まずはパラメータファイルにメールアドレスを記載します。規定のパラメータファイルの置き場所はSecure Agentのインストールディレクトリ配下のapps/Data_Integration_Server/data/userparametersディレクトリですが、個別に設定変更できますんので、Secure Agentの実行ユーザがアクセスできれば他のディレクトリでも構いません。

parameter.txt

[Global]
$$notify_to=<mailaddress>

パラメータファイルの書式についての説明は省略します。マニュアルのこのあたりをご覧ください。

パラメータファイルの要件

マッピングでパラメータを定義する

今回はタスクフローの話のはずでしたが、それでもマッピングを抜きにすることはできません。というのも、タスクフローでは直接パラメータファイルを参照する方法があるわけではなく、まずはマッピングでパラメータファイルの中身を読み取ってから、それを後続タスクに引き継ぐ、という形になるためです。したがって、タスクフロー中でマッピングタスクよりも前に実行されるタスクでは、パラメータファイルの設定値を使用することができません。もしそのようなタスクで設定値を直接埋め込みたくない場合は、タスクフロー呼出のパラメータを設定して、REST APIなどでパラメータを制御する必要があります。この方法はまたの機会にご紹介します。

マッピングでパラメータファイルを読み取るためには、ファイルに記載したのと同じ変数名のパラメータを設定する必要があります。デザイナ画面の右上に(x)という形のアイコンがありますので、それをクリックします。

『入力-出力パラメータ』の右側の+アイコンをクリックします。

『名前』にパラメータファイルの変数と同じ名前($$は外してください)を設定します。『データ型』はstringのままで、『精度』(stringの場合は文字数を表します)にはパラメータファイルに設定したメールアドレスが収まる値を設定します。ひと通り設定できたら『OK』ボタンをクリックします。

『入力-出力パラメータ』にパラメータが追加されました。このパラメータをどのパラメータファイルから読み取るかというのは、マッピングタスクにて設定します。マッピングにおける準備は以上なので、『保存』ボタンをクリックしてマッピングを閉じます。

マッピングタスクでパラメータファイルを指定する

次にマッピングタスクでパラメータファイルを指定します。新しいマッピングタスクを作成してここまでに作成したマッピングを指定するか、マッピングタスク作成済みの場合はそれを編集します。マッピングを指定したら『次へ』ボタンをクリックします。

この画面では、マッピングで作成したパラメータが表示されます。今回の用途では何も編集する必要はないので、そのまま『次へ』ボタンをクリックします。

最後に、パラメータファイルの置き場所を指定します。パラメータファイルはAmazon S3などのクラウドストレージに置くこともできますが、今回はSecure Agentがインストールしているマシンに作成してありますので、パラメータファイルの場所は『ローカル』を選択します。
作成したパラメータファイルを配置したディレクトリ(省略した場合はインストールディレクトリ配下のapps/Data_Integration_Server/data/userparametersディレクトリを参照します)とパラメータファイル名を指定します。指定したら、『完了』ボタンをクリックして、マッピングタスクの編集を終了します。

タスクフローでパラメータを指定する

いよいよタスクフローでパラメータを指定します。
繰り返しますが、タスクフローでパラメータファイルの値を参照するためには、まずマッピングタスクでパラメータファイルの内容を読み取る必要があります。そのため、データタスクで先ほど編集したマッピングタスクを指定し、その後ろに通知タスクを配置します。通知タスクでは、メールの宛先アドレスに読み取ったパラメータを指定します。

注意として、既存のタスクフローに組み込まれているマッピング/マッピングタスクにパラメータを追加した場合は、データタスクでそのマッピングタスクを選択し直してください(一旦他のマッピングタスクに変更してから元に戻す、ではなく、同じものを選んでOKです)。
こうしないと、タスクフローで新しいパラメータを参照できるようになりません。正確にはデザイン上はパラメータを参照させることができるものの、実際にタスクフローを実行すると新しいパラメータに何もセットされないという状況になります。
このことはKBにも記載されています。

New parameters added in a mapping are not reflected correctly in Taskflows in IICS Data Integration

話を戻して、通知タスクの設定をします。『詳細』タブの『電子メールの宛先』直後にあるドロップダウンから、フィールドを選択します。するとその右側が『クリックしてフィールドを選択』というドロップダウンに変わるので、更にそれをクリックします。
クリックすると、設定可能なものがツリーで表示されます。パラメータファイルを読み込むマッピングタスクの名前ー『InOut Parameter』と展開し、その配下にあるパラメータの名前(今回はnotify_to)を選択します。

すると、選択したパラメータが設定されます。これで準備ができましたので、タスクフローを保存して実行します。

動作結果

実行した結果は、メニューの『マイジョブ』などから参照できます。実行されたジョブの一覧が表示されるので、先ほど実行されたタスクフローを選択します。

この画面では、タスクフローのステップごとの実行結果がデザイナと同様のGUIで表示されます。通知タスクの詳細を見てみると、『Email To』がパラメータの名前ではなく、パラメータファイルで記述された値に置き換わっていることが確認できます。

また、この宛先に実際にメールも届きました。バッチリですね。

最後に

タスクフローの通知タスクの宛先アドレスをパラメータ化してみました。同じ方法で他の箇所でもパラメータが使えますので、いろいろ応用が効きそうです。
今回は省略しましたが、REST APIなどで引数を指定することで、外部から与えられた設定値をタスクフローの先頭から使用する方法も今後ご紹介したいと思います。