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

Lambda 関数が EventBridge ルールによってトリガーされなかった理由を知りたいです。

所要時間2分
0

作成した Amazon EventBridge ルールが AWS Lambda 関数を呼び出せないため、その原因をトラブルシューティングしたいです。

解決策

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

EventBridge ルールの Amazon CloudWatch メトリクスを確認する

次の手順を実行します。

  1. CloudWatch コンソールを開きます。
  2. ナビゲーションペインの [メトリクス][すべてのメトリクス] を選択します。
  3. AWS/Events 名前空間を選択します。
  4. ルールの TriggeredRulesInvocationsFailedInvocations メトリクスを選択します。必要に応じて、これらのメトリクスを SUM 統計情報を使用して確認します。
    注: メトリクスに FailedInvocations データポイントが含まれている場合、ルールがターゲットを呼び出せなかった可能性があります。詳細については、「EventBridge のメトリクス」を参照してください。

Lambda 関数のリソースポリシーに適切なアクセス許可があるかどうかを確認する

EventBridge コンソールを使用してルールを作成すると、コンソールは適切なアクセス許可を関数のリソースベースのポリシーに自動的に追加します。AWS CLI、AWS SDK、または AWS CloudFormation を使用してルールを作成する際は、リソースベースのポリシーでアクセス許可を手動で適用する必要があります。このアクセス許可は、EventBridge サービスに Lambda 関数を呼び出すためのアクセス許可を付与します。

ターゲット Lambda 関数に関連付けられているアクセス許可を確認する

次の手順を実行します。

  1. Lambda コンソールを開きます。
  2. ターゲットの Lambda 関数を選択します。
  3. [設定] タブを選択し、[アクセス許可] を選択します。
  4. [リソースベースのポリシー] セクションでポリシードキュメントを確認します。
    **注:**または、適切な入力を指定して GetPolicy API または AWS CLI コマンド get-policy を使用し、Lambda 関数のリソースポリシーを取得します。

次のリソースポリシーの例では、EventBridge が Lambda 関数を呼び出すことができます。

{  "Effect": "Allow",
  "Action": "lambda:InvokeFunction",
  "Resource": "arn:aws:lambda:region:account-id:function:function-name",
  "Principal": {
    "Service": "events.amazonaws.com"
  },
  "Condition": {
    "ArnLike": {
      "AWS:SourceArn": "arn:aws:events:region:account-id:rule/rule-name"
    }
  },
  "Sid": "InvokeLambdaFunction"
}

注: Resource を Lambda 関数の ARN に、SourceArn をルールの ARN に置き換えます。

リソースポリシーを更新する

次の手順を実行します。

  1. Lambda コンソールを開きます。
  2. ターゲットの Lambda 関数を選択します。
  3. [設定] タブを選択し、[権限] を選択します。
  4. [リソースベースのポリシー] セクションで [アクセス許可を追加] を選択します。
  5. [AWS Service - EventBridge] を選択します。
  6. ポリシーステートメントのオプションの識別子として、Statement ID を指定します。
  7. Principal には、events.amazonaws.com を使用します。
  8. [ソース の ARN] を EventBridge ルールの ARN に指定します。
  9. [アクション] では、ドロップダウンリストから [Lambda: 関数の呼び出し] を選択します。
  10. [保存] を選択します。

AddPermission API を使用してもポリシーを更新できます。または、次の例のような AWS CLI コマンド add-permission を実行します。

aws lambda add-permission \--function-name MyFunction \--statement-id MyId \
--action 'lambda:InvokeFunction' \
--principal events.amazonaws.com \
--source-arn arn:aws:events:us-east-1:123456789012:rule/MyRule

Amazon SQS のターゲットに DLQ を追加します。

EventBridgeは、Amazon Simple Queue Service (Amazon SQS ) にデッドレターキュー (DLQ) を使用して、ターゲットに配信できなかったイベントを保存します。FailedInvocations を報告しているターゲットに SQS DLQ をアタッチします。DLQ からイベントを取得すると、問題の詳細を把握できます。失敗したイベントは、ターゲットに再度送信して処理できます。

次の手順を実行します。

  1. EventBridge コンソールで関連するルールを開きます。
  2. [ターゲット] から [編集] を選択し、[その他の設定] セクションを展開します。
  3. [デッドレターキュー] で、[現在の AWS アカウントの Amazon SQS キューを選択してデッドレターキューとして使用する] を選択します。
  4. DLQ として使用する SQS キューを選択します。
  5. DLQ を割り当てた後、変更をレビューして保存します。

関連情報

ルールを実行しても、Lambda 関数が呼び出されません

AWS Lambda のアクセス許可

EventBridge でデッドレターキューを使用して未配信イベントを処理する

Amazon EventBridge の障害復旧機能が向上しました

1コメント

タイトルのサービス名が「EbentBridge」となっており、誤っているので、ご確認いただけますか。 なお、英語ページは正しいサービス名になっています。

応答済み 2年前

関連するコンテンツ