ForgeVision Engineer Blog

フォージビジョン エンジニア ブログ

Step Functions の Pass ステート で 組み込み関数を使う場合の注意点とその回避方法

本記事の内容

こんにちは、AWSエンジニアの山口です。

最近は業務でもStep Functionsを使うことが多くなってきました。非同期で疎結合なワークフローを組み込むときに便利なStep Functionsですが、ステートに渡すデータ加工を行うロジックを実装する場合、Passステートと組み込み関数を利用するシーンが多いかと思います。

視覚的にステートマシンを構成できる便利なWorkflow StudioからPassステートと組み込み関数を実装する場合には注意点があります。

今回は、組み込み関数 States.MathAdd を例にその注意点と回避方法を書いていきます。

本記事のサマリ

  • Workflow Studioは、視覚的であるが故に設定する箇所を把握しないと勘違いを起こしやすい
  • Parameterフィルターで定義しなければならない組み込み関数は、ResultPath フィルターと OutputPath フィルターでは処理されない
  • Passフィールドは、デフォルトの状態で出力タブの結果フィールドが視覚的に設定を入力できそうな箇所として目に入るが、それは Parameterフィルターではない
  • Parameterフィルターで定義しなければならない組み込み関数は、入力タブの「Parameters を使用して入力を変換」にチェックを入れて設定する



本文はここから

今回は、Inputデータの $.number1 と $.number2 を足し算し、$.countとして次のステートに渡すPassステートを例として実装します。

Inputデータはこちら。

{
  "number1": 4,
  "number2": 6
}

この処理を実現するために組み込み関数 States.MathAdd 使うと下記のコードになります。

{
  "count.$": "States.MathAdd($.number1, $.number2)"
}

では、Workflow StudioからこちらのコードをPassステートに設定してみます。このとき、入力タブの「Parameters を使用して入力を変換」にチェックを入れ、表示されたエディタにコードを設定するようにしてください。

注意

出力タブに一見するとコードを設定できそうな、結果というフィールドがありますが、こちらにコードを設定しても動作しないので注意してください。

試しに、結果フィールドにコードを設定するとどうなるのか、データを渡してステートマシンを起動してみます。

実行結果を確認します。

Passステートで処理された結果、出力されたデータは "count.$": "States.MathAdd($.number1, $.number2)" と定義した内容がそのまま出力されており、組み込み関数が動作せず、期待通りの動作になっていないことがわかります。

出力タブの結果フィールドは、注意事項として「仮想タスクの出力として扱われます。ResultPath フィルターと OutputPath フィルターで操作できます。」という記載がある通り、Parameterフィルターで定義しなければならない組み込み関数は処理されません。

注意事項は以上です。



それでは、入力タブの「Parameters を使用して入力を変換」にチェックを入れ、表示されたエディタにコードを設定した状態に戻って、動作確認をしてみましょう。

Inputデータの $.number1 と $.number2 を足し算をした結果が$.countとして渡されています。入力タブの「Parameters を使用して入力を変換」にチェックを入れ、表示されたエディタにコードを設定すれば組み込み関数が動作することが分かりました。

注意事項と回避方法のまとめ

  • Workflow Studioは、視覚的にステートマシンを構成できる便利な機能ですが、視覚的であるが故に設定する箇所を把握しないと勘違いを起こしやすいという性質があります
  • Parameterフィルターで定義しなければならない組み込み関数は、ResultPath フィルターと OutputPath フィルターでは処理されません
  • Passフィールドは、デフォルトの状態で出力タブの結果フィールドが視覚的に設定を入力できそうな箇所として目に入りますが、Parameterフィルターではないことに注意が必要です
  • Parameterフィルターで定義しなければならない組み込み関数は、入力タブの「Parameters を使用して入力を変換」にチェックを入れ、表示されたエディタにコードを設定しましょう

この記事が、Step Functionsを活用する方のお役に立てば幸いです。