CloudWatch 이벤트 규칙에 대한 사용자 지정 이벤트 패턴을 생성하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2021년 1월 26일

Amazon CloudWatch 이벤트 규칙을 사용하여 AWS 서비스에 대한 특정 이벤트를 캡처하려고 합니다. 하지만 이벤트와 일치하는 사용자 지정 이벤트 패턴을 생성할 수 없습니다. 사용자 지정 CloudWatch 이벤트 패턴을 생성하려면 어떻게 해야 합니까?

해결 방법

참고: AWS 명령줄 인터페이스(AWS CLI) 명령을 실행할 때 오류가 발생할 경우 AWS CLI의 최신 버전을 사용하고 있는지 확인하세요.

이벤트는 AWS 서비스에 의해 사전 정의된 JSON 형식으로 생성되어 Amazon CloudWatch Events로 전송됩니다. 이벤트 패턴을 사용하여 수신 이벤트를 필터링한 다음 대상을 트리거하는 규칙을 생성할 수 있습니다.

수신 이벤트의 JSON 형식 결정

이벤트 예제 목록을 참조하세요. 또는 다음을 완료하여 수신 이벤트를 확인합니다.

1.    특정 서비스의 모든 이벤트와 일치하는 간단한 이벤트 패턴을 사용하여 CloudWatch Events 규칙을 생성합니다. 이벤트 소스에서 [이벤트 패턴(Event Pattern)]을 선택합니다.
참고: 이벤트 패턴에는 와일드카드가 허용되지 않습니다. 빈 이벤트 패턴도 허용되지 않습니다.

예를 들어, Amazon EC2(Amazon Elastic Compute Cloud) 서비스에서 생성한 모든 이벤트를 보려면 다음 필터를 사용합니다.

{
 "source": [ "aws.ec2" ]
}

2.    SNS 주제 또는 CloudWatch Logs를 사용하여 규칙에 대상을 연결합니다. 이렇게 하면, 일치하는 모든 이벤트가 SNS 주제 또는 CloudWatch Logs를 통해 수신됩니다. 특정 AWS 서비스가 전송한 정확한 JSON 이벤트를 수신하게 되는 것입니다. 이러한 결과를 기반으로 사용자 지정 이벤트 패턴을 생성할 수 있습니다. 수신 이벤트가 있는 그대로 전달되도록 CloudWatch 규칙의 입력 변환기에 대한 기본 설정(입력 구성: Matched event)을 사용해야 합니다.

수신 이벤트와 동일한 JSON 형식으로 이벤트 패턴 생성

다음 규칙은 유효한 매칭 이벤트 패턴을 생성할 때 적용됩니다.

  • 이벤트 패턴에서 지정하지 않은 필드는 모두 자동으로 일치됩니다. 예를 들어, 이벤트 패턴에 Detail이 지정되지 않은 경우 이벤트 패턴은 세부 정보에 상관 없이 모든 이벤트를 매칭시킵니다.
  • JSON 구조에서 한 레벨 아래에 있는 필드를 매칭시키려면 중괄호 { }를 사용합니다. JSON 뷰어는 더 큰 이벤트 구조를 살펴볼 때 유용할 수 있습니다.
  • JSON 이벤트에서 일치시킬 문자열은 대괄호 [ ]로 묶어야 합니다. 값 중 하나가 수신 이벤트에 존재할 때 이벤트가 트리거되도록 대괄호로 여러 값을 포함할 수 있습니다. 예를 들어, Amazon EC2 또는 Amazon DynamoDB에서 전송한 모든 이벤트를 기반으로 이벤트를 트리거하려면 다음 필터를 사용합니다.
{
 "source": [ "aws.ec2", "aws.dynamodb" ]
}

참고: 이벤트 패턴이 유효한 것으로 표시되도록 서비스에서 전송한 JSON 이벤트에서 대괄호를 모두 제거해야 합니다. 예를 들어, 특정 Amazon Route 53 호스팅 영역에 대해 Type A 레코드가 생성될 때 알림을 받으려면 다음을 사용합니다.

Route 53에서 CloudWatch Events로 전송된 이벤트(SNS 주제 또는 CloudWatch Logs로부터 수신):

{
    "version": "0",
    "id": "d857ae5c-cc83-3742-ab88-d825311ee4e9",
    "detail-type": "AWS API Call via CloudTrail",
    "source": "aws.route53",
    "account": "756022511916",
    "time": "2019-12-05T16:50:53Z",
    "region": "us-east-1",
    "resources": [

    ],
    "detail": {
        "eventVersion": "1.05",
        "userIdentity": {
            "type": "AssumedRole",
            "principalId": "AROAIVOJE6CTAWGSJQUP2:patsusha-Isengard",
            "arn": "arn:aws:sts::756022511916:assumed-role/Admin/patsusha-Isengard",
            "accountId": "756022511916",
            "accessKeyId": "ASIA3ABTUBEWCHWLUGFI",
            "sessionContext": {
                "sessionIssuer": {
                    "type": "Role",
                    "principalId": "AROAIVOJE6CTAWGSJQUP2",
                    "arn": "arn:aws:iam::756022511916:role/Admin",
                    "accountId": "756022511916",
                    "userName": "Admin"
                },
                "webIdFederationData": {

                },
                "attributes": {
                    "mfaAuthenticated": "false",
                    "creationDate": "2019-12-05T16:28:27Z"
                }
            }
        },
        "eventTime": "2019-12-05T16:50:53Z",
        "eventSource": "route53.amazonaws.com",
        "eventName": "ChangeResourceRecordSets",
        "awsRegion": "us-east-1",
        "sourceIPAddress": "72.21.196.66",
        "userAgent": "console.amazonaws.com",
        "requestParameters": {
            "hostedZoneId": "Z1RP9G2VYLRY8V",
            "changeBatch": {
                "changes": [
                    {
                        "action": "CREATE",
                        "resourceRecordSet": {
                            "type": "A",
                            "tTL": 300,
                            "resourceRecords": [
                                {
                                    "value": "4.4.4.4"
                                }
                            ],
                            "name": "test4.sushantpatil.us."
                        }
                    }
                ]
            }
        },
        "responseElements": {
            "changeInfo": {
                "status": "PENDING",
                "id": "/change/C271P4WIKN511J",
                "submittedAt": "Dec 5, 2019 4:50:53 PM"
            }
        },
        "additionalEventData": {
            "Note": "Do not use to reconstruct hosted zone"
        },
        "requestID": "bbbf9847-96cb-45ef-b617-d535b9fe83d8",
        "eventID": "74e2d2c8-7497-4292-94d0-348272dbc4f7",
        "eventType": "AwsApiCall",
        "apiVersion": "2013-04-01"
    }
}

호스팅 영역에 대해 Type A 레코드가 생성될 때 알림을 받을 이벤트 필터 패턴:

{
"source": ["aws.route53"],
    "detail": {
        "eventSource": ["route53.amazonaws.com"],
        "eventName": ["ChangeResourceRecordSets"],
        "requestParameters": {
            "hostedZoneId": ["Z1RP9G2VYLRY8V"],
            "changeBatch": {
                "changes":
                    {
                        "action": ["CREATE"],
                        "resourceRecordSet": {
                            "type": ["A"]
                        }
                    }
            }
        }
    }
}

AWS CLI를 사용하여 이벤트 패턴 테스트

AWS CLI에서 test-event-pattern 명령을 실행합니다. 이벤트 패턴이 일치하는지 보려면 결과가 true인지 확인합니다. 이렇게 하면 AWS 서비스에서 전송한 JSON 이벤트를 식별하고 특정 이벤트를 캡처하는 사용자 지정 이벤트 패턴을 지원할 수 있습니다.


이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요합니까?