スキップしてコンテンツを表示

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

所要時間2分
0

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

簡単な説明

トラブルシューティングには、AWS Systems Manager オートメーションランブックの AWSSupport-TroubleshootLambdaS3Event を使用します。または、Lambda 関数を手動でトラブルシューティングしてください。

解決策

Systems Manager オートメーションランブックを実行する

**前提条件: ** ランブックを開始する前に、AWS Identity and Access Management (IAM) のユーザーまたはロールに必要な権限があることを確認してください。詳細については、AWSSupport-TroubleshootLambdaS3Event の「必要な IAM アクセス許可」セクションを参照してください。

次の手順を実行します。

  1. Systems Manager コンソールを開きます。

  2. ナビゲーションペインで [ドキュメント] をクリックします。

  3. 検索バーに AWSSupport-TroubleshootLambdaS3Even を入力します。

  4. AWSSupport-TroubleshootLambdaS3Event を選択してください。

  5. [オートメーションの実行] を選択します。

  6. [実行] をクリックします。

    **注: ** テストが完了するまでに最大 15 分かかる場合があります。ランブックが実行する手順の一覧については、「AWSSupport-TroubleshootLambdaS3Event」の「ドキュメントステップ」セクションを参照してください。

Lambda 関数の手動トラブルシューティング

**注: ** 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 は特定のプレフィックスまたはサフィックスを持つオブジェクトに対してのみ通知を発行します。イベント通知で指定されているプレフィックスまたはサフィックスフィルターに、アップロードされたオブジェクトキー名が含まれていることを確認してください。また、Lambda 関数が S3 バケットと同じ AWS リージョンにあることを確認してください。

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

オブジェクトキー名をフィルター処理するには、プレフィックスまたはサフィックス内の特定の特殊文字を URL エンコードまたはパーセントエンコードする必要があります。たとえば、プレフィックスの値を test=abc/ と定義するには、URL エンコード値である test%3Dabc/ を入力します。

オブジェクトキー名の特定の文字処理の詳細については、「オブジェクトキーの名前付けに関するガイドライン」を参照してください。

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

Lambda 関数の 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 イベント通知の使用時に、"Unable to validate the following destination configurations" というエラーが発生する理由を知りたいです。

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

AWS公式更新しました 17日前
1コメント

This article was reviewed and updated on 2026-08-26.

エキスパート

応答済み 8日前

関連するコンテンツ