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

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

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

このセクションのトピックを使用して、Amazon EventBridge の問題をトラブルシューティングできます。

ルールは実行されましたが、Lambda 関数が呼び出されませんでした

Lambda 関数が実行されない理由としては、適切なアクセス許可がないことが考えられます。

Lambda 関数のアクセス許可を確認するには
  1. を使用して AWS CLI、関数と AWS リージョンで次のコマンドを実行します。

    aws lambda get-policy --function-name MyFunction --region us-east-1

    次のような出力が表示されます。

    { "Policy": "{\"Version\":\"2012-10-17\", \"Statement\":[ {\"Condition\":{\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:events:us-east-1:123456789012:rule/MyRule\"}}, \"Action\":\"lambda:InvokeFunction\", \"Resource\":\"arn:aws:lambda:us-east-1:123456789012:function:MyFunction\", \"Effect\":\"Allow\", \"Principal\":{\"Service\":\"events.amazonaws.com\"}, \"Sid\":\"MyId\"} ], \"Id\":\"default\"}" }
  2. 以下のメッセージが表示される場合。

    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-name MyFunction \ --statement-id MyId \ --action 'lambda:InvokeFunction' \ --principal events.amazonaws.com \ --source-arn arn:aws:events:us-east-1:123456789012:rule/MyRule
  3. 出力に SourceAccount フィールドが含まれている場合は、削除する必要があります。SourceAccount 設定により、 EventBridge は 関数を呼び出せなくなります。

注記

ポリシーが正しくない場合は、ルールを削除してからルールに追加することで、 EventBridge コンソールでルールを編集できます。次に、 EventBridge コンソールはターゲット に正しいアクセス許可を設定します。

特定の Lambda エイリアスまたはバージョンを使用する場合は、次に示すコマンドを使用して、aws lambda get-policy および aws lambda add-permission コマンドで --qualifier パラメータを追加する必要があります。

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 --qualifier alias or version

ルールを作成または修正したが、テストイベントと一致しない

ルールまたはそのターゲットを変更すると、受信イベントはすぐに、新しい、またはか更新されたルールへのマッチングを開始/停止しないことがあります。変更が有効になるまで、しばらくお待ちください。

イベントが短期間経過しても一致しない場合は、FailedInvocationsルールの CloudWatch メトリクス TriggeredRulesInvocations、および を確認します。これらのメトリクスの詳細については、「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 --name TestRule --schedule-expression 'cron(0 0/4 * * ? *)'

5 分ごとにルールを実行するには、次の cron 式を使用します。

aws events put-rule --name TestRule --schedule-expression 'cron(0/5 * * * ? *)'

cron 式を使用する EventBridge ルールの最小解像度は 1 分です。スケジュールされたルールは、その分のうちに実行されますが、正確に 0 秒に実行されるわけではありません。

EventBridge および ターゲットサービスは分散されるため、スケジュールされたルールの実行からターゲットサービスがターゲットリソースでアクションを実行するまでに数秒の遅延が発生する可能性があります。

ルールが AWS グローバルサービスAPIコールと一致したが、実行されなかった

AWS IAMや Amazon Route 53 などの グローバルサービスは、米国東部 (バージニア北部) リージョンでのみ利用できるため、グローバルサービスからの呼び出しからの AWS APIイベントはそのリージョンでのみ使用できます。詳細については、「Amazon AWS のサービスからのイベント EventBridge」を参照してください。

ルールの実行時にルールに関連付けられたIAMロールが無視されている

EventBridge はIAM、Kinesis ストリームにイベントを送信するルールにのみロールを使用します。Lambda 関数または Amazon SNSトピックを呼び出すルールの場合、リソースベースのアクセス許可 を指定する必要があります。

指定したIAMロールを引き受けるときに が EventBridge 使用できるように、リージョン AWS STS エンドポイントが有効になっていることを確認します。詳細については、「 IAMユーザーガイド」の「 AWS リージョン AWS STS での のアクティブ化と非アクティブ化」を参照してください。

ルールにはリソースに一致することを条件とするイベントパターンがありますが、一致するイベントがありません

のほとんどのサービスは、Amazon リソースネーム () でコロン (:) またはスラッシュ (/) を同じ文字として AWS 扱いますARNs。ただし、 はイベントパターンルール で完全一致 EventBridge を使用します。イベントパターンを作成するときは、Amazon のイベント EventBridge一致するイベントのARN構文と一致するように、正しいARN文字を使用してください。

からの呼び出しイベントなど AWS API、一部のイベントでは CloudTrail、リソースフィールドに何も表示されません。

ターゲットへのイベントの配信で遅延が発生する

EventBridge は、ターゲットリソースが制約されているシナリオを除き、最大 24 時間ターゲットにイベントを配信しようとします。最初の試行は、イベントがイベントストリームに到達するとすぐに行われます。ターゲットサービスに問題がある場合、 EventBridge は別の配信を自動的に再スケジュールします。イベントの到着から 24 時間が経過すると、 はイベントの配信 EventBridge を停止し、 に FailedInvocationsメトリクスを発行します CloudWatch。ターゲットDLQに正常に配信できなかったイベントを保存するように を設定することをお勧めします。詳細については、「デッドレターキューを使用した での未配信イベントの処理 EventBridge」を参照してください。

一部のイベントがターゲットに配信されない

EventBridge ルールターゲットが長時間制約されている場合、配信を再試行しない EventBridge 可能性があります。例えば、ターゲットが受信イベントトラフィックを処理するようにプロビジョニングされておらず、ターゲットサービスがユーザーに代わって が EventBridge 行うリクエストをスロットリングしている場合、 は配信を再試行しない EventBridge 可能性があります。

1 つのイベントに応じてルールが複数回トリガーされた

まれに、単一のイベントまたはスケジュールされた期間に対して同じルールが複数回実行されたり、トリガーされる特定のルールに対して同じターゲットを複数回呼び出されたりする場合があります。

無限ループの防止

では EventBridge、ルールが繰り返し実行される無限ループにつながるルールを作成できます。無限ループに陥るルールがある場合は、そのルールが実行するアクションが同じルールに一致しないように書き換えてください。

例えば、Amazon S3 バケットで ACLsが変更されたことを検出し、ソフトウェアを実行して新しい状態に変更するルールでは、無限ループが発生します。解決方法の 1 つは、ルールを書き換えて、不正な状態にある ACLs のみと一致するようにすることです。

無限ループにより、予想よりも高い料金がすぐに発生する可能性があります。指定した制限を料金が超えるとアラートで知らせる予算設定を使用することをお勧めします。詳細については、「予算によるコストの管理」を参照してください。

イベントがターゲット 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 --region us-east-1 --topic-arn "arn:aws:sns:us-east-1:123456789012:MyTopic"

正しいアクセス許可を取得するには、ポリシーが次のようになります。

"{\"Version\":\"2012-10-17\", \"Id\":\"__default_policy_ID\", \"Statement\":[{\"Sid\":\"__default_statement_ID\", \"Effect\":\"Allow\", \"Principal\":{\"AWS\":\"*\"}, \"Action\":[\"SNS:Subscribe\", \"SNS:ListSubscriptionsByTopic\", \"SNS:DeleteTopic\", \"SNS:GetTopicAttributes\", \"SNS:Publish\", \"SNS:RemovePermission\", \"SNS:AddPermission\", \"SNS:SetTopicAttributes\"], \"Resource\":\"arn:aws:sns:us-east-1:123456789012:MyTopic\", \"Condition\":{\"StringEquals\":{\"AWS:SourceOwner\":\"123456789012\"}}},{\"Sid\":\"Allow_Publish_Events\", \"Effect\":\"Allow\", \"Principal\":{\"Service\":\"events.amazonaws.com\"}, \"Action\":\"sns:Publish\", \"Resource\":\"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 --region us-east-1 --topic-arn "arn:aws:sns:us-east-1:123456789012:MyTopic" --attribute-name Policy --attribute-value NEW_POLICY_STRING
注記

ポリシーが正しくない場合は、ルールを削除して rule. EventBridge sets に追加することで、 EventBridge コンソールでルールを編集することもできます。ターゲット に対する正しいアクセス許可を設定します。

シナリオ 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 としてルールを作成すると、 はユーザーに代わって Amazon SNSトピックにアクセス許可 EventBridge を追加します。 Amazon のイベントバスターゲット EventBridge ルールの作成後すぐにルールを削除しても、Amazon SNSトピックからアクセス許可を削除しない EventBridge 可能性があります。その場合は、aws sns set-topic-attributes コマンドを使用してトピックからアクセス許可を削除できます。イベントを送信するためのリソースベースのアクセス権限については、「Amazon でのリソースベースのポリシーの使用 EventBridge」を参照してください。

で使用できるIAM条件キー EventBridge

EventBridge は、 AWS全体の条件キー (「 ユーザーガイド」の「 IAMおよび AWS STS 条件コンテキストキー」を参照) と、 にリストされているキーをサポートしますAmazon でのIAMポリシー条件の使用 EventBridgeIAM

EventBridge ルールがいつ壊れているかはどうすればわかりますか?

次のアラームを使用して、 EventBridge ルールが壊れたときに通知できます。

ルールが壊れているときに警告するアラームを作成するには
  1. で CloudWatch コンソールを開きますhttps://console.aws.amazon.com/cloudwatch/

  2. [アラームの作成] を選択します。CloudWatch カテゴリ別のメトリクスペインで、イベントメトリクス を選択します。

  3. メトリクスのリストで、 を選択しますFailedInvocations

  4. グラフの上で、[Statistic]、[Sum] を選択します。

  5. [Period] で、値 (例: 5 分) を選択します。[次へ] をクリックします。

  6. アラームしきい値 で、名前 にアラームの一意の名前を入力します。例えば、 ですmyFailedRules。[Description] (説明) に、アラームの説明として、例えば「Rules are not delivering events to targets」と入力します。

  7. [is] で [>=] および [1] を選択します。[for] に「10」と入力します。

  8. アクション で、このアラーム が になるたびに状態が ALARMを選択します。

  9. に通知を送信する で、既存の Amazon SNSトピックを選択するか、新しいトピックを作成します。新しいトピックを作成するには、[新しいリスト] を選択します。新しい Amazon SNSトピックの名前を入力します。例: myFailedRules

  10. E メールリスト には、アラームが ALARM状態に変わったときに通知される E メールアドレスのカンマ区切りリストを入力します。

  11. [アラームの作成] を選択します。