Amazon EventBridge를 사용하여 canary 이벤트 모니터링 - Amazon CloudWatch

Amazon EventBridge를 사용하여 canary 이벤트 모니터링

Amazon EventBridge 이벤트 규칙은 canary가 상태를 변경하거나 실행을 완료할 경우 이를 알려줄 수 있습니다. EventBridge는 AWS 리소스의 변경 사항을 설명하는 시스템 이벤트의 스트림을 거의 실시간으로 제공합니다. CloudWatch Synthetics는 이러한 이벤트를 ‘최선을 다해’ EventBridge에 전송합니다. 최선을 다한 전달이란 CloudWatch Synthetics가 모든 이벤트를 EventBridge에 전송하려고 시도하지만 드물게 이벤트가 전달되지 않을 수 있음을 의미합니다. EventBridge는 수신한 모든 이벤트를 한 번 이상 처리합니다. 또한 이벤트 리스너는 이벤트가 발생한 순서대로 이벤트를 수신하지 못할 수 있습니다.

참고

Amazon EventBridge는 애플리케이션을 다양한 소스의 데이터와 연결하는 데 사용할 수 있는 이벤트 버스 서비스입니다. 자세한 내용은 Amazon EventBridge 사용 설명서Amazon EventBridge란? 단원을 참조하세요.

CloudWatch Synthetics는 canary가 상태를 변경하거나 실행을 완료할 경우 이벤트를 내보냅니다. CloudWatch Synthetics에서 전송한 모든 이벤트 유형과 일치하거나 특정 이벤트 유형과만 일치하는 이벤트 패턴을 포함하는 EventBridge 규칙을 생성할 수 있습니다. canary가 규칙을 트리거하면 EventBridge는 규칙에 정의된 대상 작업을 호출합니다. 이렇게 하면 canary 상태 변경 또는 canary 실행 완료에 대한 응답으로 알림을 전송하고 이벤트 정보를 캡처하며 수정 작업을 수행할 수 있습니다. 예를 들면, 다음 사용 사례에 대한 규칙을 생성할 수 있습니다.

  • canary 실행이 실패할 경우 조사

  • canary가 ERROR 상태가 된 경우 조사

  • canary의 수명 주기 추적

  • 워크플로의 일부로 canary 실행 성공 또는 실패 모니터링

CloudWatch Synthetics의 이벤트 예

이 단원에서는 CloudWatch Synthetics의 이벤트 예를 설명합니다. 이벤트 형식에 대한 자세한 내용은 EventBridge의 이벤트 및 이벤트 패턴 단원을 참조하세요.

canary 상태 변경

이 이벤트 유형에서 current-stateprevious-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 스트림

    • 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의 이벤트 및 이벤트 패턴 단원을 참조하세요.