開発者はAWS Step Functionsを使用してデータ処理ワークフローを構築しています。あるタスクステートがLambda関数を呼び出しますが、下流の外部APIが過負荷になると一時的に失敗します。このタスクに対して「最大3回、初回待機5秒、バックオフ係数2.0で指数的にリトライし、最大リトライ回数を超えた場合は別のステートに遷移してエラー通知を送る」という要件を実装するために正しいASL(Amazon States Language)の構成はどれですか?
Step FunctionsのASL(Amazon States Language)では、Retryフィールドでリトライを設定します。ErrorEqualsでエラータイプを指定し、IntervalSeconds(初回待機秒数)、MaxAttempts(最大リトライ回数)、BackoffRate(バックオフ係数)を組み合わせて指数バックオフを実現します。最大リトライ超過後の処理にはCatchフィールドを使用し、States.ALLですべてのエラータイプをキャッチして別ステートへ遷移できます。 選択肢BはRetryのErrorEqualsにStates.Timeoutのみを指定しているため、タイムアウト以外のLambda実行エラーなどをリトライせず要件を満たしません。またCatchのErrorEqualsにStates.TaskFailedのみを指定しているためタイムアウトエラーなどをキャッチできず、エラー通知フローが機能しないケースが生じます。 選択肢CのFallbackフィールドはStep FunctionsのASLに存在しない非標準フィールドです。 選択肢DのErrorHandlerフィールドもStep FunctionsのASLに存在しない非標準フィールドです。