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

EventBridge ルールに関する問題をトラブルシューティングする方法を教えてください

所要時間2分
0

Amazon EventBridge ルールがターゲットをトリガーしていない問題を解決したいです。

簡単な説明

EventBridge ルールがターゲットをトリガーしない問題を解決するには、次の手順を実行してください。

  1. 該当するイベントが発生したことを確認します。
  2. そのイベントがルールのイベントパターンと一致していたことを確認します。
  3. ターゲットがイベントを正常に処理したことを確認します。

解決策

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

該当するイベントが発生したことを確認する

次の操作を行います。

  • AWS CloudTrail がイベントをキャプチャした場合は、CloudTrail ログを分析してください。API コールが予定通りの時刻に発生し、イベントパターン内のすべてのフィールドと一致することを確認します。
    注: 一部の AWS サービスは、us-east-1 リージョンでのみ利用可能です。たとえば、AWS Identity and Access Management (IAM) API コールは us-east-1 リージョンでのみ公開されています。別のリージョンでルールを作成した場合、これらのイベントは EventBridge に転送されず、ルールはトリガーされません。
  • EventBridge コンソールには、AWS イベントとパートナーイベントの例を含むサンドボックスツールが用意されています。このツールを使用すると、イベントパターンを AWS イベント、パートナーイベント、カスタムイベントと照合できます。TestEventPattern API を使用しても、イベントパターンとイベントが一致していることを確認できます。
  • EventBridge には、正常に一致したイベントのルールを報告する TriggeredRules メトリクス があります。TriggeredRules メトリクスのタイムスタンプを参照し、イベントが発生したタイミングを確認します。

CloudWatch メトリクスを確認する

EventBridge ルールに関する Amazon CloudWatch メトリクスを確認するには、次の手順を実行します。

  1. CloudWatch コンソールを開きます。
  2. [すべてのメトリクス] を選択します。
  3. [AWS/イベント] 名前空間を選択します。
  4. ルールで TriggeredRulesInvocationsFailedInvocations メトリクスを選択します。
    注: これらのメトリクスは SUM 統計情報で確認できます。

イベントがルールのイベントパターンと一致したことを確認します。

イベントの照合では、イベントパターンのすべてのフィールドが一致する必要があります。サンドボックスツールを使用して、イベントを少数のフィールドを含むイベントパターンと照合してテストします。次のように、シンプルなイベントパターンを使用してください。

{    "source": ["aws.s3"]
}

正常に一致した場合は、イベントパターンを複雑にしてください。イベントパターンに追加した各フィールドは、一致するイベントをフィルターし、対象の絞り込みを行います。ユーザーが CloudWatch Logs グループターゲットまたは Amazon Simple Notification Service (Amazon SNS) トピックを一時的にアタッチすると、正確なパターンを取得できます。このアクションにより、ターゲットに転送されたイベントをキャプチャしたり、ターゲットの設定ミスを切り分けたりします。さらに、イベントがターゲットに配信されたことと、入力トランスフォーマーが正しく構成されていることも確認されます。

ターゲットに配信されたイベントに応じてパターンを書き換え、ユーザーの要件を満たしてください。イベントパターンの例を次に示します。

{  "source": [
    "aws.s3"
  ],
  "detail-type": [
    "AWS API Call via CloudTrail"
  ],
  "detail": {
    "eventName": [
      "PutObject",
      "DeleteObject",
      "DeleteObjects"
    ],
    "requestParameters": {
      "bucketName": [
        "123456789012-prod-app1"
      ],
      "key": [
        {
          "prefix": "feature1/"
        },
        {
          "prefix": "feature2/"
        }
      ]
    }
  }
}

注: このパターンは、Amazon Simple Storage Service (Amazon S3) API コールのリストを、feature1 または feature2 で始まるオブジェクトの特定のバケットと照合します。

フィールドを徐々に追加すると、イベントと一致しないフィールドを切り分けられます。

ターゲットがイベントを正常に処理したことを確認する

Invocations メトリクスは、ルールが呼び出しの成功と失敗を示すターゲットにイベントを転送した際に、データポイントを発行します。EventBridge は、ターゲットの呼び出しに永続的に失敗する場合、FailedInvocations データポイントを発行します。このデータポイントは、ターゲット構成に問題があるか、不適切なアクセス許可に関する問題があることを示します。

EventBridge には、ターゲットの呼び出しに必須のアクセス許可が必要です。IAM ロールまたはリソースポリシーでターゲットにアクセス許可を付与できます。EventBridge を使用してルールを作成する場合は、コンソールは必須のアクセス許可を関連リソースに自動的に追加します。

注: ルールのデプロイに AWS SDK、AWS コマンドラインインターフェイス (AWS CLI)、または AWS CloudFormation を使用する場合は、アクセス許可を設定してください。

FailedInvocations データポイントがない場合は、Amazon EventBridge はイベントをターゲットに正常に配信したことが示唆されます。ただし、ターゲットは正しく機能しない可能性があります。たとえば、AWS Lambda ターゲットでは、実行時またはスロットリング時にエラーが発生する可能性があります。詳細については、ターゲットの Amazon CloudWatch メトリクスと関連するログを確認してください。

FailedInvocations が発生した原因を特定するには、Amazon Simple Queue Service (Amazon SQS) のデッドレターキュー (DLQ) をターゲットに関連付けます。

ターゲットで DLQ を構成するには、次の手順を実行します。

  1. SQS キューを作成します。
  2. イベントルールを選択し、[編集] を選択します。
  3. [ターゲット] タブを選択し、[編集] を選択します。
  4. 再試行ポリシーを設定するターゲットで [その他の設定] タブを展開します。
  5. [デッドレターキュー] セクションで、SQS DLQ が同じアカウントにあるか、別のアカウントにあるかに応じてオプションを選択します。
  6. [現在の AWS アカウントの Amazon SQS キューを選択してデッドレターキューとして使用する] を選択し、SQS キュー名を選択します。
  7. [更新] を選択します。

ルールの呼び出しが失敗すると、DLQ はエラーメッセージを記録します。このエラーを確認するには、次の手順を実行します。

  1. SQS キューで メッセージの [送受信] を選択します。
  2. [メッセージをポーリング] を選択します。
  3. エラーメッセージを選択し、[属性] セクションに移動します。

EventBridge には Lambda ターゲットの呼び出しに必要なアクセス許可がないことを示す DLQ からのメッセージ例を次に示します。

"MessageAttributes": {                "ERROR_CODE": {
                    "StringValue": "NO_PERMISSIONS",
                    "DataType": "String"
                },
                "ERROR_MESSAGE": {
                    "StringValue": "User: events.amazonaws.com is not authorized to perform: lambda:InvokeFunction on resource: arn:aws:lambda:us-east-1:123456789012:function:Hello_World because no resource-based policy allows the lambda:InvokeFunction action (Service: AWSLambdaInternal; Status Code: 403;
Error Code: AccessDeniedException; Request ID: 6635c4c4-9c54-416e-bc40-ef25bad0aca5; Proxy: null)",
                    "DataType": "String"
                },

関連情報

Amazon EventBridge のトラブルシューティング

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

EventBridge Scheduler のエラーをトラブルシューティングする方法を教えてください

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

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

関連するコンテンツ