Amazon EventBridge による Canary イベントのモニターリング
Amazon EventBridge イベントルールは、Canary がステータスを変更したり、実行を完了したときに通知することができます。EventBridge は、AWS リソースの変更を記述したシステムイベントのストリームをほぼリアルタイムに配信します。CloudWatch Synthetics 機能は、これらのイベントをベストエフォートベースで EventBridge に送信します。ベストエフォート配信とは、CloudWatch Synthetics がすべてのイベントを EventBridge に送信しようとしますが、まれにイベントが配信されない場合があります。EventBridge は、受信したすべてのイベントを少なくとも 1 回は処理します。さらに、イベントリスナーは、イベントが発生した順序でイベントを受信しない場合があります。
注記
Amazon EventBridge は、アプリケーションをさまざまなソースからのデータに接続するために使用できるイベントバスサービスです。詳細については、Amazon EventBridge ユーザーガイドの「Amazon EventBridge とは」を参照してください。
CloudWatch Synthetics は、Canary が状態を変更したり、実行を完了したりしたときにイベントを出力します。CloudWatch Synthetics から送信されたすべてのイベントタイプに一致するイベントパターンを含む EventBridge ルール、または特定のイベントタイプのみに一致する EventBridge ルールを作成できます。Canary がルールをトリガーすると、EventBridge はルールに定義されたターゲットアクションを呼び出します。これにより通知を送信し、イベント情報を取得し、Canary の状態の変化または Canary の実行の完了に対応して是正措置を講じることができます。例えば、次のユースケースのルールを作成できます。
-
Canary 実行が失敗した場合の調査
-
Canary が
ERROR
状態に入った時期を調べる -
Canary のライフサイクルの追跡
-
ワークフローの一部としての Canary 実行の成功または失敗のモニターリング
CloudWatch Synthetics からのイベントの例
このセクションでは、CloudWatch Synthetics のサンプルイベントを示します。イベントフォーマットの詳細については、「EventBridge のイベントとイベントパターン」を参照してください。
Canary 状態変更
このイベントタイプでは、current-state
および previous-state
の値は次のようになります。
CREATING
| READY
| STARTING
| RUNNING
| UPDATING
| STOPPING
| STOPPED
| 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 ルールを作成するための前提条件
CloudWatch Synthetics 用の EventBridge ルールを作成する前に、以下を行う必要があります。
-
EventBridge のイベント、ルール、ターゲットに精通しておいてください。
-
EventBridge ルールによって呼び出されるターゲットを作成して設定します。ルールは、以下のようなさまざまなタイプのターゲットを呼び出すことができます。
Amazon SNS トピック
AWS Lambda 関数
Kinesis Streams
Amazon SQS キュー
詳細については、Amazon EventBridge ユーザーガイドの「 Amazon EventBridge とは」および「Amazon EventBridge の開始方法」を参照してください。
EventBridge ルールを作成する (CLI)
以下の例の手順は、us-east-1
の my-canary-name
という名前の Canary が実行を完了するか、状態を変更したときに Amazon SNS トピックを公開する EventBridge ルールを作成します。
-
ルールを作成します。
aws events put-rule \ --name TestRule \ --region us-east-1 \ --event-pattern "{\"source\": [\"aws.synthetics\"], \"detail\": {\"canary-name\": [\"my-canary-name\"]}}"
パターンから省略したプロパティはすべて無視されます。
-
トピックをルールターゲットとして追加します。
topic-arn
を Amazon SNS トピックの Amazon リソースネーム (ARN) に置き換えます。
aws events put-targets \ --rule TestRule \ --targets "Id"="1","Arn"="
topic-arn
"注記
Amazon EventBridge にターゲットトピックの呼び出しを許可するには、トピックにリソースベースのポリシーを追加する必要があります。詳細については、Amazon EventBridge ユーザーガイドの「Amazon SNS のアクセス許可」を参照してください。
詳細については、Amazon EventBridge ユーザーガイドの「EventBridge のイベントとイベントパターン」を参照してください。