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 の強みは、多数の AWS サービスを少ないコードで連携できることです。Lambda の呼び出しはもちろん、データベースへの書き込みやメッセージの送信など、さまざまなサービスをワークフローのステップから直接呼び出せます。処理の完了を待ってから次へ進む同期的な呼び出しや、起動だけして待たない非同期、外部の処理完了を待ち受けるコールバックなど、状況に応じた呼び出し方を選べます。接着役のコードを書かずにサービスを組み合わせられるため、処理の流れそのものの設計に集中でき、保守しやすいワークフローを構築できます。
状態管理とデータの受け渡し
ワークフローでは、各ステップの間でデータを受け渡しながら処理を進めます。Step Functions は、前のステップの出力を加工して次のステップの入力に渡す仕組みを備え、必要な部分だけを抽出したり整形したりできます。これにより、ステップ間のデータの流れを宣言的に制御できます。ただし、ステップ間で受け渡せるデータのサイズには上限があるため、大きなデータはストレージに置いて参照だけを渡す設計にします。データの流れを明確に設計することで、各ステップが必要な情報を確実に受け取り、複雑な処理でも見通しのよいワークフローを保てます。
可観測性とデバッグ
Step Functions は、ワークフローの実行状況を視覚的に把握できる点が大きな利点です。各実行について、どのステップがいつ実行され、成功したか失敗したかの履歴が記録されます。図で表現されたワークフロー上で、処理がどこまで進み、どこで止まったかを一目で確認できるため、問題の切り分けが容易です。各ステップの入出力も追跡でき、想定外のデータで失敗した原因を特定できます。実行のログやトレースを監視と組み合わせれば、本番での異常を検知できます。複雑な処理の流れを可視化できることが、開発と運用の両面で役立ちます。
代表的なユースケース
Step Functions は、複数の処理を順序立てて確実に実行したい場面で活躍します。データの抽出・変換・格納を順に行う ETL のオーケストレーション、複数のマイクロサービスを連携させる処理の調整、途中で人間の承認を挟む業務フローなどが典型例です。一連の処理の一部が失敗したときに、それまでの操作を取り消して整合性を保つ補償処理を組み込むこともできます。大量のデータを並列に処理する用途にも対応します。単発の関数では表現しきれない、状態を持った複数ステップの処理を、信頼性高く組み立てられる点が、ワークフロー基盤としての価値です。
まとめ
Step Functions はサーバーレスアーキテクチャにおけるワークフローの複雑さを管理するサービスです。Lambda 関数間の連携ロジックをコードから分離し、宣言的なワークフロー定義で可視化・管理できます。標準と Express の使い分けでコストを最適化し、Retry/Catch でエラーハンドリングを標準化することで、堅牢なサーバーレスアプリケーションを構築できます。