[速報]Step Functionsで大量データの並列処理が可能に!Step Functions Distributed MapがGAされました!# reInvent

2022.12.02

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

速報です! 本日の Werner Vogels キーノートで、Step Functionsで大規模な並列処理を可能にする、「Step Functions Distributed Map」が発表されました!

これまで

Step FunctionsにはもとよりMap並列処理を提供機能がありましたが、並列処理の同時実行数は最大40回という制限がありました。

Step Functions Distributed Mapで何ができるのか

Mapは上記の制限により、数千件以上の項目を並列でタイムリーに処理することは困難でしたが、「Step Functions Distributed Map」により大規模な並列ワークロードの処理が可能になりました!!

「Step Functions Distributed Map」では、最大1万回の並列ワークロードを起動することができます。並列で実行できる処理には、Step Functionsがサポートする全てのAPIを使用することができますが、AWSとしてはLambda関数を呼び出してプログラミング言語でS3に置かれた大量データを処理する使い方を想定しています。

本機能は、標準ワークフローでもExpressワークフローでも使用可能です。

注意点

最大1万回のというStep Functions Distributed Mapの同時実行数は他のAWSサービスがサポートする同時実行数を大きく上回っています。
AWSに限らず外部サービスに接続する際も、Distributed Mapの最大実行数を設定し、下流サービスの同時実行数を超えないようにする必要があります。

たとえば、並列でLambdaを使ってデータを処理する場合も、Lambdaのデフォルトの同時実行数は1000回なので、上限緩和申請をしたりクォータを意識して使う必要がありますね。

MapとStep Functions Distributed Mapの比較

既存のMapとの比較です。

Map Destributed Map
最大同時実行数 40回 10000回
インプット 前のステートから渡されたJSONの配列のみ S3 オブジェクトのリスト
JSONの配列またはファイル
CSVファイル
S3 インベントリ
ペイロード 256KB ファイルへの参照や、単一のレコードを受け取る
SFn側では制限はないが、実際にはLambdaのストレージやメモリの上限がある
実行履歴 ステートマシン全体で25000イベント 子プロセス毎にそれぞれ25000イベント
expressモードでSFnを実行する場合は実行履歴に制限なし

その他の並列処理サービスとの使い分け

AWS GlueやAmazon EMR、Amazon S3 Batch Operationsといった同じく並列処理を行うサービスが存在します。

AWS GlueやAmazon EMRはデータサイエンティストやデータエンジニアが、大量データを処理するユースケースで使用します。
Step Functionsはゼロスケールで、API Gatewayと連携してHTTPでリクエストを受け付けたり、LambdaやSQSなどと組み合わせイベントドリブンなアーキテクチャと相性が良く、アプリケーションにサーバレスなデータ処理を追加する目的で使用されてきました。そこで並列処理により大量データを高速に捌けるようになったという点が、今回のアップデートの嬉しい点です。

使用できるリージョン

  • バージニア (us-east1)
  • オハイオ (us-east-2)
  • オレゴン (us-west-2)
  • シンガポール (ap-southeast-1)
  • シドニー (ap-southeast-2)
  • 東京 (ap-northeast-1)
  • カナダ (ca-central-1)
  • フランクフルト (eu-central-1)
  • アイルランド (eu-west-1)
  • ストックホルム (eu-north-1)

まとめ

S3に格納されたファイルを元にデータを処理するユースケースは、アプリケーション開発をしていて良くあります。これまで、大量データを扱う場合Lambdaでは実行時間やメモリ、ストレージなどのクォータのためFargateを選んだり、SQSでバッファリングしてLambdaで捌く方法がありました。

しかし、Fargateはコンテナ周りの考慮事項が増え、SQSは全体のオーケストレーションが複雑になる点を課題に感じていました。 Step FunctionsとLambdaで大量データ処理ができるようになると、この点が解消されるため嬉しいアップデートでした!

これからアプリケーションで大量データ処理を構築する際は、是非選択肢の一つに入れてはいかがでしょうか。

以上。CX事業本部Delivery部のきんじょーでした。