Amazon S3 イベント通知が Lambda 関数を呼び出さないのはなぜですか?

最終更新日: 2021 年 6 月 15 日

AWS Lambda 関数を呼び出すように Amazon Simple Storage Service (Amazon S3) イベント通知を設定しました。ところが、Amazon S3 イベントが発生しても、この関数が呼び出されません。この問題をトラブルシューティングする方法を教えてください。

解決方法

注意:AWS Command Line Interface (AWS CLI) コマンドの実行中にエラーが発生した場合は、最新の AWS CLI バージョンを使用していることを確認してください

Amazon S3 イベントタイプが正しく設定されていることを確認してください。

Amazon S3 イベント通知を設定するときは、どの サポートされている Amazon S3 イベントタイプにより、Amazon S3 が通知を送信するかを指定する必要があります。指定しなかったイベントタイプが S3 バケットで発生しても、Amazon S3 は通知を送信しません。

オブジェクトキー名のフィルターが URL エンコード (パーセントエンコード) 形式であることを確認します。

イベント通知がオブジェクトキー名のフィルタリングを使用するように設定されている場合、通知は、特定のプレフィックスまたはサフィックスを持つオブジェクトに対してのみ発行されます。

プレフィックスまたはサフィックスに以下の特殊文字を使用する場合は、URL エンコード (パーセントエンコード) 形式で入力する必要があります。

  • 括弧 (「()」)
  • ASCII 文字の範囲 00~1F 16進 (0~31 10 進) および 7F (127 10 進)
  • ドル (「$」)
  • アンパサンド (「&」)
  • プラス記号 (「+」)
  • コンマ (「,」)
  • コロン (「:」)
  • セミコロン (「;」)
  • 等号 (「=」)
  • 疑問符 (「?「)
  • アットマーク (「@」)
  • スペース (「 」)

例えば、プレフィックスの値を「test=abc/」と定義するには、その値に「test%3Dabc/」と入力します。

注意:ワイルドカード文字 (「*」) をフィルターでプレフィックスまたはサフィックスとして使用して、任意の文字を表すことはできません。

詳細については、オブジェクトメタデータの操作を参照してください。

Lambda 関数の AWS Identity and Access Management (IAM) ポリシーに必要なアクセス許可があることを確認します

Lambda 関数のリソースベースのポリシーをチェックして、Amazon S3 バケットが関数を呼び出すことを許可していることを確認します。そうでない場合は、AWS のサービスへの関数アクセスの付与の手順に従って、必要なアクセス許可を追加します。

詳細については、AWS Lambda のアクセス許可を参照してください。

注意: Amazon S3 コンソールを使用して新しいイベント通知を追加する場合、必要なアクセス許可が関数のポリシーに自動的に追加されます。AWS CLIput-bucket-notification-configuration アクションを使用してイベント通知を追加する場合、関数のポリシーは自動的には更新されません。

Amazon S3 イベント通知からの同時呼び出しを処理するように Lambda 関数が設定されていることを確認します。

Amazon S3 イベント通知からの同時呼び出しを処理するように Lambda 関数を設定する必要があります。呼び出しリクエストが関数がスケーリングできるよりも速く到着した場合、または関数の同時実行が最大である場合、Lambda はリクエストをスロットリングします。

詳細については、>非同期呼び出しおよび AWS Lambda 関数のスケーリングを参照してください。