Amazon EventBridge ルールがターゲットを正常にトリガーまたは呼び出しできなかった原因を解決したいと考えています。
簡単な説明
以下の検証ワークフローを使用して問題を突き止めます。
- 関連するイベント (AWS CloudTrail API 呼び出しや Simple Storage Service (Amazon S3) オブジェクトのアップロードなど) が発生したことを確認します。
- イベントがルールのイベントパターンと一致したことを確認します。
- ターゲットがイベントを正常に処理したことを確認します (例えば、イベントが AWS Lambda 関数を呼び出したなど)。
解決策
Amazon EventBridge ルールに関連する問題をトラブルシューティングするには、以下の手順に従います。
受信イベントを検証する
以下の 1 つ以上の方法で、受信イベントを検証します。
- AWS CloudTrail がイベントをキャプチャした場合は、CloudTrail ログを分析します。API 呼び出しが予定どおりの時刻に発生し、イベントパターンのすべてのフィールドと一致することを確認します。
注: 一部の AWS サービスは us-east-1 リージョンでのみ利用可能です。例えば、AWS Identity and Access Management (IAM) API 呼び出しは us-east-1 リージョンでのみ公開されます。IAM イベントと照合するルールが別のリージョンで作成された場合、それらのイベントは EventBridge に転送されません。そのため、これらのイベントがルールをトリガーすることはありません。
- Amazon EventBridge コンソールは、AWS イベントとパートナーイベントの例を含んだ EventBridge ツールサンドボックスを用意しています。このツールを使用すると、提案されたイベントパターンを AWS イベント、パートナーイベント、カスタムイベントと照合できます。または、TestEventPattern API を使用して、イベントパターンとイベントが一致していることを確認します。
- EventBridge は、正常に一致したイベントのルールを報告するための TriggeredRules メトリクス を提供します。TriggeredRules データポイントのタイムスタンプで、いつイベントが発生したかがわかります。
CloudWatch メトリクスを確認する
Amazon EventBridge ルールの CloudWatch メトリクスを確認するには、以下の手順に従います。
- CloudWatch コンソールを開きます。
- [すべてのメトリクス] を選択します。
- [AWS/イベント] 名前空間を選択します。
- 該当ルールの TriggerRules、Invocations、FailedInvocations (利用可能な場合) メトリクスを選択します。これらのメトリクスは SUM 統計で表示できます。
イベントパターンを検証する
イベントを一致させるには、イベントパターンのすべてのフィールドが一致する必要があります。サンドボックスツールを使用して、目的のイベントをいくつかのフィールドを含むイベントパターンと照合してテストします。例えば、次に示すような単純なイベントパターンを使用します。
{
"source": ["aws.s3"]
}
正常に一致したら、イベントパターンの複雑さを上げます。イベントパターンに追加する各フィールドは、一致するイベントのフィルタリングや、対象の絞り込みを行います。
イベントパターンの例は以下のとおりです。このパターンは、2 つの文字列 (feature1 と feature2) のいずれかで始まるオブジェクトの Amazon S3 API 呼び出しのリストを特定のバケットと照合します。
{
"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/"
}
]
}
}
}
フィールドを徐々に追加して、目的のイベントと一致しないフィールドを分離します。
ターゲットを検証する
-
Invocations メトリクスは、ルールがイベントをターゲットに転送するときにデータポイントを公開します。これにより、成功した呼び出しと失敗した読み出しが示されます。
-
Amazon EventBridge は、ターゲットの呼び出しに永続的に失敗する場合に、FailedInvocations データポイントを発行します。FailedInvocations は、ターゲット構成に問題があることや、アクセス許可が不十分であるために発生する問題を示します。
-
Amazon EventBridge に対して、ターゲットを呼び出すための適切なアクセス許可が付与される必要があります。ターゲットに応じて、AWS Identity and Access Management (IAM) ロールまたはリソースポリシーがアクセス許可を付与します。
-
Amazon EventBridge コンソールを使用してルールを作成すると、コンソールが必要なアクセス許可を関連リソースに自動追加します。
注: AWS SDK、AWS コマンドラインインターフェイス (AWS CLI)、または AWS CloudFormation を使用してルールをデプロイする場合は、アクセス許可を明示的に設定します。
-
FailedInvocations データポイントがまったくない場合、Amazon EventBridge はイベントをターゲットに正常に配信したことになります。ただし、ターゲットが正しく機能していない可能性があります。例えば、AWS Lambda ターゲットでは、実行中またはスロットリング中にエラーが発生する可能性があります。詳細については、ターゲットの Amazon CloudWatch メトリクスと関連ログを確認してください。
-
Amazon Simple Queue Service (Amazon SQS) のデッドレターキュー (DLQ) をターゲットに関連付けます。ターゲットに配信されなかったイベントは、デッドレターキューに送信されます。このメソッドを使用すると、失敗したイベントの詳細情報を取得できます。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 ターゲットを呼び出すために必要なアクセス許可がないことを示しています。
-
Amazon EventBridge ルールは最大 5 つのターゲットをサポートします。一時的に、Amazon CloudWatch Logs グループターゲットまたは Amazon Simple Notification Service (Amazon SNS) のトピックをアタッチします。このアクションは、ターゲットに転送されたイベントをキャプチャするか、ターゲットの設定ミスを突き止めます。ログまたはトピックにより、以下のサービスが提供されます。
-
ターゲットによる解析と処理が必要なイベント本文と特定のフィールドを確認します
-
イベントがターゲットに配信済みであることを確認します
-
入力トランスフォーマーが正しく設定されたことを確認します
関連情報
Amazon EventBridge のトラブルシューティング
Lambda 関数が EventBridge ルールによってトリガーされなかったのはなぜですか?
Amazon EventBridge Scheduler のエラーをトラブルシューティングする方法を教えてください。