はじめに
AWS DVAの認定試験を受験するため、学習内容を自身の備忘録としてアウトプットしたいと思います。
ご指摘ございましたらコメントいただけますと嬉しいです!
AWS Step Functionsとは?
「サーバーレスアーキテクチャで複雑なワークフローを構築・管理するためのフルマネージドなサービス」です。
複数の AWS サービス(Lambda関数、ECSタスク、SageMakerなど)を連携させ、アプリケーションのビジネスロジックを視覚的かつ宣言的に定義された ステートマシン(状態機械) としてオーケストレーション(調整)します。
Step Functions の主な役割とは?
1. オーケストレーション
複数の AWS サービスを連携させ、一連のステップとして実行順序やデータフローを定義します。
2. 状態管理
各ステップの実行状態(成功、失敗、実行中など)を自動で追跡し、実行コンテキストを維持します。
3. エラー処理と再試行
組み込みの機能により、ステップの失敗を自動で処理したり、エラー時に代替パスへ移行したりできます。
4. 長時間の実行
数分から最大1年間にわたる長時間実行されるワークフローも管理でき、コードで状態を管理する手間を省きます。
Step Functions の強力なエラー処理機構(リトライアとキャッチャー)
Step Functions の真価は、堅牢なエラー処理にあります。
特に、リトライア (Retrier) と キャッチャー (Catcher) は、ワークフローの信頼性を高める上で不可欠な機能です。
1. リトライア (Retrier) 一時的な失敗からの回復
リトライアは、一時的なエラー(Transient Errors)からの自動回復を目的としたメカニズムです。
ネットワークの問題、APIのレート制限(例: TooManyRequestsException)、サービスの一時的なダウンなど、再試行すれば成功する可能性のあるエラーを処理します。
| 特徴 | 詳細 |
|---|---|
| 目的 | タスクの自動的な再実行(再試行)を定義する。 |
| 設定内容 | どのエラーコードをターゲットにするか、最大試行回数、待機時間(間隔)、バックオフ率(待機時間を指数関数的に増やす)を設定します。 |
| 実装 | ステートマシンの定義(ASL: Amazon States Language)内で、タスク状態(Task)の内部に宣言的に記述されます。 |
| その他 | 再試行ロジックが組み込みで処理されるため、複雑な Wait や Choice の状態を手動で追加する必要がありません。 |
2. キャッチャー (Catcher) エラー後のフォールバック処理
キャッチャーは、リトライアによる回復が不可能な場合や、予期しない致命的なエラーが発生した場合に、実行フローを安全な 代替パス(フォールバック) に移行させることを目的としています。
| 特徴 | 詳細 |
|---|---|
| 目的 | エラー発生時に、ワークフローを別の処理状態にリダイレクトする(実行を継続させる)。 |
| 設定内容 | どのエラーコードをキャッチするか、エラーが発生した場合に次に進む状態(タスク)を指定します。 |
| 実装 | タスク状態の内部に記述され、エラー発生時に実行フローを制御します。 |
| その他 | 自動的な再試行機能は持っていません。エラー情報(エラー名とメッセージ)をキャッチし、次の状態に渡して処理を継続します。 |
3. ユースケース別使い分けのポイント
| シナリオ | 目的 | 使用すべき機能 |
|---|---|---|
| レート制限エラー | 10秒待って、最大3回だけ再試行したい。 | リトライア (Retry) |
| エラーログの記録 | 致命的なエラーが発生したら、エラーメッセージを SQS に記録して実行を終了したい。 | キャッチャー (Catch) |
| DB接続エラー | データベース接続が切れたら、自動的に最大5回まで再試行したい。 | リトライア (Retry) |
| 予期せぬ失敗 | 想定外のエラーが発生したら、管理者に通知する Lambda 関数を呼び出したい。 | キャッチャー (Catch) |
これらの機能を使うことで、手動で try...catch や while ループを実装することなく、信頼性の高いサーバーレスワークフローを構築できます。
さいごに
AWS Step Functionsは、Lambdaなどを連携させ、複雑なワークフローを視覚的に管理できるという、優れた機能を持つサーバーレスオーケストレーターです。
信頼性の鍵は、一時的な失敗を自動で再試行するリトライアと、致命的なエラーを検知し代替処理へ移行するキャッチャーの適切な使い分けにあります。
これらを活用し、堅牢でスケーラブルなサーバーレスアプリを構築していきたいと思います!
参考文献