

# Amazon EventBridge による Canary イベントのモニターリング
<a name="monitoring-events-eventbridge"></a>

Amazon EventBridge イベントルールは、Canary がステータスを変更したり、実行を完了したときに通知することができます。EventBridge は、AWS リソースの変更を記述したシステムイベントのストリームをほぼリアルタイムに配信します。CloudWatch Synthetics 機能は、これらのイベントを*ベストエフォート*ベースで EventBridge に送信します。ベストエフォート配信とは、CloudWatch Synthetics がすべてのイベントを EventBridge に送信しようとしますが、まれにイベントが配信されない場合があります。EventBridge は、受信したすべてのイベントを少なくとも 1 回は処理します。さらに、イベントリスナーは、イベントが発生した順序でイベントを受信しない場合があります。

**注記**  
Amazon EventBridge は、アプリケーションをさまざまなソースからのデータに接続するために使用できるイベントバスサービスです。詳細については、*Amazon EventBridge ユーザーガイド*の「[Amazon EventBridge とは](https://docs.aws.amazon.com/eventbridge/latest/userguide/what-is-amazon-eventbridge.html)」を参照してください。

CloudWatch Synthetics は、Canary が状態を変更したり、実行を完了したりしたときにイベントを出力します。CloudWatch Synthetics から送信されたすべてのイベントタイプに一致するイベントパターンを含む EventBridge ルール、または特定のイベントタイプのみに一致する EventBridge ルールを作成できます。Canary がルールをトリガーすると、EventBridge はルールに定義されたターゲットアクションを呼び出します。これにより通知を送信し、イベント情報を取得し、Canary の状態の変化または Canary の実行の完了に対応して是正措置を講じることができます。例えば、次のユースケースのルールを作成できます。
+ Canary 実行が失敗した場合の調査
+ Canary が `ERROR` 状態に入った時期を調べる
+ Canary のライフサイクルの追跡
+ ワークフローの一部としての Canary 実行の成功または失敗のモニターリング

## CloudWatch Synthetics からのイベントの例
<a name="synthetics-event-examples"></a>

このセクションでは、CloudWatch Synthetics のサンプルイベントを示します。イベントフォーマットの詳細については、「[EventBridge のイベントとイベントパターン](https://docs.aws.amazon.com/eventbridge/latest/userguide/eventbridge-and-event-patterns.html)」を参照してください。

 **Canary 状態変更** 

このイベントタイプでは、`current-state` および `previous-state` の値は次のようになります。

`CREATING` \$1 `READY` \$1 `STARTING` \$1 `RUNNING` \$1 `UPDATING` \$1 `STOPPING` \$1 `STOPPED` \$1 `ERROR`

```
{
                "version": "0",
                "id": "8a99ca10-1e97-2302-2d64-316c5dedfd61",
                "detail-type": "Synthetics Canary Status Change",
                "source": "aws.synthetics",
                "account": "123456789012",
                "time": "2021-02-09T22:19:43Z",
                "region": "us-east-1",
                "resources": [],
                "detail": {
                                "account-id": "123456789012",
                                "canary-id": "EXAMPLE-dc5a-4f5f-96d1-989b75a94226",
                                "canary-name": "events-bb-1",
                                "current-state": "STOPPED",
                                "previous-state": "UPDATING",
                                "source-location": "NULL",
                                "updated-on": 1612909161.767,
                                "changed-config": {
                                                "executionArn": {
                                                                "previous-value": "arn:aws:lambda:us-east-1:123456789012:function:cwsyn-events-bb-1-af3e3a05-dc5a-4f5f-96d1-989EXAMPLE:1",
                                                                "current-value": "arn:aws:lambda:us-east-1:123456789012:function:cwsyn-events-bb-1-af3e3a05-dc5a-4f5f-96d1-989EXAMPLE:2"
                                                },
                                                "vpcId": {
                                                                "current-value": "NULL"
                                                },
                                                "testCodeLayerVersionArn": {
                                                                "previous-value": "arn:aws:lambda:us-east-1:123456789012:layer:cwsyn-events-bb-1-af3e3a05-dc5a-4f5f-96d1-989EXAMPLE:1",
                                                                "current-value": "arn:aws:lambda:us-east-1:123456789012:layer:cwsyn-events-bb-1-af3e3a05-dc5a-4f5f-96d1-989EXAMPLE:2"
                                                }
                                },
                                "message": "Canary status has changed"
                }
}
```

 **Canary 実行が正常に完了しました** 

```
{
                "version": "0",
                "id": "989EXAMPLE-f4a5-57a7-1a8f-d9cc768a1375",
                "detail-type": "Synthetics Canary TestRun Successful",
                "source": "aws.synthetics",
                "account": "123456789012",
                "time": "2021-02-09T22:24:01Z",
                "region": "us-east-1",
                "resources": [],
                "detail": {
                                "account-id": "123456789012",
                                "canary-id": "989EXAMPLE-dc5a-4f5f-96d1-989b75a94226",
                                "canary-name": "events-bb-1",
                                "canary-run-id": "c6c39152-8f4a-471c-9810-989EXAMPLE",
                                "artifact-location": "cw-syn-results-123456789012-us-east-1/canary/us-east-1/events-bb-1-ec3-28ddbe266797/2021/02/09/22/23-41-200",
                                "test-run-status": "PASSED",
                                "state-reason": "null",
                                "canary-run-timeline": {
                                                "started": 1612909421,
                                                "completed": 1612909441
                                },
                                "message": "Test run result is generated successfully"
                }
}
```

 **Canary 実行が正常に完了しませんでした** 

```
{
                "version": "0",
                "id": "2644b18f-3e67-5ebf-cdfd-bf9f91392f41",
                "detail-type": "Synthetics Canary TestRun Failure",
                "source": "aws.synthetics",
                "account": "123456789012",
                "time": "2021-02-09T22:24:27Z",
                "region": "us-east-1",
                "resources": [],
                "detail": {
                                "account-id": "123456789012",
                                "canary-id": "af3e3a05-dc5a-4f5f-96d1-9989EXAMPLE",
                                "canary-name": "events-bb-1",
                                "canary-run-id": "0df3823e-7e33-4da1-8194-b04e4d4a2bf6",
                                "artifact-location": "cw-syn-results-123456789012-us-east-1/canary/us-east-1/events-bb-1-ec3-989EXAMPLE/2021/02/09/22/24-21-275",
                                "test-run-status": "FAILED",
                                "state-reason": "\"Error: net::ERR_NAME_NOT_RESOLVED \""
                                "canary-run-timeline": {
                                                "started": 1612909461,
                                                "completed": 1612909467
                                },
                                "message": "Test run result is generated successfully"
                }
}
```

イベントが重複したり、順序が順不同である可能性があります。イベントの順序を特定するには、`time` プロパティを使用します。

## EventBridge ルールを作成するための前提条件
<a name="create-events-rule-prereqs"></a>

CloudWatch Synthetics 用の EventBridge ルールを作成する前に、以下を行う必要があります。
+ EventBridge のイベント、ルール、ターゲットに精通しておいてください。
+ EventBridge ルールによって呼び出されるターゲットを作成して設定します。ルールは、以下のようなさまざまなタイプのターゲットを呼び出すことができます。
  + Amazon SNS トピック
  + AWS Lambda 関数
  + Kinesis Streams
  + Amazon SQS キュー

詳細については、*Amazon EventBridge ユーザーガイド*の「[ Amazon EventBridge とは](https://docs.aws.amazon.com/eventbridge/latest/userguide/what-is-amazon-eventbridge.html)」および「[Amazon EventBridge の開始方法](https://docs.aws.amazon.com/eventbridge/latest/userguide/eventbridge-getting-set-up.html)」を参照してください。

## EventBridge ルールを作成する (CLI)
<a name="create-events-rule-cli"></a>

以下の例の手順は、`us-east-1` の `my-canary-name` という名前の Canary が実行を完了するか、状態を変更したときに Amazon SNS トピックを公開する EventBridge ルールを作成します。

1. ルールを作成します。

   ```
   aws events put-rule \
     --name TestRule \
     --region us-east-1 \ 
     --event-pattern "{\"source\": [\"aws.synthetics\"], \"detail\": {\"canary-name\": [\"my-canary-name\"]}}"
   ```

   パターンから省略したプロパティはすべて無視されます。

1. トピックをルールターゲットとして追加します。
   + *topic-arn* を Amazon SNS トピックの Amazon リソースネーム (ARN) に置き換えます。

   ```
   aws events put-targets \
     --rule TestRule \
     --targets "Id"="1","Arn"="topic-arn"
   ```
**注記**  
Amazon EventBridge にターゲットトピックの呼び出しを許可するには、トピックにリソースベースのポリシーを追加する必要があります。詳細については、*Amazon EventBridge ユーザーガイド*の「[Amazon SNS のアクセス許可](https://docs.aws.amazon.com/eventbridge/latest/userguide/resource-based-policies-eventbridge.html#sns-permissions)」を参照してください。

詳細については、「*Amazon EventBridge ユーザーガイド*」の「[EventBridge のイベントとイベントパターン](https://docs.aws.amazon.com/eventbridge/latest/userguide/eventbridge-and-event-patterns.html)」を参照してください。