Q24 — AWS SAA-C03 第12章
第 24/100 問 | ← 第12章
Q824. ソリューションアーキテクトが、複数の可用性ゾーンにまたがるプライベートサブネット上で AWS Lambda で実行される決済処理アプリケーションを設計しています。このアプリケーションは複数の Lambda 関数を使用し、1日に何百万件ものトランザクションを処理します。アーキテクチャは、アプリケーションが重複した支払いを処理しないことを保証する必要があります。これらの要件を満たすソリューションはどれですか?
- A. Lambda を使用して支払期限到来分の全支払いを取得し、それらを Amazon S3 バケットに公開します。S3 バケットをイベント通知設定し、その通知によって別の Lambda 関数を起動して支払期限到来分の支払いを処理させます。
- B. Lambda を使用して支払期限到来分の全支払いを取得し、それらを Amazon Simple Queue Service (Amazon SQS) 標準キューに公開します。別の Lambda 関数を設定して、この SQS 標準キューをポーリングし、支払期限到来分の支払いを処理させます。
- C. Lambda を使用して支払期限到来分の全支払いを取得し、それらを Amazon Simple Queue Service (Amazon SQS) FIFO キューに公開します。別の Lambda 関数を設定して、この FIFO キューをポーリングし、支払期限到来分の支払いを処理させます。 ✓
- D. Lambda を使用して支払期限到来分の全支払いを取得し、それらを Amazon DynamoDB テーブルに保存します。DynamoDB テーブルに対してストリームを有効化し、そのストリームによって別の Lambda 関数を起動して支払期限到来分の支払いを処理させます。
正解: C. Lambda を使用して支払期限到来分の全支払いを取得し、それらを Amazon Simple Queue Service (Amazon SQS) FIFO キューに公開します。別の Lambda 関数を設定して、この FIFO キューをポーリングし、支払期限到来分の支払いを処理させます。
解説
要件を満たすソリューションは、選択肢 C です。つまり、「Lambda を使用して支払期限到来分の全支払いを取得し、それらを Amazon SQS FIFO キューに公開し、別の Lambda 関数を設定してその FIFO キューをポーリングし、支払期限到来分の支払いを処理させる」方法です。Amazon SQS FIFO キューを活用することで、メッセージ(支払期限到来分の支払い)が受信順に処理されることを保証できます。FIFO(First-In-First-Out)キューは、メッセージ処理の順序を厳密に保証するため、重複支払いの防止に不可欠です。最初の Lambda 関数が支払期限到来分の支払いを取得し、それを SQS FIFO キューに送信します。その後、2番目の Lambda 関数がこの FIFO キューをポーリングして支払いを処理し、必要なレコードを更新したり、その他の必要なアクションを実行したりします。選択肢 A では、Amazon S3 バケットとイベント通知を用いたアプローチが提案されていますが、これは機能的には可能ですが、SQS FIFO キューほど厳密な順序保証を提供しません。S3 バケット内のイベント順序は保証されておらず、結果として重複支払いが発生する可能性があります。選択肢 B では、Amazon SQS 標準キューの利用が提案されていますが、標準キューは信頼性とスケーラビリティに優れていますが、FIFO キューが提供するような厳密な順序保証はありません。標準キューを使用すると、処理順序が乱れて重複支払いが発生するリスクがあります。選択肢 D では、Amazon DynamoDB テーブルへの保存と DynamoDB ストリームによる Lambda 呼び出しが提案されていますが、DynamoDB ストリームはテーブル変更のキャプチャと反応には有効ですが、SQS FIFO キューほどの順序保証は提供しません。重複防止のための追加ロジックを実装しない限り、ストリーム経由での重複支払い処理が発生する可能性があります。したがって、選択肢 C が最も適切なソリューションであり、SQS FIFO キューを用いることで処理順序を保証し、AWS Lambda 上で動作する決済処理アプリケーションにおける重複支払いを確実に防止できます。