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 イベントタイプを指定する必要があります。指定しなかったイベントタイプが Amazon S3 バケットで発生しても、Amazon S3 は通知を送信しません。

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

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

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

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

たとえば、プレフィックスの値を「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 関数スケーリング」を参照してください。