Amazon Simple Storage Service (Amazon S3) イベント通知で、AWS Lambda 関数を呼び出すように設定しましたが、その関数が Amazon S3 イベントが発生しても呼び出されません。
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
S3 イベント通知を設定するときに、Amazon S3 に通知を送信させるトリガーとなる各イベントタイプを指定する必要があります。指定していないイベントタイプが Amazon S3 バケットで発生しても、Amazon S3 は通知を送信しません。
たとえば、s3:ObjectCreated:Put イベントタイプで Lambda を呼び出すようにイベント通知を設定したとします。大きなファイルをアップロードすると、Amazon S3 は自動的にマルチパートアップロードプロセスを使用してファイルをバケットにアップロードします。このアップロードで Lambda 関数を呼び出すには、s3:ObjectCreated:CompleteMultipartUpload イベントタイプも設定する必要があります。または、s3:ObjectCreated:* イベントタイプを使用して、Amazon S3 がオブジェクトを作成するために使用する各 API の通知をリクエストします。
S3 イベント通知がオブジェクトキー名フィルターを使用する場合、Amazon S3 は特定のプレフィックスまたはサフィックスを持つオブジェクトに対してのみ通知を発行します。イベント通知で指定されているプレフィックスまたはサフィックスフィルターに、アップロードされたオブジェクトキー名が含まれていることを確認してください。
注: フィルターで、任意の文字を表すプレフィックスまたはサフィックスとして、ワイルドカード文字 (*) は使用できません
オブジェクトキー名をフィルター処理するには、プレフィックスまたはサフィックス内の特定の特殊文字を URL エンコード (パーセントエンコード) する必要があります。たとえば、プレフィックスの値を test=abc/ と定義するには、URL エンコード値である test%3Dabc/ を入力します。
オブジェクトキー名の特定の文字処理の詳細については、「オブジェクトキーの名前付けに関するガイドライン」を参照してください。
Lambda 関数の AWS Identity and Access Management (IAM) リソースベースのポリシーをチェックして、そのポリシーがバケットによる関数の呼び出しを許可していることを確認します。バケットが関数を呼び出せない場合は、必要なポリシーを追加します。
ポリシーの例:
{ "Version": "2012-10-17", "Id": "default", "Statement": [ { "Sid": "lambda-allow-s3-my-function", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Condition": { "StringEquals": { "AWS:SourceAccount": "123456789012" }, "ArnLike": { "AWS:SourceArn": "arn:aws:s3:::amzn-s3-demo-bucket" } } } ] }
詳細については、「AWS Lambda でのアクセス許可の管理」を参照してください。
注: Amazon S3 コンソールを使用して新しいイベント通知を追加すると、Amazon S3 は必要なアクセス許可を関数のリソースベースのポリシーに自動的に追加します。ただし、AWS CLI コマンド put-bucket-notification-configuration を使用してイベント通知を追加した場合、関数のポリシーは自動的に更新されません。
S3 イベント通知からの同時呼び出しを処理するように Lambda 関数を設定する必要があります。呼び出しリクエストが関数のスケーリング速度よりも早く届いたり、関数の同時実行数が最大になったりした場合、Lambda はリクエストをスロットリングします。
詳細については、「Lambda 関数を非同期で呼び出す」を参照してください。
Amazon S3 イベント通知で Lambda 関数が呼び出されない場合、問題をトラブルシューティングするために AWS Systems Manager Automation を使用する方法を教えてください
Lambda を使用して Amazon S3 イベント通知を処理する
チュートリアル: Amazon S3 トリガーを使用して Lambda 関数を呼び出す
Amazon S3 イベント通知を作成するときに「次の宛先の設定を検証できません」というエラーが発生する理由を知りたいです
Amazon S3 イベント通知を設定して、別の AWS アカウントにある Lambda 関数を呼び出す方法を教えてください