みなさん、こんにちは。サニービュー事業部の小寺です。
本日のキーノートで「AWS Step Functions Distributed MAP」として新機能が発表されました。

https://aws.amazon.com/jp/blogs/aws/step-functions-distributed-map-a-serverless-solution-for-large-scale-parallel-data-processing/

AWS Step Functions Distributed MAPとは

AWS Step Functionのフローは、半構造化データのオンデマンド処理など、大規模な並列ワークロードのオーケストレーションのサポートを拡張します。
Step Function のマップ状態は、データセット内の複数のエントリに対して同じ処理ステップを実行します。既存のマップ状態は、一度に 40 の並列反復に制限されています。
この制限により、データ処理ワークロードをスケーリングして数千 (またはそれ以上) の項目を並行して処理することに課題がありました。
高度な並列処理を実現するには、既存のマップ状態コンポーネントに複雑な並列を実現するための、処理を実装しないといけなく、複雑な開発が必要でした。

新しい分散マップ状態により、Step Functionsに記述して、サーバーレス アプリケーション内で大規模な並列ワークロードが調整できるようになりました。
Amazon Simple Storage Service (Amazon S3) に保存されているログ、画像、.csv ファイルなど、何百万ものオブジェクトを反復処理できるようになりました。
新しい分散マップ ステートは、最大 1 万の並列ワークフローを起動してデータを処理できます。Step Functions でサポートされている任意のサービス API を作成してデータを処理できますが、通常は、普段お使いの任意のプログラミング言語で記述されたコードを使用して Lambda 関数を呼び出してデータを処理することができます。

Step Functions 分散マップは、最大 10,000 回の並列実行の最大同時実行をサポートします。
これは、他の多くの AWS サービスでサポートされる同時実行をはるかに上回る回数です。
分散マップの最大同時実行数機能を使用して、ダウンストリーム サービスの同時実行数を超えないようにすることができます。他のサービスと連携する場合、考慮事項として2点あるので要注意です。
1つ目は、アカウントのサービスでサポートされる最大同時実行数。 2 つ目は、バースト率とランピング率です。
これにより、最大の同時実行性をどれだけ迅速に達成できるかが決まってきます。

例えば、Lambdaを使った場合、関数の同時実行数は、特定の時間にリクエストを処理するインスタンスの数です。
Lambda のデフォルトの最大同時実行クォータは、AWS リージョンごとに 1,000 です。Service Quotaから上限緩和が可能です。 トラフィックの初期バーストの場合、リージョン内の関数の累積同時実行数は、リージョンごとに異なる 500 から 3000に達する可能性があります。
バースト同時実行クォータは、リージョン内のすべての関数に適用されます。

旧 map state flow 新 map state flow
Sub workflows Runs a sub-workflow for each item in an array. The array must be passed from the previous state.Each iteration of the sub-workflow is called a map iteration, and its events are added to the state machine’s execution history. Runs a sub-workflow for each item in an array or Amazon S3 dataset.Each sub-workflow is run as a totally separate child execution, with its own event history.
Parallel branchesMap iterations run in parallel, with an effective maximum concurrency of around 40 at a time.Can pass millions of items to multiple child executions, with concurrency of up to 10,000 executions at a time.
Input sourceAccepts only a JSON array as input.Accepts input as Amazon S3 object list, JSON arrays or files, csv files, or Amazon S3 inventory.
Payload256 KBEach iteration receives a reference to a file (Amazon S3) or a single record from a file (state input). Actual file processing capability is limited by Lambda storage and memory.
Execution history25,000 eventsEach iteration of the map state is a child execution, with up to 25,000 events each (express mode has no limit on execution history).

対象リージョン

以下のリージョンでGAとなっています。

・US East (Ohio, N. Virginia)
・US West (Oregon)
・Asia Pacific (Singapore, Sydney, Tokyo)
・Canada (Central)
・Europe (Frankfurt, Ireland, Stockholm)