Q63 — AWS SAA-C03 第16章

第 63/100 問 | ← 第16章

Q1263. ある企業が、ユーザーがアップロードする文書から情報を処理するアプリケーションを運用しています。ユーザーが新しい文書を Amazon S3 バケットにアップロードすると、AWS Lambda 関数が起動され、その文書から情報を処理します。しかし、最近アップロードされた多くの文書が処理されていないことが判明しました。企業は、各文書が確実に処理されるようにし、初回の処理でエラーが発生した場合でも再試行(リトライ)を実行できるようにしたいと考えています。これらの要件を満たすソリューションはどれですか?

正解: D. Lambda 関数のイベントソースとして Amazon Simple Queue Service (Amazon SQS) キューを設定します。また、S3 バケットの S3 イベント通知を設定し、新しい文書のアップロードイベントをこの SQS キューに送信するようにします。

解説

企業は、アップロードされたすべての文書が Lambda 関数によって確実に処理され、初回処理に失敗した場合でも自動的に再試行される仕組みを必要としています。このソリューションは以下の条件を満たす必要があります: ・配信保証(文書が失われないこと) ・再試行機能(初回処理失敗時に自動でリトライできること) ・スケーラブルかつコスト効率が良く、不要な複雑さがないこと 正解:D D. Lambda 関数のイベントソースとして Amazon SQS キューを設定し、S3 バケットの S3 イベント通知を設定して、新しい文書のアップロードイベントをこの SQS キューに送信する。 なぜ D が正しいのか? SQS は信頼性の高いメッセージ配信と再試行機能を提供します。 S3 の文書アップロードイベントが Lambda 関数を直接起動する場合、Lambda の処理が失敗するとイベントは失われます(再試行メカニズムがありません)。一方、SQS を中間層として使用することで、処理に失敗したメッセージはキュー内に残り、再試行されます。SQS は指数バックオフを伴う自動再試行を実行し、メッセージが成功裏に処理されるか、または有効期限(maxReceiveCount で設定可能)が切れるまで継続します。 S3 と Lambda を疎結合化します。 S3 イベント通知は、大規模利用時に信頼性が低下することがあります(スロットリングや一時的なイベント欠落など)。SQS はバッファとして機能し、Lambda がビジー状態であったり障害を起こしたりしても、イベントが失われることを防ぎます。 スケーラブルかつコスト効率が良いです。 SQS はサーバーレスで自動スケーリングされ、数百万件のメッセージを低コストで処理できます。Application Load Balancer(選択肢 C)や AWS Batch(選択肢 B)のような、不要な複雑さとコストを伴うソリューションは不適切です。 他の選択肢が不適切な理由: A:API Gateway + Lambda では、ユーザーが API 経由でリクエストを送信する必要がありますが、これは S3 への自動アップロードとは整合しません。また、Lambda 処理失敗時の再試行は保証されず、エラー応答が返るだけで文書の再処理は行われません。さらに、これはイベント駆動型ではなく、手動呼び出しを前提としています。 B:S3 レプリケーション + AWS Batch は過剰な複雑さを導入します。レプリケーションには遅延があり(1日1回のスケジュール)、文書が即座に処理されません。また、単純な文書処理には AWS Batch はオーバーキルであり、コストと管理負荷が高くなります。さらに、Batch ジョブには組み込みの再試行ロジックがなく、監視しないと失敗が検知されません。 C:Application Load Balancer(ALB)+Lambda は、イベント処理向けではありません。ALB は HTTP トラフィック向けであり、S3 イベント通知とは互換性がありません。また、Lambda 処理失敗時に再試行機能はなく、リクエストは失われます。さらに、ALB の課金は SQS よりも高コストです。 実装手順(選択肢 D): ・SQS キュー(順序性が必要なら FIFO、そうでなければ Standard)を作成します。 ・S3 イベント通知を設定し、s3:ObjectCreated:* イベントをこの SQS キューに送信するようにします。 ・Lambda を SQS イベントソースとして設定し(バッチサイズおよび再試行ポリシーを構成)、メッセージ処理後に正常終了した場合のみメッセージをキューから削除するよう Lambda を更新します。 最終推奨: 最適な選択肢は D(SQS + S3 イベント通知 + Lambda)です。 ・配信保証(文書の喪失なし) ・処理失敗時の自動再試行 ・スケーラブルかつコスト効率の良いサーバーレスアーキテクチャ