翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon EventBridge のトラブルシューティング
このセクションのトピックを使用して、Amazon EventBridge のトラブルシューティングを行えます。
ヒント
イベントパターンが予想されるイベントと一致することを確認するには、EventBridge サンドボックスを使用して、サンプルイベントに対してイベントパターンをテストできます。詳細については、「EventBridge サンドボックスを使用したイベントパターンのテスト」を参照してください。
ルールは実行されましたが、Lambda 関数が呼び出されませんでした
Lambda 関数が実行されない理由としては、適切なアクセス許可がないことが考えられます。
Lambda 関数のアクセス許可を確認するには
-
を使用して AWS CLI、関数と AWS リージョンで次のコマンドを実行します。
aws lambda get-policy --function-nameMyFunction--regionus-east-1次のような出力が表示されます。
-
以下のメッセージが表示される場合。
A client error (ResourceNotFoundException) occurred when calling the GetPolicy operation: The resource you requested does not exist.または、出力が表示されたが、信頼できるエンティティとして events.amazonaws.com がポリシーにない場合は、以下のコマンドを実行します。
aws lambda add-permission \ --function-nameMyFunction\ --statement-idMyId\ --action 'lambda:InvokeFunction' \ --principal events.amazonaws.com \ --source-arn arn:aws:events:us-east-1:123456789012:rule/MyRule -
出力に
SourceAccountフィールドが含まれている場合は、削除する必要があります。SourceAccount設定により、Eventbridge は関数を呼び出すことができなくなります。
注記
ポリシーが正しくない場合は、そのポリシーを削除してからルールに追加し直すことで、Eventbridge コンソールでルールを編集できます。Eventbridge コンソールで、ターゲットに対する適切なアクセス許可が設定されます。
特定の Lambda エイリアスまたはバージョンを使用する場合は、次に示すコマンドを使用して、aws lambda get-policy および aws lambda add-permission コマンドで --qualifier パラメータを追加する必要があります。
aws lambda add-permission \ --function-nameMyFunction\ --statement-idMyId\ --action 'lambda:InvokeFunction' \ --principal events.amazonaws.com \ --source-arn arn:aws:events:us-east-1:123456789012:rule/MyRule--qualifieralias or version
ルールを作成または修正したが、テストイベントと一致しない
ルールまたはそのターゲットを変更すると、受信イベントはすぐに、新しい、またはか更新されたルールへのマッチングを開始/停止しないことがあります。変更が有効になるまで、しばらくお待ちください。
しばらくしてもイベントが一致しない場合は、ルールの CloudWatch メトリクス TriggeredRules、Invocations、FailedInvocations を確認します。これらのメトリクスの詳細については、Amazon EventBridge のモニタリングを参照してください。
ルールが AWS サービスのイベントと一致することを意図している場合は、次のいずれかを実行します。
TestEventPatternアクションを使用して、ルールのイベントパターンがテストイベントに一致するかどうかをテストします。詳細については、『Amazon EventBridge API リファレンス』の「TestEventPattern」を参照してください。EventBridge コンソール
でサンドボックスを使用します。
ルールが、ScheduleExpression で指定した時間に実行されませんでした
ルールのスケジュールが、UTC+0 タイムゾーンで設定されていることを確認します。ScheduleExpression が正しい場合は、「ルールを作成または修正したが、テストイベントと一致しない」の手順に従います。
良きした時刻にルールが実行されなかった
EventBridge は、設定した開始時間から 1 分以内にルールを実行します。実行時間へのカウントダウンは、ルールを作成するとすぐに開始されます。
注記
スケジュールされたルールは、配信タイプが guaranteed で、予定された時間ごとに少なくとも一度はイベントがトリガーされることを意味します。
cron 式を使用して、指定した時間にターゲットを起動できます。4 時間ごとの 0 分に実行するルールを作成するには、次のいずれかを実行します。
-
EventBridge コンソールで、cron 式
0 0/4 * * ? *を使用します。 -
を使用して AWS CLI、式 を使用します
cron(0 0/4 * * ? *)。
たとえば、 を使用して 4 時間ごとに実行される という名前TestRuleのルールを作成するには AWS CLI、次のコマンドを使用します。
aws events put-rule --nameTestRule--schedule-expression 'cron(0 0/4 * * ? *)'
5 分ごとにルールを実行するには、次の cron 式を使用します。
aws events put-rule --nameTestRule--schedule-expression 'cron(0/5 * * * ? *)'
cron式を使用する EventBridge の最小の分解単位は、1 分です。スケジュールされたルールは、その分のうちに実行されますが、正確に 0 秒に実行されるわけではありません。
EventBridge とターゲットサービスは分散しているため、スケジュールしたルールが実行されてからターゲットサービスがターゲットリソースでアクションを実行するまでの間に数秒の遅延が発生することもあります。
ルールが AWS グローバルサービス API コールと一致しているが、実行されなかった
AWS IAM や Amazon Route 53 などの グローバルサービスは、米国東部 (バージニア北部) リージョンでのみ使用できるため、グローバルサービスからの AWS API コールからのイベントは、そのリージョンでのみ使用できます。詳細については、「AWS サービスからのイベント」を参照してください。
ルールが実行されるとき、ルールに関連付けられた IAM ロールが無視されます
EventBridge は、すべてのターゲットタイプの IAM 実行ロールをサポートしています。ルールの IAM ロールが無視されているように見える場合は、ロールの信頼ポリシーでそのロールを引き受けevents.amazonaws.comることが許可されていること、およびアクセス許可ポリシーでターゲットに必要なアクション (、lambda:InvokeFunctionsns:Publish、 など) が付与されていることを確認しますsqs:SendMessage。
Lambda、Amazon SNS、Amazon SQS ターゲットの場合、ターゲットに IAM 実行ロールが設定されていない場合、EventBridge はターゲットリソースのリソースベースのアクセス許可にフォールバックします。
リージョン AWS STS エンドポイントが有効になっていることを確認し、指定した IAM ロールを引き受けるときに EventBridge がそれらを使用できるようにします。詳細については、IAM ユーザーガイドの「 AWS リージョン AWS STS でのアクティブ化と非アクティブ化」を参照してください。
ルールにはリソースに一致することを条件とするイベントパターンがありますが、一致するイベントがありません
のほとんどのサービスは、Amazon リソースネーム (ARN) でコロン (:) またはスラッシュ (/) を同じ文字として AWS 扱います。ただし、EventBridge はイベントパターンとルールで完全一致を使用します。 ARNs イベントパターンの作成時に正しい ARN 文字を使用して、一致させるイベント内の ARN 構文とそれらの文字が一致するようにしてください。
CloudTrail からの AWS API コールイベントなどの一部のイベントでは、リソースフィールドに何も表示されません。
ターゲットへのイベントの配信で遅延が発生する
ターゲットリソースが制約されているシナリオを除き、Eventbridge は、最大 24 時間にわたりターゲットにイベントを配信しようとします。最初の試行は、イベントがイベントストリームに到達するとすぐに行われます。ただし、ターゲットサービスに問題がある場合、Eventbridge は自動的に別の配信を再スケジュールします。イベントの到着から 24 時間が経過すると、EventBridge はイベントの配信の試行を停止し、CloudWatch で FailedInvocations メトリクスを発行します。ターゲットに正常に配信できなかったイベントを保存するように DLQ を設定することをお勧めします。詳細については、「EventBridge で配信されていないイベントを処理するためのデッドレターキューの使用」を参照してください。
一部のイベントがターゲットに配信されない
EventBridge ルールのターゲットが長時間制約されている場合、EventBridge は配信を再試行しないことがあります。例えば、ターゲットが受信イベントのトラフィックを処理するようにプロビジョニングされておらず、ターゲットサービスがユーザーにかわって行うリクエストをスロットリングしている場合、Eventbridge は配信を再試行しない可能性があります。
1 つのイベントに応じてルールが複数回トリガーされた
まれに、単一のイベントまたはスケジュールされた期間に対して同じルールが複数回実行されたり、トリガーされる特定のルールに対して同じターゲットを複数回呼び出されたりする場合があります。
無限ループの防止
Eventbridge では、ルールが繰り返し実行される無限ループにつながるルールが作成されることがあります。無限ループに陥るルールがある場合は、そのルールが実行するアクションが同じルールに一致しないように書き換えてください。
例えば、Amazon S3 バケットで ACL が変更されたことを検出してから、ソフトウェアを実行してそれを新しい状態に変更するルールは、無限ループの原因となります。これを解決する 1 つの方法は、不正な状態の ACL のみに一致するようにルールを書き換えることです。
無限ループにより、予想よりも高い料金がすぐに発生する可能性があります。指定した制限を料金が超えるとアラートで知らせる予算設定を使用することをお勧めします。詳細については、「予算によるコストの管理」を参照してください。
マイイベントがターゲットの Amazon SQS キューに配信されない
Amazon SQS キューが暗号化されている場合は、顧客管理 KMS キーを作成し、KMS キーポリシーに次の許可セクションを含める必要があります。詳細については、AWS KMS 「アクセス許可の設定」を参照してください。
{ "Sid": "Allow EventBridge to use the key", "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*" }
ルールは実行されるが、Amazon SNS トピックにいずれのメッセージもパブリッシュされない
シナリオ 1
Amazon SNS トピックにメッセージを発行するには、アクセス許可が必要です。を使用して次のコマンドを使用し AWS CLI、us-east-1 をリージョンに置き換え、トピック ARN を使用します。
aws sns get-topic-attributes --regionus-east-1--topic-arn "arn:aws:sns:us-east-1:123456789012:MyTopic"
正しいアクセス許可を取得するには、ポリシーが次のようになります。
Publish アクセス許可のある events.amazonaws.com が表示されていない場合は、まず現在のポリシーをコピーして、以下のステートメントを追加してください。
{\"Sid\":\"Allow_Publish_Events\", \"Effect\":\"Allow\",\"Principal\":{\"Service\":\"events.amazonaws.com\"}, \"Action\":\"sns:Publish\", \"Resource\":\"arn:aws:sns:us-east-1:123456789012:MyTopic\"}
次に、 を使用してトピック属性を設定し AWS CLI、次のコマンドを使用します。
aws sns set-topic-attributes --regionus-east-1--topic-arn "arn:aws:sns:us-east-1:123456789012:MyTopic" --attribute-name Policy --attribute-valueNEW_POLICY_STRING
注記
シナリオ 2
SNS トピックが暗号化されている場合は、KMS キーポリシーに次のセクションを含める必要があります。
{ "Sid": "Allow EventBridge to use the key", "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*" }
Amazon SNS トピックに関連付けられたルールを削除した後でも、Amazon SNS トピックに Eventbridge のアクセス許可がある
ターゲットとして Amazon SNS でルールを作成すると、Eventbridge はユーザーにかわって Amazon SNS トピックにアクセス許可を追加します。作成後すぐにルールを削除すると、Eventbridge は Amazon SNS トピックからアクセス許可を削除できなくなる場合があります。その場合は、aws sns set-topic-attributes コマンドを使用してトピックからアクセス許可を削除できます。イベントを送信するためのリソースベースのアクセス権限については、「Amazon EventBridge のリソースベースのポリシーを使用する」を参照してください。
Eventbridge で使用できる IAM 条件キー
EventBridge は、 AWS全体の条件キー (IAM ユーザーガイドの「IAM および AWS STS 条件コンテキストキー」を参照) と、 にリストされているキーをサポートしていますAmazon EventBridge での IAM ポリシー条件の使用。
Eventbridge ルールが壊れているときに通知するアラームを作成する方法
以下のアラームを使用して、Eventbridge ルールが壊れているときに通知されるようにできます。
ルールが壊れているときに警告するアラームを作成するには
-
CloudWatch コンソールの https://console.aws.amazon.com/cloudwatch/
を開いてください。 -
[Create Alarm] (アラームの作成) を選択します。[CloudWatch Metrics by Category] ペインで [Events Metrics] を選択します。
-
メトリクスのリストで、[FailedInvocations] を選択します。
-
グラフの上で、[Statistic]、[Sum] を選択します。
-
[Period] で、値 (例: 5 分) を選択します。[次へ] を選択します。
-
[Alarm Threshold] の下の [Name] に一意のアラーム名 (例: myFailedRules) を入力します。[Description] (説明) に、アラームの説明として、例えば「Rules are not delivering events to targets」と入力します。
-
[is] で [>=] および [1] を選択します。[for] に「10」と入力します。
-
[アクション] の [アラームが次の時:] で、[状態: 警告] を選択します。
-
[Send notification to (通知の送信先)] で、既存の Amazon SNS トピックを選択するか、新しいトピックを作成します。新しいトピックを作成するには、[新しいリスト] を選択します。新しい Amazon SNS トピックの名前 (例: myFailedRules) を入力します。
-
[Email list] に、アラームが ALARM 状態に変わったら通知する E メールアドレスを、カンマ区切りのリストに入力します。
-
[Create Alarm] (アラームの作成) を選択します。