EventBridge 규칙에 대한 사용자 지정 이벤트 패턴을 생성하려면 어떻게 해야 하나요?

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

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

해결 방법

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

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

수신 이벤트의 JSON 형식 결정

수신 이벤트에 대한 JSON 형식을 결정하는 방법은 다음과 같이 3가지가 있습니다.

1.    이 이벤트 예 목록을 참조하세요.

2.    Amazon EventBridge 콘솔에 통합된 샘플 이벤트를 사용합니다. 샘플 이벤트를 사용하려면 다음을 수행합니다.

이벤트 일치 패턴(Event matching pattern)에서 서비스별 사전 정의된 패턴(Pre-defined pattern by service)을 선택합니다. 드롭다운 목록에서 서비스 공급자(Service provider)를 선택합니다. 드롭다운 목록에서 서비스 이름(Service name)을 선택합니다. 드롭다운 목록에서 이벤트 유형(Event type)을 선택합니다. 이벤트가 모든 리소스(Any resource) 또는 특정 리소스(Specific resource)에 대한 이벤트인지 선택합니다. 이벤트가 임의 상태(Any status)인지 특정 상태(Specific status)인지 선택합니다. 이벤트 패턴 텍스트 상자가 선택한 샘플 이벤트 패턴으로 채워집니다. 필요에 따라 패턴을 복사하거나 편집할 수 있습니다.

3.    특정 서비스의 모든 이벤트와 일치하는 간단한 이벤트 패턴을 사용하여 EventBridge 규칙을 생성합니다. 패턴 정의(Define pattern)에서 이벤트 패턴(Event pattern)을 선택합니다.

참고: 이벤트 패턴에는 와일드카드가 허용되지 않습니다. 빈 이벤트 패턴도 허용되지 않습니다.

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

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

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

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

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

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

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

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

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

    ],
    "detail": {
        "eventVersion": "1.05",
        "userIdentity": {
            "type": "AssumedRole",
            "principalId": "AROAABCDEFGHIJKLMNOPQ:Admin",
            "arn": "arn:aws:sts::123456789012:assumed-role/Admin",
            "accountId": "123456789012",
            "accessKeyId": "ASIAABCDEFGH12345678",
            "sessionContext": {
                "sessionIssuer": {
                    "type": "Role",
                    "principalId": "AROAABCDEFGHIJKLMNOPQ",
                    "arn": "arn:aws:iam::123456789012:role/Admin",
                    "accountId": "123456789012",
                    "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": "12.34.56.78",
        "userAgent": "console.amazonaws.com",
        "requestParameters": {
            "hostedZoneId": "Z1RP12345WXRQD",
            "changeBatch": {
                "changes": [
                    {
                        "action": "CREATE",
                        "resourceRecordSet": {
                            "type": "A",
                            "tTL": 300,
                            "resourceRecords": [
                                {
                                    "value": "4.4.4.4"
                                }
                            ],
                            "name": "test.example.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": ["Z1RP12345WXRQD"],
            "changeBatch": {
                "changes":
                    {
                        "action": ["CREATE"],
                        "resourceRecordSet": {
                            "type": ["A"]
                        }
                    }
            }
        }
    }
}

이벤트 패턴 테스트

EventBridge 콘솔을 사용하여 테스트

규칙을 만들 때 이벤트 패턴을 테스트할 수 있습니다. 이벤트 패턴 테스트를 선택하여 이벤트를 테스트합니다.

AWS CLI를 사용하여 테스트

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