AWS Step Functions で設計するワークフローオーケストレーション - 標準と Express の使い分け

標準ワークフローと Express ワークフローの選定基準を明確にし、Retry/Catch の宣言的エラーハンドリングと分散マップによる大規模並列処理を紹介します。

Step Functions の基本概念

Step Functions はサーバーレスのワークフローオーケストレーションサービスです。ワークフローをステートマシンとして定義し、各ステートが AWS サービスの呼び出しや条件分岐、並列処理を実行します。Lambda 関数を連鎖させる場合、関数間の呼び出し順序、エラーハンドリング、リトライロジックを各関数内に実装する必要がありますが、Step Functions ではこれらをワークフロー定義 (ASL) に宣言的に記述します。ビジュアルエディタでワークフローをドラッグ&ドロップで構築でき、実行状況をリアルタイムにグラフで確認できます。

標準ワークフローと 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 の料金

標準ワークフローは状態遷移 1 回あたり約 0.000025 ドルで、4,000 回の状態遷移で約 0.10 ドルです。Express ワークフローは実行回数 (100 万回あたり約 1.00 ドル) と実行時間 (GB-秒あたり約 0.00001667 ドル) の組み合わせで課金されます。毎秒数千回実行される高スループットのワークロードでは、標準ワークフローの状態遷移課金が急増するため Express が大幅に低コストです。逆に、1 日数回の長時間実行ワークフローでは標準の方が安価です。無料枠は標準ワークフローが月間 4,000 回の状態遷移、Express が月間 25,000 回の実行です。

まとめ

Step Functions はサーバーレスアーキテクチャにおけるワークフローの複雑さを管理するサービスです。Lambda 関数間の連携ロジックをコードから分離し、宣言的なワークフロー定義で可視化・管理できます。標準と Express の使い分けでコストを最適化し、Retry/Catch でエラーハンドリングを標準化することで、堅牢なサーバーレスアプリケーションを構築できます。