SAA-C03弾力性に優れたアーキテクチャの設計MEDIUM単一選択

ある企業が、AWS Lambda を使ってイベント駆動のデータ処理パイプラインを構築している。Amazon SNS からのメッセージで Lambda が起動し、処理結果を S3 に保存する。Lambda 関数の実行が最大同時実行数(デフォルト 1,000)に達した場合に実行されなかったイベントを失わないようにしたい。最も適切な設計はどれか。

  1. A. Lambda 関数の最大同時実行数を無制限に設定して、すべてのイベントを確実に処理する。
  2. B. Lambda 関数のタイムアウト値を最大(15 分)に設定して、1 回の実行で多くのメッセージを処理できるようにする。
  3. C. SNS と Lambda の間に Amazon SQS キューを挟む。SNS はキューにメッセージを送信し、Lambda は SQS のイベントソースマッピングで消費する。同時実行が上限に達しても、メッセージは SQS に保持され後から処理される。
  4. D. Amazon EventBridge を使って SNS イベントをルーティングし、イベントが失われないようにする。
解答と解説を見る

正解: C

SNS は Lambda を直接起動する同期的なトリガーであり、Lambda の同時実行数が上限に達するとメッセージが失われる。SNS → SQS → Lambda の構成(Fan-Out パターン)にすることで、SNS はキューにメッセージを送信(SQS の耐久性により保存される)し、Lambda は同時実行が空いた時点でキューからメッセージを取得して処理できる。SQS には可視性タイムアウト・DLQ・保持期間(最大 14 日)があり、メッセージ損失を防げる。選択肢Aは Lambda の同時実行数をアカウント全体のソフト上限(デフォルト 1,000、引き上げ可能)まで増やすことはできるが、「無制限」は設定できない。また急激な急増時には上限超えが発生する可能性がある。選択肢Bはタイムアウト延長でメッセージ損失は防げない。同時実行の問題が原因であるためタイムアウト設定では解決しない。選択肢DのEventBridge は SNS の代替として使えるが、Lambda の同時実行上限問題はSQS によるバッファリングなしでは解決しない。

▸ この試験を本気で演習する(全150問・無料)