AWS re:Postを使用することにより、以下に同意したことになります AWS re:Post 利用規約

Amazon S3 イベント通知で Lambda 関数が呼び出されない場合の問題をトラブルシューティングする方法を教えてください。

所要時間1分
0

Amazon Simple Storage Service (Amazon S3) イベント通知で、AWS Lambda 関数を呼び出すように設定しましたが、その関数が Amazon S3 イベントが発生しても呼び出されません。

解決策

注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。

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

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 関数の IAM リソースベースのポリシーに、Amazon S3 が関数を呼び出すために必要なアクセス許可があることを確認する

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 を使用してイベント通知を追加した場合、関数のポリシーは自動的に更新されません。

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

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

詳細については、「Lambda 関数を非同期で呼び出す」を参照してください。

関連情報

Amazon S3 イベント通知で Lambda 関数が呼び出されない場合、問題をトラブルシューティングするために AWS Systems Manager Automation を使用する方法を教えてください

Lambda を使用して Amazon S3 イベント通知を処理する

チュートリアル: Amazon S3 トリガーを使用して Lambda 関数を呼び出す

Amazon S3 イベント通知を作成するときに「次の宛先の設定を検証できません」というエラーが発生する理由を知りたいです

Amazon S3 イベント通知を設定して、別の AWS アカウントにある Lambda 関数を呼び出す方法を教えてください

AWS公式
AWS公式更新しました 1ヶ月前
コメントはありません

関連するコンテンツ