AWS Step Functions 分散マップで大量の写真をサムネイルにしよう

記事タイトルとURLをコピーする

本記事は2023/1/5時点の情報です。

こんにちは。アプリケーションサービス部の渡辺です。AWS re:Invent 2022 にて AWS Step Functions (以下、Step Functions) のアップデートが発表され、新たに最大 1 万の並列ワークフローをサポートする分散マップが登場しました。

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 枚保存してあるバケットを選択しました。

S3 項目ソースの選択

画像ファイルを処理してサムネイルを作成する

分散マップによって呼び出される処理を Lambda 関数で実装します。

Create thumbnail Lambda function

関数ハンドラーの最初の引数のイベントオブジェクトには、Step Functions によって以下のようなオブジェクトが渡されます。

分散マップの出力

Lambda 関数内では、イベントオブジェクトから受け取った S3 オブジェクトキーを使用して 3S バケットから画像を取得し、ローカルストレージに保存します。 resize_image 関数でサムネイルを生成し、再度ローカルストレージに保存します。その後、 S3 バケットに thumbnails プレフィックスを付与して保存します。また、オリジナルの画像は images プレフィックスが付与されているものとして扱います。

分散マップで Lambda 関数を呼び出す

分散マップの子処理として「Lambda: Invoke」を選択します。

「Lambda: Invoke」の設定

実際に Step Functions ステートマシンを実行してみます。1,000 枚の写真のサムネイル生成が約 1 分で完了しました。

ステートマシンの実行

また、Lambda 関数の Concurrent executions を確認すると非常に大量の関数が同時実行されていることが確認できます。

Lambda 関数の同時実行数の確認

S3 バケットにサムネイルが保存されていることも確認できました。

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 分散マップが利用可能です。

  • 米国東部 (バージニア北部)
  • 米国東部 (オハイオ)
  • 米国西部 (オレゴン)
  • カナダ (中部)
  • アジアパシフィック (シンガポール)
  • アジアパシフィック (シドニー)
  • アジアパシフィック (東京)
  • 欧州 (フランクフルト)
  • 欧州 (アイルランド)
  • 欧州 (ストックホルム)

参考資料

本記事の作成にあたり以下の資料を参考にさせていただきました。

aws.amazon.com

aws.amazon.com

youtu.be

docs.aws.amazon.com