▪️目的
AWSでは、LambdaやDynamoDB、SQSなど、さまざまなサービスを組み合わせてシステムを構築できます。
しかし、複数の処理を組み合わせる場合、処理を実行する順番や条件分岐、エラー発生時の対応なども考える必要があります。
そこで活用できるのが、AWS Step Functions(ステップファンクションズ) です。
Step Functionsは、複数の処理をワークフローとして定義し、実行・管理できるサービスです。
例えば、次のような処理を組み合わせられます。
- 注文を受け付け、注文情報を保存する
- 条件に応じて処理を分岐させる
- 複数のLambda関数を順番に実行する
- 処理が失敗した場合に再試行する
- 一連の処理がどこまで進んだかを確認する
この記事では、Step Functionsの基本的な仕組みから、ステートマシン・ステートの役割、Lambdaとの連携、エラー処理まで、初心者向けに解説します。
目次
- AWS Step Functionsとは
- ワークフローとは
- ステートマシンとステート
- Step Functionsの基本的なステート
- Lambdaとの連携
- エラー処理と再試行
- StandardワークフローとExpressワークフロー
- Step Functionsを利用するメリット
- 利用する際の注意点
- まとめ
▪️AWS Step Functionsとは
AWS Step Functionsは、複数の処理をワークフローとして定義し、実行するためのサーバーレスサービスです。
ここでいうワークフローとは、処理の順番や条件などを定義した一連の流れを指します。
例えば、ECサイトで商品が注文された場合、次のような処理が考えられます。
- 注文情報を受け付ける
- 注文内容を検証する
- 在庫を確認する
- 注文結果を保存する
- 注文完了を通知する
これらの処理を個別に実行するだけでなく、どの順番で実行するか、どの条件で次の処理へ進むかを管理する必要があります。
Step Functionsを利用すると、このような処理の流れを定義し、一連のワークフローとして実行できます。
♦︎Step Functionsのイメージ
ワークフロー開始
↓
注文内容を検証
↓
在庫を確認
↓
┌───────────┐
│ 在庫はある? │
└───────────┘
↓ ↓
Yes No
↓ ↓
注文保存 在庫切れ処理
↓ ↓
注文通知 ワークフロー終了
このように、Step Functionsでは処理の順序や条件分岐を定義できます。
なお、実際の注文システムでは、在庫の確保や決済などの処理を安全に実行するための設計も必要です。
▪️ワークフローとは
ワークフローとは、複数の処理を決められた順序や条件に従って実行する仕組みです。
Step Functionsでは、ワークフローを定義することで、処理同士のつながりを明確にできます。
例えば、次のような処理を考えます。
① データを取得
↓
② データを加工
↓
③ データを保存
↓
④ 処理完了
単純な処理であれば、1つのプログラムの中にすべての処理を書くこともできます。
しかし、処理が増えてくると、次のような課題が出てきます。
- 処理の順序が分かりにくくなる
- 条件分岐が複雑になる
- エラー発生時の対応が難しくなる
- どの処理で失敗したのか把握しにくくなる
Step Functionsを利用すると、処理をステップごとに分け、全体の流れを管理しやすくなります。
特に、LambdaなどのAWSサービスを組み合わせてシステムを構築する場合に役立ちます。
▪️ステートマシンとステート
Step Functionsを理解するうえで、重要な用語が2つあります。
- ステートマシン
- ステート
♦︎ステートマシン
ステートマシンとは、ワークフロー全体の処理の流れを定義したものです。
どのステップから開始し、どの順番で処理を実行し、どの条件で終了するかなどを定義します。
例えば、データを取得して加工し、保存するワークフロー全体がステートマシンに該当します。
♦︎ステート
ステートとは、ワークフローを構成する個々の状態や処理の単位です。
例えば、次のようなステートがあります。
- データを取得する
- データを加工する
- 条件を判定する
- 処理を待機する
- ワークフローを終了する
ステートマシンが「ワークフロー全体」なら、ステートは「ワークフローを構成する個々のステップ」と考えると理解しやすいでしょう。
▪️Step Functionsの基本的なステート
Step Functionsには、ワークフローを構成するためのさまざまなステートがあります。
ここでは、代表的なものを紹介します。
| ステート | 役割 |
|---|---|
| Task | Lambdaなどの処理を実行する |
| Choice | 条件に応じて処理を分岐する |
| Pass | 入力をそのまま渡したり、データを渡したりする |
| Wait | 指定した時間や日時まで待機する |
| Parallel | 複数の処理を並列に実行する |
| Succeed | 成功としてワークフローを終了する |
| Fail | 失敗としてワークフローを終了する |
♦︎Taskステート
Taskは、実際の処理を実行するためのステートです。
例えば、Lambda関数を呼び出して、データの加工や外部サービスとの連携を行えます。
Task
↓
Lambda関数を実行
↓
結果を次のステートへ渡す
♦︎Choiceステート
Choiceは、条件に応じて処理を分岐させるステートです。
例えば、注文金額によって処理を変える場合に利用できます。
注文金額を確認
↓
Choice
↙ ↘
1万円以上 1万円未満
↓ ↓
特別処理 通常処理
♦︎Waitステート
Waitは、指定した時間や日時まで処理を待機させるステートです。
例えば、一定時間待ってから次の処理を実行するワークフローを構築できます。
♦︎Parallelステート
Parallelは、複数の処理を並列に実行するためのステートです。
例えば、注文確定後に、通知処理と分析用データの作成をそれぞれ進める構成が考えられます。
ただし、処理同士に依存関係がある場合は、並列化できるかどうかを事前に確認する必要があります。
▪️Lambdaとの連携
Step Functionsは、Lambdaと組み合わせて利用されることが多いサービスです。
Lambdaはプログラムを実行するサービスであり、Step Functionsは複数の処理の流れを管理するサービスです。
それぞれの役割を分けることで、複雑な処理を整理しやすくなります。
♦︎連携のイメージ
AWS Step Functions
↓
Lambda関数A
↓
Lambda関数B
↓
Lambda関数C
↓
ワークフロー終了
例えば、次のような役割分担が考えられます。
| 処理 | 担当 |
|---|---|
| ワークフロー全体の管理 | Step Functions |
| データの検証 | Lambda関数A |
| データの加工 | Lambda関数B |
| 結果の保存 | Lambda関数C |
Step Functionsが各Lambda関数を順番に呼び出し、それぞれの実行結果に応じて次のステップへ進みます。
このように、処理の流れと個々のプログラムの役割を分離できる点が特徴です。
♦︎Lambda以外のサービスとの連携
Step FunctionsはLambdaだけでなく、AWS SDK統合などを利用して、対応するAWSサービスのAPI操作をワークフローから実行することもできます。
そのため、すべての処理をLambda関数として実装する必要はありません。
要件に応じて、Step FunctionsからAWSサービスを直接操作する方法と、Lambdaを介して処理する方法を使い分けます。
▪️エラー処理と再試行
Step Functionsのメリットのひとつが、ワークフローの中でエラー処理を定義できることです。
複数の処理を連携させる場合、途中の処理が失敗する可能性があります。
例えば、外部サービスとの通信に一時的な問題が発生するケースです。
このような場合に、処理を再試行するか、別の処理へ分岐させるかを定義できます。
♦︎再試行のイメージ
Lambdaを実行
↓
失敗した?
↓
Yes
↓
再試行
↓
成功した?
↙ ↘
Yes No
↓ ↓
次の処理 エラー処理
Step Functionsでは、RetryやCatchといった設定を利用できます。
- Retry:指定したエラーなどに対して、処理を再試行する
- Catch:エラーを捕捉し、別のステートへ処理を移す
ただし、再試行すれば必ず成功するわけではありません。また、同じ処理を再実行することで二重登録や二重決済などが発生しないよう、処理の冪等性を考慮することが重要です。
冪等性とは、同じ処理を複数回実行しても、結果が重複して変わらないようにする性質です。
エラー処理を定義するだけでなく、再試行による影響も考慮して設計しましょう。
▪️StandardワークフローとExpressワークフロー
Step Functionsには、主に2種類のワークフローがあります。
- Standardワークフロー
- Expressワークフロー
それぞれ実行特性や料金体系などが異なります。
| 項目 | Standard | Express |
|---|---|---|
| 主な用途 | 長時間の処理や業務ワークフロー | 大量の短時間処理 |
| 最大実行時間 | 最大1年 | 最大5分 |
| 実行履歴 | Step Functionsで実行履歴を確認できる | 実行履歴の確認方法などがStandardと異なる |
| 実行方式 | Exactly-once実行モデルを基本とする | AsynchronousはAt-least-once、SynchronousはAt-most-onceの実行モデル |
| 料金の考え方 | 状態遷移数などに基づく | 実行回数や実行時間・メモリ使用量などに基づく |
Standardワークフローは、注文処理など、長時間にわたる業務処理や実行履歴を追跡したい用途に適しています。
Expressワークフローは、大量のイベントを処理するような短時間のワークフローに適しています。
なお、Expressの実行方式は同期実行と非同期実行で異なります。実際の構成を選ぶ際は、処理の重複や実行保証の要件を確認しましょう。
どちらを選ぶかは、処理時間、実行頻度、エラー時の扱い、料金などを踏まえて判断します。
▪️Step Functionsを利用するメリット
Step Functionsを利用することで、主に次のようなメリットがあります。
① 処理の流れを可視化できる
複数の処理がどのようにつながっているかを、ワークフローとして把握できます。
処理が複雑になった場合でも、全体の構造を理解しやすくなります。
② エラー処理を定義できる
RetryやCatchなどを利用し、エラー発生時の再試行や分岐を定義できます。
エラー処理を各プログラムに個別実装する負担を減らせる場合があります。
③ 処理を分割できる
各処理をLambdaなどに分けることで、機能ごとの責任範囲を明確にできます。
それぞれの処理を独立して変更しやすくなり、保守性の向上にもつながります。
④ AWSサービスを組み合わせやすい
Step FunctionsからLambdaや対応するAWSサービスを連携させることで、複数のサービスを組み合わせた処理を構築できます。
ただし、単純な処理にまでStep Functionsを導入すると、構成や管理対象が増えることもあります。必要な複雑さに応じて利用することが大切です。
▪️利用する際の注意点
Step Functionsを利用する際は、次のポイントも押さえておきましょう。
① IAM権限を適切に設定する
Step FunctionsからLambdaなどのAWSサービスを呼び出す場合、必要な権限を設定する必要があります。
ステートマシンの実行ロールには、ワークフローが利用するサービスやリソースに応じた権限を付与します。
必要以上に広い権限を付与せず、最小権限の原則に沿って設計しましょう。
② データの受け渡しを理解する
ワークフローの各ステートでは、入力データや処理結果を次のステートへ渡します。
入力・出力の構造を意識せずに設計すると、次のステートで必要なデータが存在しないなどの問題が発生する可能性があります。
どのステートがどのデータを受け取り、何を返すのかを整理しておきましょう。
③ 料金を考慮する
Step Functionsの料金は、StandardとExpressで計算方法が異なります。
処理の実行回数や状態遷移数などによって料金が変わるため、想定する処理量に応じて見積もることが重要です。
④ 再試行と重複実行を考慮する
エラー時の再試行は便利ですが、外部サービスへの登録や決済など、繰り返すと影響が出る処理には注意が必要です。
処理が複数回実行されても問題が起きないよう、冪等性やエラー時の復旧方法を考慮しましょう。
▪️まとめ
AWS Step Functionsは、複数の処理をワークフローとして定義し、実行・管理するためのサーバーレスサービスです。
今回のポイントを整理します。
- ワークフロー:複数の処理をつないだ一連の流れ
- ステートマシン:ワークフロー全体の定義
- ステート:ワークフローを構成する個々の状態や処理
- Task:Lambdaなどの処理を実行する
- Choice:条件に応じて処理を分岐する
- Retry・Catch:エラー発生時の再試行や分岐を定義する
- Standard・Express:用途や実行特性に応じて使い分ける
Lambdaが個々のプログラムを実行するサービスであるのに対し、Step Functionsは複数の処理の流れを管理するサービスです。
両者の役割を理解すると、単一のAWSサービスを利用するだけでなく、複数のサービスを組み合わせたシステム設計への理解が深まります。
次の記事では、AWSのAPIを受け付ける入口となる Amazon API Gateway を学ぶと、API Gateway・Lambda・Step Functionsを組み合わせた構成も理解しやすくなります。
*「Amazon API Gateway」の記事はこちら
→「https://lovelabengineer.com/2026/10/09/amazon-api-gatewayとは?apiの基本とlambda連携を初心者向けに解説/」

No responses yet