Amazon EventBridge 이벤트 패턴의 콘텐츠 필터링 - 아마존 EventBridge

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon EventBridge 이벤트 패턴의 콘텐츠 필터링

EventBridge Amazon은 이벤트 패턴을 사용한 선언적 콘텐츠 필터링을 지원합니다. 콘텐츠 필터링을 사용하면 매우 특정한 조건에서만 이벤트와 일치하는 복잡한 이벤트 패턴을 작성할 수 있습니다. 예를 들어 다음과 같은 경우 이벤트와 일치하는 이벤트 패턴을 생성할 수 있습니다.

  • 이벤트 필드는 특정 숫자 범위 내에 있습니다.

  • 이벤트는 특정 IP 주소에서 발생합니다.

  • 이벤트 JSON에는 특정 필드가 없습니다.

중요

EventBridge에서는 higher-than-expected 요금 청구 및 스로틀링으로 이어질 수 있는 규칙을 만들 수 있습니다. 예를 들어 규칙이 끝없이 반복적으로 실행되는 무한 루프로 이어지는 규칙을 본의 아니게 생성할 수 있습니다. Amazon S3 버킷에서 ACL이 바뀐 것을 감지하고 소프트웨어를 트리거하여 ACL을 원하는 상태로 변경하는 규칙을 생성했다고 가정합니다. 이때 규칙이 부주의하게 작성되면 ACL에 대한 변경이 이어져 규칙을 다시 실행하면서 무한 루프에 빠지게 됩니다.

이러한 예상치 못한 결과를 최소화하기 위해 정확한 규칙 및 이벤트 패턴을 작성하는 방법에 대한 지침은 Amazon EventBridge 규칙 정의 시 모범 사례Amazon EventBridge 이벤트 패턴 정의 모범 사례 섹션을 참조하세요.

접두사 일치

이벤트 소스에 있는 값의 접두사에 따라 이벤트를 매칭할 수 있습니다. 문자열 값에 접두사 일치를 사용할 수 있습니다.

예를 들어 다음 이벤트 패턴은 "time" 필드가 "time": "2017-10-02T18:43:48Z"와 같이 "2017-10-02"로 시작된 모든 이벤트와 일치합니다.

{ "time": [ { "prefix": "2017-10-02" } ] }

대소문자를 무시하고 접두사 매칭

다음과 함께 사용하여 equals-ignore-case 값이 시작하는 문자의 대/소문자에 관계없이 접두사 값을 일치시킬 수도 있습니다. prefix.

예를 들어, 다음 이벤트 패턴은 service 필드가 해당 문자열로 시작하는 모든 이벤트와 일치하지만 EventB EVENTBeventb, 또는 해당 문자의 다른 대/소문자로 시작하는 모든 이벤트와 일치합니다.

{ "detail": {"service" : [{ "prefix": { "equals-ignore-case": "EventB" }}]} }

접미사 일치

이벤트 소스에 있는 값의 접미사에 따라 이벤트를 매칭할 수 있습니다. 문자열 값에 접미사 일치를 사용할 수 있습니다.

예를 들어 다음 이벤트 패턴은 "FileName" 필드가 .png 파일 확장명으로 끝나는 모든 이벤트와 일치합니다.

{ "FileName": [ { "suffix": ".png" } ] }

대소문자를 무시하고 접미사 매칭

다음과 함께 사용하면 값이 끝나는 문자의 대/소문자에 상관없이 접미사 값을 일치시킬 수도 있습니다. equals-ignore-case suffix.

예를 들어, 다음 이벤트 패턴은 FileName 필드가 문자열로 끝나는 모든 이벤트와 .PNG 일치하거나 해당 문자의 다른 .png 대문자도 일치합니다.

{ "detail": {"FileName" : [{ "suffix": { "equals-ignore-case": ".png" }}]} }

Anything-but 일치

Anything-but 일치는 규칙에 제공된 것을 제외한 모든 것과 일치합니다.

문자열만 포함하거나 숫자만 포함하는 목록을 포함하여 문자열 및 숫자 값과 함께 Anything-but 일치를 사용할 수 있습니다.

다음 이벤트 패턴은 문자열 및 숫자와의 anything-but 일치를 보여줍니다.

{ "detail": { "state": [ { "anything-but": "initializing" } ] } } { "detail": { "x-limit": [ { "anything-but": 123 } ] } }

다음 이벤트 패턴은 문자열 목록과의 anything-but 일치를 보여줍니다.

{ "detail": { "state": [ { "anything-but": [ "stopped", "overloaded" ] } ] } }

다음 이벤트 패턴은 숫자 목록과의 anything-but 일치를 보여줍니다.

{ "detail": { "x-limit": [ { "anything-but": [ 100, 200, 300 ] } ] } }

대소문자를 무시하고 일치시키는 것 외에는 아무 것도 없습니다.

와 함께 anything-but 사용하여 equals-ignore-case 대/소문자를 구분하지 않고 문자열 값을 일치시킬 수도 있습니다.

다음 이벤트 패턴은 '초기화' 문자열뿐 아니라 '초기화', '초기화' 또는 해당 문자의 기타 모든 대소문자를 포함하는 state 필드와 일치합니다.

{ "detail": {"state" : [{ "anything-but": { "equals-ignore-case": "initializing" }}]} }

와 함께 anything-but 사용하여 equals-ignore-case 값 목록과 일치시킬 수도 있습니다.

{ "detail": {"state" : [{ "anything-but": { "equals-ignore-case": ["initializing", "stopped"] }}]} }

접두사와 일치하는 것 외에는 아무 것도 없습니다.

다음 이벤트 패턴은 "state" 필드에 "init" 접두사가 없는 모든 이벤트와 일치하는 anything-but 일치를 보여줍니다.

참고

Anything-but 일치는 목록이 아닌 단일 접두사에만 작동합니다.

{ "detail": { "state": [ { "anything-but": { "prefix": "init" } } ] } }

접미사 일치 이외의 모든 것

와 함께 사용하면 suffix 대/소문자를 anything-but 구분하지 않고 문자열 값을 일치시킬 수 있습니다.

참고

매칭을 제외한 모든 항목은 단일 접미사만 사용할 수 있으며 목록은 사용할 수 없습니다.

다음 이벤트 패턴은 로 끝나는 필드의 FileName 모든 값과 일치합니다. .txt

{ "detail": { "FileName": [ { "anything-but": { "suffix": ".txt" } } ] } }

숫자 일치

숫자 일치는 JSON 번호인 값과 함께 작동합니다. -5.0e9와 +5.0e9 사이의 값으로 제한되며 정밀도는 15자리(소수점 오른쪽의 6자리)입니다.

다음은 모든 필드에 해당하는 이벤트만 매칭되는 이벤트 패턴의 숫자 일치를 보여줍니다.

{ "detail": { "c-count": [ { "numeric": [ ">", 0, "<=", 5 ] } ], "d-count": [ { "numeric": [ "<", 10 ] } ], "x-limit": [ { "numeric": [ "=", 3.018e2 ] } ] } }

IP 주소 일치

IPv4 및 IPv6 주소에 대한 IP 주소 일치를 사용할 수 있습니다. 다음 이벤트 패턴은 10.0.0으로 시작하고 0에서 255 사이의 숫자로 끝나는 IP 주소와 일치하는 IP 주소를 보여줍니다.

{ "detail": { "sourceIPAddress": [ { "cidr": "10.0.0.0/24" } ] } }

Exists 일치

Exists 일치는 이벤트의 JSON에서 필드의 유무에 따라 작동합니다.

Exists 일치는 리프 노드에서만 작동합니다. 중간 노드에서는 작동하지 않습니다.

다음 이벤트 패턴은 detail.state 필드가 있는 모든 이벤트와 일치합니다.

{ "detail": { "state": [ { "exists": true } ] } }

이전 이벤트 패턴은 다음 이벤트와 일치합니다.

{ "version": "0", "id": "7bf73129-1428-4cd3-a780-95db273d1602", "detail-type": "EC2 Instance State-change Notification", "source": "aws.ec2", "account": "123456789012", "time": "2015-11-11T21:29:54Z", "region": "us-east-1", "resources": ["arn:aws:ec2:us-east-1:123456789012:instance/i-abcd1111"], "detail": { "instance-id": "i-abcd1111", "state": "pending" } }

다음 이벤트에는 detail.state 필드가 없으므로 이전 이벤트 패턴은 다음 이벤트와 일치하지 않습니다.

{ "detail-type": [ "EC2 Instance State-change Notification" ], "resources": [ "arn:aws:ec2:us-east-1:123456789012:instance/i-02ebd4584a2ebd341" ], "detail": { "c-count" : { "c1" : 100 } } }

E quals-ignore-case 매칭

E quals-ignore-case 매칭은 대소문자를 구분하지 않고 문자열 값에 적용됩니다.

다음 이벤트 패턴은 대소문자를 구분하지 않고 지정된 문자열과 일치하는 detail-type 필드가 있는 모든 이벤트와 일치합니다.

{ "detail-type": [ { "equals-ignore-case": "ec2 instance state-change notification" } ] }

이전 이벤트 패턴은 다음 이벤트와 일치합니다.

{ "detail-type": [ "EC2 Instance State-change Notification" ], "resources": [ "arn:aws:ec2:us-east-1:123456789012:instance/i-02ebd4584a2ebd341" ], "detail": { "c-count" : { "c1" : 100 } } }

와일드카드를 사용한 매칭

와일드카드 문자(*)를 사용하여 이벤트 패턴의 문자열 값을 매칭할 수 있습니다.

참고

현재 와일드카드 문자는 이벤트 버스 규칙에서만 지원됩니다.

이벤트 패턴에서 와일드카드를 사용할 때 고려할 사항:

  • 주어진 문자열 값에 와일드카드 문자를 원하는 수만큼 지정할 수 있지만 연속된 와일드카드 문자는 지원되지 않습니다.

  • EventBridge 와일드카드 필터에 백슬래시 문자 (\) 를 사용하여 리터럴 * 및\ 문자를 지정할 수 있습니다.

    • 문자열 \*은 리터럴 * 문자를 나타냅니다.

    • 문자열 \\은 리터럴 \ 문자를 나타냅니다.

    백슬래시를 사용하여 다른 문자를 이스케이프 처리하는 것은 지원되지 않습니다.

와일드카드 및 이벤트 패턴 복잡성

와일드카드를 사용하는 규칙의 복잡성에는 제한이 있습니다. 규칙이 너무 복잡하면 규칙을 만들려고 InvalidEventPatternException 하면 an을 EventBridge 반환합니다. 규칙에서 이러한 오류가 발생하는 경우 아래 지침을 사용하여 이벤트 패턴의 복잡성을 줄이는 것이 좋습니다.

  • 와일드카드 문자 사용 횟수 줄이기

    가능한 여러 값과 매칭해야 하는 경우에만 와일드카드 문자를 사용하세요. 예를 들어 동일한 리전의 이벤트 버스와 매칭하려는 다음 이벤트 패턴을 살펴보세요.

    { "EventBusArn": [ { "wildcard": "*:*:*:*:*:event-bus/*" } ] }

    위의 경우 ARN의 많은 섹션은 이벤트 버스가 위치한 리전을 직접 기반으로 합니다. 따라서 us-east-1 리전을 사용하는 경우 원하는 값과 여전히 일치하는 덜 복잡한 패턴은 다음을 예로 들 수 있습니다.

    { "EventBusArn": [ { "wildcard": "arn:aws:events:us-east-1:*:event-bus/*" } ] }
  • 와일드카드 문자 뒤에 나오는 반복되는 문자 시퀀스 줄이기

    와일드카드를 사용한 후 동일한 문자 시퀀스가 여러 번 나타나면 이벤트 패턴 처리가 더 복잡해집니다. 이벤트 패턴을 재구성하여 반복되는 시퀀스를 최소화하세요. 예를 들어 모든 사용자의 파일 이름 doc.txt 파일과 일치하는 다음 예를 살펴보세요.

    { "FileName": [ { "wildcard": "/Users/*/dir/dir/dir/dir/dir/doc.txt" } ] }

    doc.txt 파일이 지정된 경로에서만 발생한다는 것을 알고 있다면 다음과 같은 방법으로 반복되는 문자 시퀀스를 줄일 수 있습니다.

    { "FileName": [ { "wildcard": "/Users/*/doc.txt" } ] }

여러 일치가 있는 복잡한 예제

여러 일치 규칙을 보다 복잡한 이벤트 패턴으로 결합할 수 있습니다. 예를 들어 다음 이벤트 패턴은 anything-butnumeric을 결합합니다.

{ "time": [ { "prefix": "2017-10-02" } ], "detail": { "state": [ { "anything-but": "initializing" } ], "c-count": [ { "numeric": [ ">", 0, "<=", 5 ] } ], "d-count": [ { "numeric": [ "<", 10 ] } ], "x-limit": [ { "anything-but": [ 100, 200, 300 ] } ] } }
참고

이벤트 패턴을 작성할 때 키를 두 번 이상 포함하면 마지막 참조가 이벤트를 평가하는 데 사용됩니다. 예를 들어, 다음 패턴의 경우:

{ "detail": { "location": [ { "prefix": "us-" } ], "location": [ { "anything-but": "us-east" } ] } }

location을 평가할 때는 { "anything-but": "us-east" }만 고려됩니다.

$or 일치가 있는 복잡한 예제

여러 필드에서 일치하는 필드 값이 있는지 확인하는 복잡한 이벤트 패턴을 생성할 수도 있습니다. 여러 필드의 값 중 하나라도 일치하는 경우 $or를 사용하여 일치하는 이벤트 패턴을 만듭니다.

$or 구성의 개별 필드에 대한 패턴 일치에 숫자 일치배열 등의 다른 필터 유형을 포함할 수 있습니다.

다음과 같은 조건 중 하나라도 충족되면 다음 이벤트 패턴이 일치합니다.

  • c-count 필드가 0보다 크거나 5 이하입니다.

  • d-count 필드가 10보다 작습니다.

  • x-limit 필드는 3.018e2와 같습니다.

{ "detail": { "$or": [ { "c-count": [ { "numeric": [ ">", 0, "<=", 5 ] } ] }, { "d-count": [ { "numeric": [ "<", 10 ] } ] }, { "x-limit": [ { "numeric": [ "=", 3.018e2 ] } ] } ] } }
참고

이벤트 패턴(예: PutRule, CreateArchive, UpdateArchiveTestEventPattern)을 허용하는 API는 $or를 사용하여 1,000개가 넘는 규칙 조합이 생성되면 InvalidEventPatternException을 발생시킵니다.

이벤트 패턴에서 규칙 조합 수를 결정하려면 이벤트 패턴에 있는 각 $or 배열의 총 인수의 수를 곱합니다. 예를 들어 위 패턴에는 세 개의 인수가 있는 단일 $or 배열이 포함되므로 총 규칙 조합 수도 3입니다. 두 개의 인수가 있는 다른 $or 배열을 추가하면 총 규칙 조합은 6개가 됩니다.