Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
EventBridge ルールに関する問題をトラブルシューティングする方法を教えてください
Amazon EventBridge ルールがターゲットをトリガーしていない問題を解決したいです。
簡単な説明
EventBridge ルールがターゲットをトリガーしない問題を解決するには、次の手順を実行してください。
- 該当するイベントが発生したことを確認します。
- そのイベントがルールのイベントパターンと一致していたことを確認します。
- ターゲットがイベントを正常に処理したことを確認します。
解決策
注: 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 メトリクスを確認するには、次の手順を実行します。
- CloudWatch コンソールを開きます。
- [すべてのメトリクス] を選択します。
- [AWS/イベント] 名前空間を選択します。
- ルールで TriggeredRules、Invocations、FailedInvocations メトリクスを選択します。
注: これらのメトリクスは 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 を構成するには、次の手順を実行します。
- SQS キューを作成します。
- イベントルールを選択し、[編集] を選択します。
- [ターゲット] タブを選択し、[編集] を選択します。
- 再試行ポリシーを設定するターゲットで [その他の設定] タブを展開します。
- [デッドレターキュー] セクションで、SQS DLQ が同じアカウントにあるか、別のアカウントにあるかに応じてオプションを選択します。
- [現在の AWS アカウントの Amazon SQS キューを選択してデッドレターキューとして使用する] を選択し、SQS キュー名を選択します。
- [更新] を選択します。
ルールの呼び出しが失敗すると、DLQ はエラーメッセージを記録します。このエラーを確認するには、次の手順を実行します。
- SQS キューで メッセージの [送受信] を選択します。
- [メッセージをポーリング] を選択します。
- エラーメッセージを選択し、[属性] セクションに移動します。
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 ルールによってトリガーされなかった理由を知りたいです
- 言語
- 日本語
