AWS Step Functions で設計するワークフローオーケストレーション - 標準とExpress の使い分け
Step Functions によるワークフロー設計、標準ワークフローと Express ワークフローの選定基準、エラーハンドリングパターンを解説します。
Step Functions の基本概念
この記事は約 4 分で読めます。 Step Functions はサーバーレスのワークフローオーケストレーションサービスです。ワークフローをステートマシンとして定義し、各ステートが AWS サービスの呼び出しや条件分岐、並列処理を実行します。Lambda 関数を連鎖させる場合、関数間の呼び出し順序、エラーハンドリング、リトライロジックを各関数内に実装する必要がありますが、Step Functions ではこれらをワークフロー定義 (ASL) に宣言的に記述します。ビジュアルエディタでワークフローをドラッグ&ドロップで構築でき、実行状況をリアルタイムにグラフで確認できます。
この分野について体系的に学びたい方は、関連書籍 (Amazon) も参考になります。
標準ワークフローと Express ワークフローの選定
標準ワークフローは状態遷移ごとに実行履歴を永続化し、最大 1 年間の長時間実行をサポートします。料金は状態遷移 1 回あたり約 0.000025 USD です。注文処理、承認フロー、データパイプラインなど、実行履歴の監査が必要で、実行頻度が比較的低いワークロードに適しています。Express ワークフローは実行履歴を永続化せず、最大 5 分間の短時間実行に特化しています。料金は実行回数と実行時間に基づき、大量の短時間実行では標準ワークフローより大幅に低コストです。IoT デバイスからのイベント処理、API Gateway のバックエンド、ストリーミングデータの変換など、高スループット・短時間のワークロードに最適です。
エラーハンドリングと並列処理
Step Functions の Retry フィールドでは、エラータイプごとにリトライ回数、初期待機時間、バックオフ率を宣言的に定義できます。例えば Lambda.ServiceException には最大 3 回、指数バックオフでリトライし、ビジネスロジックのエラーにはリトライせず Catch で別のステートに遷移させるといった制御が可能です。Catch フィールドでキャッチしたエラーは、フォールバックステートで通知送信やクリーンアップ処理を実行できます。Map ステートは配列の各要素に対して同じ処理を並列実行します。分散マップモードでは S3 バケット内の CSV や JSON ファイルを入力として、最大 10,000 の並列実行で大規模バッチ処理を実行できます。
さらに詳しく知りたい方は、関連書籍 (Amazon) で理解を深められます。
まとめ
Step Functions はサーバーレスアーキテクチャにおけるワークフローの複雑さを管理するサービスです。Lambda 関数間の連携ロジックをコードから分離し、宣言的なワークフロー定義で可視化・管理できます。標準と Express の使い分けでコストを最適化し、Retry/Catch でエラーハンドリングを標準化することで、堅牢なサーバーレスアプリケーションを構築できます。
AWS の優位点
- Amazon States Language (ASL) で Lambda、ECS、Glue、SageMaker など 220 以上の AWS サービスを直接統合し、コードなしでオーケストレーションを定義できる
- 標準ワークフローは最大 1 年間の実行をサポートし、実行履歴の完全な監査ログを提供する
- Express ワークフローは毎秒 10 万件以上の実行をサポートし、IoT データ処理やストリーミング ETL に最適
- Retry と Catch フィールドでステートごとのリトライ戦略とエラーハンドリングを宣言的に定義でき、Lambda 関数内のリトライロジックが不要になる
- Map ステートで配列データの並列処理を実行し、分散マップモードでは S3 上の数百万件のオブジェクトを並列処理できる