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

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

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

しばらく経ってもイベントが一致しない場合は、 CloudWatch ルールのメトリクスTriggeredRulesInvocationsFailedInvocationsおよびを確認してください。これらのメトリクスの詳細については、「Amazon のモニタリング」を参照してください EventBridge。

AWS ルールがサービスのイベントと一致するように設定されている場合は、次のいずれかを実行してください。

ルールが、ScheduleExpression で指定した時間に実行されませんでした

ルールのスケジュールが、UTC+0 タイムゾーンで設定されていることを確認します。ScheduleExpression が正しい場合は、「ルールを作成または修正したが、テストイベントと一致しない」の手順に従います。

良きした時刻にルールが実行されなかった

EventBridge 設定した開始時刻から 1 分以内にルールを実行します。実行時間へのカウントダウンは、ルールを作成するとすぐに開始されます。

注記

スケジュールされたルールは、配信タイプが guaranteed で、予定された時間ごとに少なくとも一度はイベントがトリガーされることを意味します。

cron 式を使用して、指定した時間にターゲットを起動できます。4 時間ごとの 0 分に実行するルールを作成するには、次のいずれかを実行します。

  • EventBridge コンソールでは cron 0 0/4 * * ? * 式を使用します。

  • AWS CLIcron(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 EventBridge ロールを引き受けるときに使用できるように、 AWS STS リージョンのエンドポイントが有効になっていることを確認してください。詳細については、IAM ユーザーガイドの「AWS STSAWS リージョンでのアクティベーションとアクティベーション解除」を参照してください。

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

のほとんどのサービスでは、コロン (:) またはスラッシュ (/) を Amazon リソースネーム (ARN) AWS の同じ文字として扱いますが EventBridge 、イベントパターンとルールでは完全に一致します。イベントパターンの作成時に正しい 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
注記

ポリシーが正しくない場合は、ルールを削除してルールに追加し直すことで、 EventBridge コンソールでルールを編集することもできます。 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 EventBridge トピックに関連するルールを削除した後でも、Amazon SNS トピックにはまだアクセス権限があります。

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

どの IAM 条件キーを使用できますか? EventBridge

EventBridge AWS-wide の条件キー (『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. [アラームの作成] を選択します。