SAA弾力性に優れたアーキテクチャの設計
あるメディア企業が、ユーザーの動画アップロードをトリガーとしてAWS Lambdaを非同期(イベント)呼び出しで実行する処理パイプラインを運用しています。Lambda関数は外部の動画トランスコードAPIを呼び出しますが、APIが一時的に利用不可になると、Lambdaのリトライ(最大2回)後も処理が失敗することがあります。以下の2点を最小の運用負荷で実現したいと考えています。
①失敗したイベントのペイロードを保存し、後から手動で再処理できるようにする
②正常に処理が完了した場合のイベント情報を、別のSQSキューに送信して下流サービスに通知するこの要件を満たすための最適な設定はどれですか?
ALambda関数にDead Letter Queue(DLQ)としてSQSキューを設定し、成功時の通知はCloudWatch Logsに出力して下流サービスがポーリングする
(DLQ):DLQは失敗時のルーティングのみに対応しており、成功時の通知には使用できません。要件②を満たせません。またCloudWatch Logsのポーリングは運用負荷が高くなります。
BLambda Destinationsを設定し、「On Failure」に失敗用SQSキュー、「On Success」に通知用SQSキューをそれぞれ指定する
✓ 正解
Lambda Destinationsは、非同期(イベント)呼び出しの成功・失敗それぞれのルーティング先をLambda関数のコード変更なしに設定できる機能です。「On Success」と「On Failure」の両方に対してSQS・SNS・EventBridge・別のLambdaを指定でき、関数の実行結果に加えて入力イベントのペイロードも転送されるため、再処理が容易です。
CLambda関数内にtry-catchを実装し、失敗時はS3にペイロードを保存、成功時はSQSにメッセージを送信するコードを記述する
Lambda関数のtry-catch実装は要件を満たせますが、Lambda Destinationsを使えばコード変更なしに同じことが実現できるため、「最小の運用負荷」という条件に反します。
DLambda関数の最大イベント経過時間(Maximum Event Age)を6時間に設定し、失敗時にAmazon EventBridgeでアラームを発報してSNSで通知する
(Maximum Event Age):最大イベント経過時間はリトライ期間の上限を設定するものであり、失敗ペイロードの保存や成功通知を行う機能は持ちません。
解説
Lambda Destinationsは、非同期(イベント)呼び出しの成功・失敗それぞれのルーティング先をLambda関数のコード変更なしに設定できる機能です。「On Success」と「On Failure」の両方に対してSQS・SNS・EventBridge・別のLambdaを指定でき、関数の実行結果に加えて入力イベントのペイロードも転送されるため、再処理が容易です。
選択肢A(DLQ):DLQは失敗時のルーティングのみに対応しており、成功時の通知には使用できません。要件②を満たせません。またCloudWatch Logsのポーリングは運用負荷が高くなります。
選択肢C(コード実装):要件は満たせますが、Lambda Destinationsを使えばコード変更なしに同じことが実現できるため、「最小の運用負荷」という条件に反します。
選択肢D(Maximum Event Age):最大イベント経過時間はリトライ期間の上限を設定するものであり、失敗ペイロードの保存や成功通知を行う機能は持ちません。
ドメイン別正答率・予想スコアでリアルタイムに実力把握
無限ノックでSAAを徹底対策。全問AI生成のオリジナル問題。
無料で演習を始める →