無限ノック › DVA 練習問題一覧 › 問題
DVAトラブルシューティングと最適化

注文処理ワークフローを管理するAWS Step Functions ステートマシンがあります。`ValidateOrderTask`(Lambda統合)は不正な注文データを受け取った場合に`OrderValidationError`というカスタムエラーをスローします。このエラーが発生した場合は最大3回(初回含む)試行し、それでも失敗した場合は`NotifyFailureTask`ステートに遷移させる要件があります。この要件を正しく実装する方法はどれですか?

A
Lambda関数内にtry-catchブロックを実装してOrderValidationErrorをキャッチし、最大3回(初回含む)のリトライロジックをコード内で完結させる
Lambda内のリトライロジックはStep Functionsのフロー制御を迂回する。ステートマシンはValidateOrderTaskを1回の実行として扱うため、全試行失敗後のCatchによるNotifyFailureTaskへの遷移が期待通りに動作しない。
B
ValidateOrderTaskのTask定義にRetry(ErrorEquals:["OrderValidationError"], MaxAttempts:2)とCatch(ErrorEquals:["OrderValidationError"], Next:"NotifyFailureTask")を設定する
✓ 正解
RetryブロックのMaxAttempts:2は初回失敗後に最大2回リトライ(計3回の試行)を意味し、全試行失敗後にCatchブロックがOrderValidationErrorをキャッチしてNotifyFailureTaskへ遷移する。Step Functionsエラーハンドリングの標準的な正しい実装。
C
EventBridgeルールでStep Functionsの実行失敗イベントをサブスクライブし、NotifyFailureTask相当のLambda関数を非同期的にトリガーして通知する
EventBridgeはStep Functionsの実行完了・失敗イベントを外部で非同期検知するサービスであり、ステートマシン内でステートを遷移させる制御機能は持たない。ステートマシン内フロー制御にはCatchを使う必要がある。
D
ValidateOrderTask用のLambdaにSQSデッドレターキューを追加し、失敗したメッセージをNotifyFailureTask用のSQSキューへ自動転送する
SQSのDLQはLambdaの非同期呼び出し(Event型)に対してのみ適用される設定であり、Step FunctionsがLambdaを同期呼び出し(RequestResponse型)している場合はDLQに送信されない。フロー制御もできない。

解説

Step FunctionsのTask状態はRetryとCatchの設定を直接定義できます。Retryブロックに`ErrorEquals: ["OrderValidationError"]`と`MaxAttempts: 2`を設定すると、初回失敗後に最大2回リトライ(計3回の試行)します。全リトライが失敗した場合、Catchブロックが`OrderValidationError`をキャッチして`NotifyFailureTask`ステートに遷移します。これはStep Functionsのオーケストレーション機能を正しく活用した実装です。 選択肢AのLambda内リトライはStep FunctionsのTask観点では1回の実行として扱われ、Catchによる状態遷移が機能しない。 選択肢CのEventBridgeはStep Functionsの外部でイベントを処理するサービスであり、ステートマシン内のステート間遷移制御には使用できない。 選択肢DのSQSデッドレターキューはLambdaの非同期呼び出し(Event型)にのみ適用され、Step Functionsの同期呼び出し(RequestResponse)では機能しない。

ドメイン別正答率・予想スコアでリアルタイムに実力把握

無限ノックでDVAを徹底対策。全問AI生成のオリジナル問題。

無料で演習を始める →
← DVA の問題一覧に戻る