AWS Step Functions

複数の AWS サービスをビジュアルなワークフローとして連携させるサーバーレスオーケストレーションサービスで、分岐、並列実行、エラーハンドリングを宣言的に定義できる

概要

AWS Step Functions は、複数の AWS サービスを組み合わせたワークフローをビジュアルに設計・実行するサーバーレスオーケストレーションサービスです。Amazon States Language (ASL) という JSON ベースの言語でステートマシンを定義し、Lambda 関数、ECS タスク、SNS 通知、SQS メッセージ送信、DynamoDB 操作など 200 以上の AWS サービスを直接統合できます。順次実行、並列実行、条件分岐、ループ、待機、エラーハンドリング (リトライ、キャッチ) を宣言的に定義でき、複雑なビジネスロジックをコードではなくワークフロー定義として管理できます。Standard ワークフローは最大 1 年間の実行をサポートし、Express ワークフローは最大 5 分間の高頻度・短時間の処理に最適化されています。Workflow Studio を使えば、ドラッグ&ドロップでワークフローを視覚的に構築できます。

ステートの種類と組み合わせによるワークフロー構築

Step Functions は多様なステートタイプを組み合わせてワークフローを構築します。Task ステートは Lambda 関数や AWS サービスの呼び出しを行い、200 以上の AWS サービスを SDK 統合で直接操作できるため、Lambda 関数を介さずに DynamoDB への書き込みや SQS へのメッセージ送信が可能です。Choice ステートは条件に基づいて分岐し、Parallel ステートは複数のブランチを同時に実行してすべてのブランチが完了するまで待機します。Map ステートは配列の各要素に対して同じ処理を並列実行し、大量データのバッチ処理に適しています。Wait ステートは指定した時間だけ実行を一時停止し、外部システムの処理完了を待つ場合に使用します。エラーハンドリングでは、Retry フィールドで指数バックオフ付きのリトライを定義し、Catch フィールドでエラー時のフォールバック処理を指定できます。Azure Logic Apps は 400 以上の SaaS コネクタ (Salesforce、Office 365 など) を標準で提供しており SaaS 連携が豊富ですが、Step Functions は AWS サービスとの SDK 統合の深さで優位に立ちます。

Standard と Express の使い分けと料金設計

Step Functions には Standard ワークフローと Express ワークフローの 2 種類があり、ワークロードの特性に応じた使い分けが重要です。Standard ワークフローは最大 1 年の実行期間をサポートし、状態遷移ごとに実行履歴が記録されるため、長時間のバッチ処理や人間の承認を含むワークフローに適しています。料金は状態遷移 1,000 回あたり約 0.025 ドルで、ステート数が多いワークフローではコストが積み上がります。Express ワークフローは最大 5 分の実行期間で、毎秒 10 万以上のリクエストを処理でき、API のオーケストレーションやリアルタイムデータ処理に最適です。料金は 100 万リクエストあたり約 1.00 ドル + 実行時間課金で、高頻度・短時間の処理では Standard より大幅にコスト効率が良くなります。書籍 (Amazon) でワークフロー設計を体系的に学べます。

Retry/Catch 戦略と Map ステートによるバッチ処理

Step Functions のエラーハンドリングは、ワークフロー定義の中に宣言的に組み込める点が大きな強みです。Retry フィールドでは、エラータイプごとにリトライ回数、初回待機時間、バックオフ倍率を指定でき、一時的な障害 (Lambda のスロットリング、DynamoDB のキャパシティ超過など) に対して自動復旧を実現します。Catch フィールドでは、リトライで回復しなかった場合のフォールバック処理 (エラー通知、補償トランザクション) を定義します。Map ステートは大量データのバッチ処理で特に威力を発揮し、Distributed モードでは最大 10,000 の並列実行が可能です。S3 バケット内の CSV ファイルを行ごとに並列処理する、DynamoDB テーブルの全レコードに対して変換処理を実行するといったユースケースで、Lambda 単体では実現困難な大規模並列処理をオーケストレーションできます。Workflow Studio を使えば、これらのステートをドラッグ&ドロップで視覚的に構築でき、ASL の JSON を直接記述する必要がありません。

共有するXB!