

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

# Amazon EventBridge のトラブルシューティング
<a name="eb-troubleshooting"></a>

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

**ヒント**  
イベントパターンが予想されるイベントと一致することを確認するには、EventBridge サンドボックスを使用して、サンプルイベントに対してイベントパターンをテストできます。詳細については、「[EventBridge サンドボックスを使用したイベントパターンのテスト](eb-event-pattern-sandbox.md)」を参照してください。

**Topics**
+ [ルールは実行されましたが、Lambda 関数が呼び出されませんでした](#eb-lam-function-not-invoked)
+ [ルールを作成または修正したが、テストイベントと一致しない](#eb-rule-does-not-match)
+ [ルールが、`ScheduleExpression` で指定した時間に実行されませんでした](#eb-rule-did-not-trigger)
+ [良きした時刻にルールが実行されなかった](#eb-rule-did-not-trigger-on-time)
+ [ルールが AWS グローバルサービス API コールと一致しているが、実行されなかった](#eb-rule-did-not-trigger-iam)
+ [ルールが実行されるとき、ルールに関連付けられた IAM ロールが無視されます](#eb-iam-role-ignored)
+ [ルールにはリソースに一致することを条件とするイベントパターンがありますが、一致するイベントがありません](#eb-events-do-not-match-rule)
+ [ターゲットへのイベントの配信で遅延が発生する](#eb-delayed-event-delivery)
+ [一部のイベントがターゲットに配信されない](#eb-never-delivered-to-target)
+ [1 つのイベントに応じてルールが複数回トリガーされた](#eb-rule-triggered-more-than-once)
+ [無限ループの防止](#eb-prevent-infinite-loops)
+ [マイイベントがターゲットの Amazon SQS キューに配信されない](#eb-sqs-encrypted)
+ [ルールは実行されるが、Amazon SNS トピックにいずれのメッセージもパブリッシュされない](#eb-no-messages-published-sns)
+ [Amazon SNS トピックに関連付けられたルールを削除した後でも、Amazon SNS トピックに Eventbridge のアクセス許可がある](#eb-sns-permissions-persist)
+ [Eventbridge で使用できる IAM 条件キー](#eb-supported-access-policies)
+ [Eventbridge ルールが壊れているときに通知するアラームを作成する方法](#eb-create-alarm-broken-event-rules)

## ルールは実行されましたが、Lambda 関数が呼び出されませんでした
<a name="eb-lam-function-not-invoked"></a>

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

**Lambda 関数のアクセス許可を確認するには**

1. を使用して AWS CLI、関数と AWS リージョンで次のコマンドを実行します。

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

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

------
#### [ JSON ]

****  

   ```
   {
   "Version":"2012-10-17",		 	 	 
   "Statement": [
   {
   "Condition": {
   "ArnLike": {
   "AWS:SourceArn": "arn:aws:events:{{us-east-1}}:{{123456789012}}:rule/{{rule-name}}"
   }
   },
   "Action": "lambda:InvokeFunction",
   "Resource": "arn:aws:lambda:{{us-east-1}}:{{123456789012}}:function:{{function-name}}",
   "Effect": "Allow",
   "Principal": {
   "Service": "events.amazonaws.com"
   },
   "Sid": "MyId"
   }
   ],
   "Id": "default"
   }
   ```

------

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-name {{MyFunction}} \
   --statement-id {{MyId}} \
   --action 'lambda:InvokeFunction' \
   --principal events.amazonaws.com \
   --source-arn arn:aws:events:us-east-1:{{123456789012}}:rule/{{MyRule}}
   ```

1. 出力に `SourceAccount` フィールドが含まれている場合は、削除する必要があります。`SourceAccount` 設定により、Eventbridge は関数を呼び出すことができなくなります。

**注記**  
ポリシーが正しくない場合は、そのポリシーを削除してからルールに追加し直すことで、Eventbridge コンソールで[ルール](eb-rules.md)を編集できます。Eventbridge コンソールで、[ターゲット](eb-targets.md)に対する適切なアクセス許可が設定されます。  
特定の 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}}
```

## ルールを作成または修正したが、テストイベントと一致しない
<a name="eb-rule-does-not-match"></a>

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

しばらくしてもイベントが一致しない場合は、ルールの CloudWatch メトリクス `TriggeredRules`、`Invocations`、`FailedInvocations` を確認します。これらのメトリクスの詳細については、[Amazon EventBridge のモニタリング](eb-monitoring.md)を参照してください。

ルールが AWS サービスのイベントと一致することを意図している場合は、次のいずれかを実行します。
+ `TestEventPattern` アクションを使用して、ルールのイベントパターンがテストイベントに一致するかどうかをテストします。詳細については、『*Amazon EventBridge API リファレンス*』の「[TestEventPattern](https://docs.aws.amazon.com/AmazonCloudWatchEvents/latest/APIReference/API_TestEventPattern.html)」を参照してください。
+ [EventBridge コンソール](https://console.aws.amazon.com/events)で**サンドボックス**を使用します。

## ルールが、`ScheduleExpression` で指定した時間に実行されませんでした
<a name="eb-rule-did-not-trigger"></a>

[ルール](eb-rules.md)のスケジュールが、UTC\+0 タイムゾーンで設定されていることを確認します。`ScheduleExpression` が正しい場合は、「[ルールを作成または修正したが、テストイベントと一致しない](#eb-rule-does-not-match)」の手順に従います。

## 良きした時刻にルールが実行されなかった
<a name="eb-rule-did-not-trigger-on-time"></a>

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

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

cron 式を使用して、指定した時間に[ターゲット](eb-targets.md)を起動できます。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 コールと一致しているが、実行されなかった
<a name="eb-rule-did-not-trigger-iam"></a>

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

## ルールが実行されるとき、ルールに関連付けられた IAM ロールが無視されます
<a name="eb-iam-role-ignored"></a>

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

リージョン AWS STS エンドポイントが有効になっていることを確認し、指定した IAM ロールを引き受けるときに EventBridge がそれらを使用できるようにします。詳細については、*IAM ユーザーガイド*[の「 AWS リージョン AWS STS でのアクティブ化と非アクティブ化](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html)」を参照してください。

## ルールにはリソースに一致することを条件とするイベントパターンがありますが、一致するイベントがありません
<a name="eb-events-do-not-match-rule"></a>

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

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

## ターゲットへのイベントの配信で遅延が発生する
<a name="eb-delayed-event-delivery"></a>

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

## 一部のイベントがターゲットに配信されない
<a name="eb-never-delivered-to-target"></a>

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

## 1 つのイベントに応じてルールが複数回トリガーされた
<a name="eb-rule-triggered-more-than-once"></a>

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

## 無限ループの防止
<a name="eb-prevent-infinite-loops"></a>

Eventbridge では、[ルール](eb-rules.md)が繰り返し実行される無限ループにつながるルールが作成されることがあります。無限ループに陥るルールがある場合は、そのルールが実行するアクションが同じルールに一致しないように書き換えてください。

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

無限ループにより、予想よりも高い料金がすぐに発生する可能性があります。指定した制限を料金が超えるとアラートで知らせる予算設定を使用することをお勧めします。詳細については、「[予算によるコストの管理](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/budgets-managing-costs.html)」を参照してください。

## マイイベントがターゲットの Amazon SQS キューに配信されない
<a name="eb-sqs-encrypted"></a>

Amazon SQS キューが暗号化されている場合は、顧客管理 KMS キーを作成し、KMS キーポリシーに次の許可セクションを含める必要があります。詳細については、[AWS KMS 「アクセス許可の設定](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-key-management.html#sqs-what-permissions-for-sse)」を参照してください。

```
{
  "Sid": "Allow EventBridge to use the key",
  "Effect": "Allow",
  "Principal": {
    "Service": "events.amazonaws.com"
  },
  "Action": [
    "kms:Decrypt",
    "kms:GenerateDataKey"
  ],
  "Resource": "*"
}
```

## ルールは実行されるが、Amazon SNS トピックにいずれのメッセージもパブリッシュされない
<a name="eb-no-messages-published-sns"></a>

**シナリオ 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"
```

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

------
#### [ JSON ]

****  

```
{
    "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 コンソールで[ルール](eb-rules.md)を編集することもできます。Eventbridge は、[ターゲット](eb-targets.md)で適切なアクセス許可を設定します。

**シナリオ 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 のアクセス許可がある
<a name="eb-sns-permissions-persist"></a>

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

## Eventbridge で使用できる IAM 条件キー
<a name="eb-supported-access-policies"></a>

EventBridge は、 AWS全体の条件キー ([IAM ユーザーガイドの「IAM および AWS STS 条件コンテキストキー](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_iam-condition-keys.html)」を参照) と、 にリストされているキーをサポートしています[Amazon EventBridge での IAM ポリシー条件の使用](eb-use-conditions.md)。 **

## Eventbridge ルールが壊れているときに通知するアラームを作成する方法
<a name="eb-create-alarm-broken-event-rules"></a>

以下のアラームを使用して、Eventbridge [ルール](eb-rules.md)が壊れているときに通知されるようにできます。

**ルールが壊れているときに警告するアラームを作成するには**

1. CloudWatch コンソールの [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) を開いてください。

1. **[Create Alarm]** (アラームの作成) を選択します。[**CloudWatch Metrics by Category**] ペインで [**Events Metrics**] を選択します。

1. メトリクスのリストで、[**FailedInvocations**] を選択します。

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

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

1. [**Alarm Threshold**] の下の [**Name**] に一意のアラーム名 (例: **myFailedRules**) を入力します。[**Description**] (説明) に、アラームの説明として、例えば「**Rules are not delivering events to targets**」と入力します。

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

1. [**アクション**] の [**アラームが次の時:**] で、[**状態: 警告**] を選択します。

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

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

1. **[Create Alarm]** (アラームの作成) を選択します。