AWS Step Functionsで構築したワークフローに、外部APIを呼び出すLambdaタスクが含まれています。外部APIは高負荷時に `TooManyRequestsException` を返します。この例外に対して指数バックオフ(BackoffRate: 2、初回待機: 2秒)で最大3回リトライし、それでも失敗した場合は専用のエラー処理ステートに遷移させるには、ASL(Amazon States Language)でどのように設定しますか?
タスクステートのRetryフィールドに `TooManyRequestsException` を対象としてMaxAttempts=3・BackoffRate=2・IntervalSeconds=2を設定し、Catchフィールドでエラーハンドラーステートへ遷移を定義する Step FunctionsのASLではタスクステートに `Retry` と `Catch` をネイティブ定義できます。Retryでは `ErrorEquals`(対象エラー名)・`MaxAttempts`(最大試行回数)・`BackoffRate`(待機時間の乗数)・`IntervalSeconds`(初回待機秒数)を指定し、指数バックオフが自動で適用されます。全リトライ失敗後は `Catch` に定義したNextステートへ遷移します。このアプローチにより再試行ロジックをワークフロー定義に集約でき、Lambda関数はビジネスロジックのみに専念できます。 選択肢AのLambda関数内のtry-catchでのリトライ実装は、コードの複雑性を増しワークフロー管理とビジネスロジックが混在するうえ、リトライ待機中にLambdaの実行時間を消費し続けるコストとタイムアウトのリスクがあります。 選択肢CのSQSデッドレターキューの統合はStep Functionsネイティブのエラーフローとは独立したコンポーネントであり、同一ワークフロー内での細粒度なバックオフ制御には適しません。 選択肢DのCloudWatch AlarmsとEventBridgeによる外部監視は事後的な検知・対応であり、個別タスクの失敗に対する指数バックオフリトライをワークフロー定義内で制御することはできません。