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 コールからのイベントはそのリージョンでのみ利用できます。詳細については、「AWS サービスからのイベント」を参照してください。

ルールが実行されるとき、ルールに関連付けられた IAM ロールが無視されます

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

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

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

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

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

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

EventBridge は、ターゲットリソースが制約されているシナリオを除き、最大 24 時間ターゲットにイベントを配信しようとします。最初の試行は、イベントがイベントストリームに到達するとすぐに行われます。ターゲットサービスに問題がある場合、 EventBridge は別の配信を自動的に再スケジュールします。イベントの到着から 24 時間が経過すると、 はイベントの配信 EventBridge を停止し、 で FailedInvocationsメトリクスを発行します CloudWatch。ターゲットに正常に配信できなかったイベントを保存するように 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 --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 ユーザーガイド」の「IAM および AWS STS 条件コンテキストキー」を参照) と、「」に記載されているキーをサポートします詳細に設定されたアクセスコントロールのための IAM ポリシー条件の使用

EventBridge ルールが壊れているタイミングはどうすればわかりますか?

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

ルールが壊れているときに警告するアラームを作成するには
  1. https://console.aws.amazon.com/cloudwatch/ で 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. [アクション] の [アラームが次の時:] で、[状態: 警告] を選択します。

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

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

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