

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 Amazon EventBridge 監控 Canary 事件
<a name="monitoring-events-eventbridge"></a>

當 Canary 變更狀態或完成執行時，Amazon EventBridge 事件規則可以通知您。EventBridge 提供near-real-time的系統事件串流，說明 AWS 資源的變更。CloudWatch Synthetics 會*全力*將這些事件傳送至 Eventbridge。全力傳遞意味著 CloudWatch Synthetics 會嘗試將所有事件傳送至 EventBridge，但在某些罕見的情況下，事件可能無法傳遞。EventBridge 至少會處理一次接收的所有事件。此外，您的事件接聽程式可能不會依事件發生順序接收事件。

**注意**  
Amazon EventBridge 是匯流排服務，可讓您用於將應用程式與來自各種來源的資料互相連線。如需詳細資訊，請參閱*《Amazon EventBridge 使用者指南》*中的[什麼是 Amazon EventBridge？](https://docs.aws.amazon.com/eventbridge/latest/userguide/what-is-amazon-eventbridge.html)。

當 Canary 變更狀態或完成執行時，CloudWatch Synthetics 會發出事件。您可以建立包含事件模式的 EventBridge 規則，以符合從 CloudWatch Synthetics 傳送的所有事件類型，或只符合特定事件類型。當 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 串流
  + 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>

下列範例中的步驟會建立 EventBridge 規則，該規則會在 `us-east-1` 中名為 `my-canary-name` 的 Canary 完成執行或變更狀態時發布 Amazon SNS 主題。

1. 建立 規則。

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

   模式省略的任何屬性會遭到忽略。

1. 新增主題作為規則目標。
   + 使用 Amazon SNS 主題的 Amazon Resource Name (ARN) 取代為 *topic-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)。