Amazon EventBridge의 이벤트 패턴에 사용할 비교 연산자 - Amazon EventBridge

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

Amazon EventBridge의 이벤트 패턴에 사용할 비교 연산자

다음은 EventBridge에서 사용할 수 있는 모든 비교 연산자에 대한 요약입니다.

비교 연산자는 $oranything-but을 제외하고 리프 노드에서만 작동합니다.

비교 예제 규칙 구문 이벤트 버스 지원 파이프 지원

위치가 “New York”이고 요일이 “Monday”임

"Location": [ "New York" ], "Day": ["Monday"]

Anything-but 상태는 ‘initializing’ 이외의 모든 값입니다.

"state": [ { "anything-but": "initializing" } ]

Anything-but(다음으로 시작하는 것)

리전이 미국에 있지 않습니다.

"Region": [ { "anything-but": {"prefix": "us-" } } ]

아니요

Anything-but(다음으로 끝나는 것)

FileName이 .png 확장자로 끝나지 않습니다.

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

아니요

Anything-but(대/소문자 무시)

상태는 ‘initializing’ 또는 ‘INITIALIZING’과 같은 기타 대/소문자 변형 이외의 모든 값입니다.

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

아니요

와일드카드를 사용하는 Anything-but

FileName은 /lib/를 포함하는 파일 경로가 아닙니다.

"FilePath" : [{ "anything-but": { "wildcard": "*/lib/*" }}]

아니요

다음으로 시작

리전이 미국에 있습니다.

"Region": [ {"prefix": "us-" } ]

다음으로 시작(대/소문자 무시)

서비스 이름은 대/소문자에 관계없이 ‘eventb’ 문자로 시작합니다.

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

비어 있음

LastName이 비어 있습니다.

"LastName": [""]

같음

이름이 ‘Alice’임

"Name": [ "Alice" ]

같음(대/소문자 무시)

이름이 ‘Alice’임

"Name": [ { "equals-ignore-case": "alice" } ]

다음으로 끝남

FileName은 .png 확장명으로 끝남

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

다음으로 끝남(대/소문자 무시)

서비스 이름은 문자 'tbridge' 또는 TBRIDGE'와 같은 기타 대/소문자 변형으로 끝납니다.

{"service" : [{ "suffix": { "equals-ignore-case": "tBridge" }}]}

존재함

Productname이 있음

"ProductName": [ { "exists": true } ]

존재하지 않음

Productname이 없음

"ProductName": [ { "exists": false } ]

아님

날씨는 “Raining”이 아님

"Weather": [ { "anything-but": [ "Raining" ] } ]

Null

UserID가 null임

"UserID": [ null ]

숫자(같음)

가격은 100임

"Price": [ { "numeric": [ "=", 100 ] } ]

숫자(범위)

가격이 10을 초과하고 20보다 작거나 같음

"Price": [ { "numeric": [ ">", 10, "<=", 20 ] } ]

또는

PaymentType이 “Credit” 또는 “Debit”임

"PaymentType": [ "Credit", "Debit"]

또는(여러 필드)

위치가 'New York'이고 요일이 'Monday'임

"$or": [ { "Location": [ "New York" ] }, { "Day": [ "Monday" ] } ]

와일드카드

‘dir’ 폴더 내에 있는 확장명이.png인 모든 파일

"FileName": [ { "wildcard": "dir/*.png" } ]

아니요

접두사 일치

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

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

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

대/소문자를 무시하는 접두사 일치

또한 prefix.와 함께 equals-ignore-case를 사용함으로써, 값이 시작하는 문자의 대/소문자에 관계없이 접두사 값을 일치시킬 수도 있습니다.

예를 들어, 다음 이벤트 패턴은 service 필드가 문자열 EventB로 시작되는 모든 이벤트와 일치할 뿐만 아니라, EVENTB, eventb 또는 해당 문자의 기타 대/소문자 변형과도 일치합니다.

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

접미사 일치

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

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

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

대/소문자를 무시하는 접미사 일치

또한 suffix.와 함께 equals-ignore-case를 사용함으로써, 값이 끝나는 문자의 대/소문자에 관계없이 접미사 값을 일치시킬 수도 있습니다.

예를 들어, 다음 이벤트 패턴은 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 일치

anything-but과 함께 equals-ignore-case를 사용하여, 문자의 대/소문자에 관계없이 문자열 값을 일치시킬 수도 있습니다.

다음 이벤트 패턴은 문자열 ‘initializing’, ‘INITIALIZING’, ‘Initializing’ 또는 해당 문자의 기타 대/소문자 변형을 포함하지 않는 state 필드와 일치합니다.

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

anything-but과 함께 equals-ignore-case를 사용하여, 여러 값의 목록을 기준으로 일치시킬 수도 있습니다.

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

접두사의 Anything-but 일치

anything-but과 함께 prefix를 사용하여, 지정된 값으로 시작하지 않는 문자열 값을 일치시킬 수 있습니다. 이러한 값에는 단일 값 또는 여러 값의 목록이 포함됩니다.

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

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

다음 이벤트 패턴은 여러 접두사 값 목록과의 anything-but 일치를 보여줍니다. 이 이벤트 패턴은 "state" 필드에 접두사 "init" 또는 "stop"이 없는 모든 이벤트와 일치합니다.

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

접미사의 Anything-but 일치

anything-but과 함께 suffix를 사용하여, 지정된 값으로 끝나지 않는 문자열 값을 일치시킬 수 있습니다. 이러한 값에는 단일 값 또는 여러 값의 목록이 포함됩니다.

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

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

다음 이벤트 패턴은 여러 접미사 값 목록과의 anything-but 일치를 보여줍니다. 이 이벤트 패턴은 .txt 또는 .rtf로 끝나지 않는 FileName 필드의 모든 값과 일치합니다.

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

와일드카드를 사용한 Anything-but 일치

Anything-but 일치를 위해 지정한 값 내에 와일드카드 문자(*)를 사용할 수 있습니다. 이러한 값에는 단일 값 또는 여러 값의 목록이 포함됩니다.

다음 이벤트 패턴은 /lib/를 포함하지 않는 FileName 필드의 모든 값과 일치합니다.

{ "detail": { "FilePath" : [{ "anything-but": { "wildcard": "*/lib/*" }}] } }

다음 이벤트 패턴은 와일드카드를 포함하는 여러 값 목록과의 anything-but 일치를 보여줍니다. 이 이벤트 패턴은 /lib/ 또는 /bin/을 포함하지 않는 FileName 필드의 모든 값과 일치합니다.

{ "detail": { "FilePath" : [{ "anything-but": { "wildcard": ["*/lib/*", "*/bin/*"] }}] } }

자세한 내용은 와일드카드를 사용한 매칭 단원을 참조하십시오.

숫자 일치

숫자 일치는 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 } } }

Equals-ignore-case 일치

Equals-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는 와일드카드 필터에 백슬래시 문자(\)를 사용하여 리터럴 * 및 \ 문자를 지정할 수 있도록 지원합니다.

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

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

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

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

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

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

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

    { "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개가 됩니다.