今回の内容
AWS Step Functions(以下「Step Functions」)のファイル処理系Mapアクション(CSV/JSONファイルなど)における、「同時実行数」関連の設定項目について調べてみました
概要
こんにちは。
Step Functionsで(S3バケットなどにある)、下図のようなCSVやJSONファイルを処理するワークフローを書くことがあるかもしれません(Step Functionsのテンプレートにもあるくらいですし)

その際、各アクションに「同時実行数」に関して、以下の設定項目が用意されています。
親アクション(File Analysys)
- バッチあたりの最大項目数
- 同時実行の制限
子アクション(Map)
- 同時実行数の制限を設定
これらについて、詳細と実際の挙動が良くわからなかったので、調べてみました。
親アクション
バッチあたりの最大項目数
これは、「1回の処理(=子アクションにデータを渡す処理)につき、CSVやJSONファイルから何個のデータを取得するか」を意味します。
例えば、100個のデータがあるCSVファイルについて、「バッチあたりの最大項目数」を10に設定した場合、「子アクションにデータを渡す処理」は10回発生することになります。
なおこの「子アクションにデータを渡す」処理は、ワークフロー全体で1回に処理できるデータ個数(後述)を満たすまで、ずっと続けられます。
同時実行の制限
これは、子アクション(上図で言えば「Map」内の処理)を何個同時に実行するか、を指します。
言い換えれば「子アクションを何並列で実行するか」となります。
例えば「バッチあたりの最大項目数」を5に設定した場合、Map内の処理を5並列同時に実行します。
重要なのは、「ワークフロー全体で1回に処理できるデータ個数 = バッチあたりの最大項目数 * 同時実行の制限」 という事です。
なので先ほどの100個のデータがあるCSVファイルについて、
- 「バッチあたりの最大項目数」を10に設定
- 「同時実行の制限」を5に設定
した場合(※1)、ワークフロー全体で1回に処理できるデータ個数は10 * 5 = 50個となりますので、ワークフロー全体を2回実行することで全データ処理を完了できます。
子アクション
同時実行数の制限を設定
これは親アクションの「同時実行の制限」と同じで、孫アクション(=上図で言うLambda実行)を何個同時に実行するか(=何並列で実行するか)になります。
例えば親アクションで(※1)を設定した状態で「同時実行数の制限を設定」を2に設定した場合、10個のデータを2個並列実行で処理するので、各孫アクションにおいて、Lambda実行は5回実行されます。
なお注意点として、ここでの「同時実行数の制限を設定」の値は「ワークフロー全体で1回に処理できるデータ個数」には影響しません。
※親アクションの「バッチあたりの最大項目数」を超える値は設定できないので。例えば「バッチあたりの最大項目数」を10の状態で「同時実行数の制限を設定」を1にしようが10にしようが、ワークフロー全体で1度に処理できる個数は10個で変わりません。
図解
上記を図でまとめると、下図の通りになります。

まとめ
以上、Step Functionsのファイル処理系Mapアクションにおける「同時実行数」の設定項目についての詳細と挙動でした。
自分が業務で触っていてちょっとややこしかった部分だったので、自分の理解の復習もかねて、このブログを書きました。
もし他の方でもこの辺がややこしい、と思っている方がいらっしゃったら、その方にとって参考になれば幸いです。
では、今回はこの辺で