[レポート] Optimize data processing with built-in AWS Step Functions featuresに参加しました #AWSreInvent #API207
はじめに
データ事業本部のkobayashiです。ラスベガスで開催されていたre:Invent2024に現地参加しました。
本記事は AWS re:Invent 2024 のセッション「API207 | Optimize data processing with built-in AWS Step Functions features」のセッションレポートです。
このセッションでは、AWS Step Functionsを用いたデータ処理ワークフローの最適化について詳しく解説されました。フロー、イテレーター、スキャッター・ギャザーといった基本的なステップ関数パターンから、同期リクエスト/レスポンス、コールバック、ジョブ実行などのサービス統合パターンの説明がありました。
またChalk Talkセッションなので後半では参加者からの質問を元に質疑応答が行われました。
セッションの概要
タイトル
API207 | Optimize data processing with built-in AWS Step Functions features
概要
In this chalk talk, learn how to optimize your serverless data processing workflows at scale. Dive into utilizing AWS Step Functions and its features, including intrinsic functions and Distributed Map state. Review common applications and examples of these features to understand when to use them, and learn how they can help you save processing time, resources, and money. Gain insights on how to efficiently orchestrate and parallelize your data processing pipelines using powerful Step Functions capabilities.
- Level: 200
- Session Type: Chalk talk
スピーカー
- Mark Richman, Principal Solutions Architect, AWS
- Elizabeth Davis, Sr Solutions Architect, AWS
内容
はじめアジェンダです。
- Intro
- はじめに
- Use case overview
- ユースケース概要
- Step Functions common patterns and features
- Step Functionsの一般的なパターンと機能
- Whiteboarding
- ホワイトボーディング
- Q&A
Intro
はじめにAWS Step Functionsの説明がありました。
AWS Step Functions
- サーバーレスのワークフローサービス
- ほぼすべてのリージョンで利用可能
- ステートマシンの概念に基づいて構築されている
- ステップと、それらのステップ間の状態遷移を持つフローチャート
- ワークフローを構成する多数のステップで構成される
- ASL(Amazon States Language)と呼ばれるものでJSONまたはYAMLで表現される
- オーケストレーションの問題を解決するソリューションとして使用される
- Workflow Studioは、ASLのJSONを最終的に出力するグラフィカルエディタ
- ドラッグアンドロップのインターフェースでノーコードで利用できる
Use case overview
AWS Step Functionsを使用したワークフロー自動化の概要と、請求書処理のユースケースを紹介がありました。
主なポイントは以下の通りです:
- Step Functionsは様々なユースケースに適用可能で、大規模な処理や複数のステップを含むタスクに適している
- 請求書処理の例では、日々50万件の請求書を処理し、処理量は10万から100万件まで変動する
- 処理には発注書の確認、承認、支払い、レポート作成などの複数のステップが含まれる
- Step Functionsは、Lambda、API Gateway、DynamoDB、Athenaなど、多くのAWSサービスと統合されている
Step Functionsの柔軟性と複雑なビジネスプロセスを自動化する特徴を強調されていました。
Step Functions common patterns and features
ここからはホワイトボードを使って6つのパターンの解説となりました。
以下が説明の要約になります。
Flow
フローパターンは、自動販売機(inventory check -> payment -> shipment)のような順序付けられたステートマシンです。各ステップは前のステップが完了しないと進めない仕組みです。
Iterator
イテレーターパターンは配列内の各要素に対して同じ処理を繰り返すためのパターンです。また分散マップは、最大10,000の並列呼び出しが可能になり、数百万のオブジェクトを処理できます。故障伝導シミュレーションや大規模なデータベースの一括処理を考えている場合、これが役立ちます。Amazon S3から直接アイテムを取得することもできます。
Scatter gather
スキャター・ギャザーパターンは大規模なタスクを複数の小さなタスクに分割し、並列処理した後、結果を集約する手法です。例えば、経費精算システムでは、ホテル代、食費、交通費などの異なる種類の経費を同時に処理できます。
さらに、このパターンは他のパターン(フローパターンやイテレーターパターン)と組み合わせることで、より複雑なワークフローを効率的に実装できます。これにより、大規模なビジネスプロセスも簡潔かつ保守性の高いコードで実現できます。
Synchronous request/response
同期リクエスト/レスポンスパターンについてです。API GatewayとLambda関数を使用する際の大きな課題は、29秒というタイムアウト制限です。複数のLambda関数を連鎖的に呼び出すと、この制限に容易に達してしまい、502エラーが発生する可能性があります。解決法としてはLambda関数を連鎖させる代わりに、これら全体を状態マシンでラップし、これらのステップを実行させることです。
Callback
コールバックパターンは、人間の承認や外部サービスとの連携が必要な長時間実行ワークフローを管理するための手法です。
- タスクトークンを使用して状態を追跡
- ワークフローを一時停止して外部プロセスの完了を待機
- SendTaskSuccess/SendTaskFailureで結果を通知
RUn a job(.sync)
Step Functionsの.syncパターンは、AWS サービスの非同期処理を同期的に扱うための機能です。
- サービス呼び出しの完了を待機
- 処理結果をワークフローに返却
- 多数のAWSサービスと統合可能
6つのパターンのまとめです。
この表はポイントがまとまっているので即保存しました。
Q&A
最後のQ&Aで参加者とのやり取りがありました。気になったものを載せておきます。
このセッションの有益なQ&Aを5つリストします:
-
Q: 分散マップ(Distributed Map)と個別のStep Functions呼び出しの違いは?
A: 分散マップは大量のデータを効率的に処理できる。コスト面での大きな違いはないが分散マップを使うとオーケストレーションのコードを書く必要がなくなる。 -
Q: コールバックパターンはExpress workflowでも使えるか?
A: コールバックパターンはStandard workflowでのみ使用可能で、Express workflowは高速な処理向けで5分のタイムアウトがあるため長時間の待機には適していない。 -
Q: タイムアウトと失敗状態を区別することは可能?
A: タイムアウトはステップの設定で指定でき、失敗の理由はビジュアルエディタで確認できる。また、タイムアウトと拒否で異なる処理を行うロジックを追加することもできる。 -
Q: ワークフローの失敗から回復する方法はあるか?
A: Standard workflowにはredriveという再実行機能がある。Express workflowにはないため、別途再処理の仕組みを用意することが必要 -
Q: ECS.StartTask.Syncを使う場合、タスクの完了を待つ必要があるか?
A: .Syncサフィックスを使うと、タスクが完了するか、タイムアウトするか、エラーを返すまで待機する。
まとめ
「API207 | Optimize data processing with built-in AWS Step Functions features」のセッションレポートをお届けしました。
普段からAWS Step Functionsをヘビーユースしているので初心に戻ってパターンが整理出来たので自分にとっては良セッションでした。特に最後に表示された6つのパターンは他のワークフローサービスでも応用できるので背景画像にしておきたいです。
最後まで読んで頂いてありがとうございました。