Q40 — AWS DOP-C02 第1章
第 40/100 問 | ← 第1章
ある企業が、Amazon S3イベントソースをAWS Lambda関数に設定しました。特定のS3バケットにおいて、新しいオブジェクトが作成されたとき、または既存のオブジェクトが更新されたときに、このLambda関数を実行する必要があります。Lambda関数は、S3イベントのバケット名およびS3オブジェクトキーを用いて、新しいまたは更新されたS3オブジェクトの内容を取得します。Lambda関数は、その内容を解析し、解析結果をAmazon DynamoDBテーブルに保存します。 Lambda関数の実行ロールには、対象S3バケットから読み取る権限およびDynamoDBテーブルに書き込む権限が付与されています。テスト中に、開発者がS3バケットにオブジェクトが追加されたとき、または既存のオブジェクトが更新されたときに、Lambda関数が実行されないことを発見しました。
- A. S3バケットに対してS3バケットポリシーを作成し、S3バケットがLambda関数を呼び出す権限を付与します。
- B. Lambda関数のリソースポリシーを作成し、Amazon S3がS3バケット上でLambda関数を呼び出す権限を付与します。 ✓
- C. Amazon Simple Queue Service(Amazon SQS)キューをLambda関数の失敗先として構成します。Lambda関数を更新し、SQSキューおよびS3イベント通知からのメッセージを処理できるようにします。
- D. Amazon Simple Queue Service(Amazon SQS)キューをS3バケットイベント通知の送信先として構成します。Lambda関数の実行ロールを更新し、SQSキューから読み取る権限を付与します。Lambda関数を更新し、SQSキューからのメッセージを処理できるようにします。
正解: B. Lambda関数のリソースポリシーを作成し、Amazon S3がS3バケット上でLambda関数を呼び出す権限を付与します。
解説
AWSサービス間の権限設定に関する問題です。AWS Lambdaは、S3によるトリガー呼び出しを許可するためのリソースポリシーが必要です。正しい方法は選択肢Bであり、Lambda関数のリソースポリシーを用いてS3がLambdaを呼び出す権限を付与します。選択肢AのS3バケットポリシーは、バケット自体へのアクセスを管理するものであり、Lambdaの権限とは無関係です。選択肢CおよびDはSQSキューを導入しますが、問題は非同期処理またはエラー処理ではなく、単純なトリガー失敗に関するものであり、関係ありません。AWSドキュメントによると、S3イベント通知からLambdaへの呼び出しには、Lambda側にs3.amazonaws.comを呼び出し元として許可する権限を追加する必要があります。