Amazon EventBridge による Canary イベントのモニターリング - Amazon CloudWatch

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-1my-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\"]}}"

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

  2. トピックをルールターゲットとして追加します。

    • 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 のイベントとイベントパターン」を参照してください。