無限ノック › SAA 練習問題一覧 › 問題
SAA弾力性に優れたアーキテクチャの設計

EC サイトが AWS Step Functions を使って「在庫確認 → 決済処理 → 配送手配」という注文処理ワークフローをオーケストレーションしています。決済処理ステップでは外部決済プロバイダーを呼び出す Lambda 関数を実行しており、一時的なネットワークエラーによる失敗と、カード残高不足などの恒久的なビジネスエラーの両方が発生します。一時的エラーは自動でリトライし、恒久的エラーは在庫を戻す補償処理ステップへ遷移させる必要があります。最も適切な実装はどれですか?

A
Lambda 関数内に try-catch を実装し、一時的エラーの場合は Amazon SQS キューにメッセージを送信して別の Lambda 関数で再処理させる
Lambda 内で SQS 再送は機能しますが、ワークフロー全体の状態管理が分散・複雑化し、Step Functions の実行状態と SQS キューの状態が乖離するリスクがあります。
B
Step Functions ステートマシンの決済ステップに Retry(指数バックオフ)と Catch を設定し、一時的エラーをエラー名で指定してリトライし、恒久的エラーを Catch で捕捉して補償トランザクションステップへ遷移させる
✓ 正解
Step Functions の各ステートには Retry と Catch を宣言的に定義できます。Retry では MaxAttempts・IntervalSeconds・BackoffRate(指数バックオフの倍率)をエラー名(例: Lambda.ServiceException)ごとに設定してリトライを自動化できます。Catch では別のエラー名(例: カスタム例外 CardDeclinedError)を捕捉して補償ステップ(在庫戻し)へ遷移できます。Lambda 関数自体はシンプルに保ちつつ、ワークフローレベルで弾力的なエラーハンドリングが宣言的に実現できます。
C
Amazon EventBridge ルールで Lambda の失敗イベントを検知し、Step Functions の実行を最初のステートから再起動する
EventBridge から再起動は Step Functions 実行を最初から再起動するため、完了済みの在庫確認ステップが重複実行され、二重引き当てなど整合性の問題を引き起こします。
D
Lambda 関数に SQS デッドレターキュー(DLQ)を設定し、処理に失敗したイベントを DLQ に蓄積して後から手動で再処理する
DLQ は Lambda が非同期呼び出しされる場合に有効ですが、Step Functions からの同期呼び出し(RequestResponse)では DLQ は機能しません。

解説

Step Functions の各ステートには Retry と Catch を宣言的に定義できます。Retry では MaxAttempts・IntervalSeconds・BackoffRate(指数バックオフの倍率)をエラー名(例: Lambda.ServiceException)ごとに設定してリトライを自動化できます。Catch では別のエラー名(例: カスタム例外 CardDeclinedError)を捕捉して補償ステップ(在庫戻し)へ遷移できます。Lambda 関数自体はシンプルに保ちつつ、ワークフローレベルで弾力的なエラーハンドリングが宣言的に実現できます。 選択肢AのLambda 内で SQS 再送は機能しますが、ワークフロー全体の状態管理が分散・複雑化し、Step Functions の実行状態と SQS キューの状態が乖離するリスクがあります。 選択肢CのEventBridge から再起動は Step Functions 実行を最初から再起動するため、完了済みの在庫確認ステップが重複実行され、二重引き当てなど整合性の問題を引き起こします。 選択肢DのDLQ は Lambda が非同期呼び出しされる場合に有効ですが、Step Functions からの同期呼び出し(RequestResponse)では DLQ は機能しません。

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

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

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