本記事は2023/1/5時点の情報です。
こんにちは。アプリケーションサービス部の渡辺です。AWS re:Invent 2022 にて AWS Step Functions (以下、Step Functions) のアップデートが発表され、新たに最大 1 万の並列ワークフローをサポートする分散マップが登場しました。
- Step Functions 分散マップの概要
- Step Functions 分散マップで大量の写真をサムネイルにしよう
- 考慮点
- 既存サービスとの使い分け
- Step Functions 分散マップを利用可能なリージョン
- 参考資料
Step Functions 分散マップの概要
Step Functions の分散マップを使用することで Amazon S3 に保存されているオブジェクトに対してイテレーションを実行できるようになりました。分散マップは最大 1 万の並列ワークフローを起動してデータを処理することができます。
既存のマップ処理は最大 40 回の並列イテレーションに制限されていました。分散マップの登場により大規模なデータに対してのイテレーションをより簡潔に実装することが可能となりました。
Step Functions 分散マップで大量の写真をサムネイルにしよう
実際に Step Functions 分散マップを使用して Amazon S3 に保存されている大量の画像ファイルを処理してサムネイルを生成します。
ステートマシンを作成する
AWS マネジメントコンソールで Step Functions のページに移動します。「ステートマシンの作成」を選択します。
作成方法を選択します。今回は Step Functions Workflow Studio を使用して視覚的にワークフローを設計します。タイプは標準を選択します。
ワークフローを設計します。まず、左ペインでフロータブを選択します。 Map を選択し画面中央のキャンバスにドラッグアンドドロップします。
処理モードは「分散」、項目ソースは Amazon S3 を選択します。この設定により最大 1 万の並列ワークフローを起動することができます。
S3 項目ソースは「S3 object list」を選択します。S3 バケットは写真が 1,000 枚保存してあるバケットを選択しました。
画像ファイルを処理してサムネイルを作成する
分散マップによって呼び出される処理を Lambda 関数で実装します。
Create thumbnail Lambda function
関数ハンドラーの最初の引数のイベントオブジェクトには、Step Functions によって以下のようなオブジェクトが渡されます。
Lambda 関数内では、イベントオブジェクトから受け取った S3 オブジェクトキーを使用して 3S バケットから画像を取得し、ローカルストレージに保存します。 resize_image 関数でサムネイルを生成し、再度ローカルストレージに保存します。その後、 S3 バケットに thumbnails プレフィックスを付与して保存します。また、オリジナルの画像は images プレフィックスが付与されているものとして扱います。
分散マップで Lambda 関数を呼び出す
分散マップの子処理として「Lambda: Invoke」を選択します。
実際に Step Functions ステートマシンを実行してみます。1,000 枚の写真のサムネイル生成が約 1 分で完了しました。
また、Lambda 関数の Concurrent executions を確認すると非常に大量の関数が同時実行されていることが確認できます。
S3 バケットにサムネイルが保存されていることも確認できました。
考慮点
分散マップは最大 1 万の並列ワークフローをサポートする強力な機能である一方、後続処理のキャパシティに注意する必要があります。例えば、 Lambda のデフォルトの最大同時実行数は 1,000 です。これ以上を超える場合は、Lambda のクォータを引き上げるか、分散マップの最大同時実行数を制限する必要があります。
また、Step Functions はステート遷移ごとに課金対象となります。分散マップの場合、最大 1 万の並列ワークフローのイテレーションステート遷移も課金対象となります。
既存サービスとの使い分け
Step Functions で大規模な並列データ処理の実行が可能となり、既存サービスとの使い分けに迷った場合は、以下が参考になります。
データサイエンティストとデータエンジニアは AWS Glue と EMR を使用して大量のデータを処理します。一方、アプリケーションデベロッパーは Step Functions を使用して、アプリケーションにサーバーレスデータ処理を追加します。Step Functions はゼロから迅速にスケールできるため、お客様が結果を待っている可能性があるインタラクティブなワークロードに最適です。最後に、システム管理者と IT 運用チームは、数十億の S3 オブジェクトに対する許可のコピー、タグ付け、変更などの単一ステップの IT オートメーションオペレーションのために Amazon S3 Batch Operations を使用する可能性が高いです。
Step Functions 分散マップ – 大規模な並列データ処理のためのサーバーレスソリューション | Amazon Web Services ブログ から引用
Step Functions 分散マップを利用可能なリージョン
現時点で以下の AWS リージョンにてStep Functions 分散マップが利用可能です。
- 米国東部 (バージニア北部)
- 米国東部 (オハイオ)
- 米国西部 (オレゴン)
- カナダ (中部)
- アジアパシフィック (シンガポール)
- アジアパシフィック (シドニー)
- アジアパシフィック (東京)
- 欧州 (フランクフルト)
- 欧州 (アイルランド)
- 欧州 (ストックホルム)
参考資料
本記事の作成にあたり以下の資料を参考にさせていただきました。