

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

# Amazon EventBridge의 이벤트 패턴에 사용할 비교 연산자
<a name="eb-create-pattern-operators"></a>

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

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


| **비교** | **예제** | **규칙 구문** | **이벤트 버스 지원** | **파이프 지원** | 
| --- | --- | --- | --- | --- | 
|  및  |  위치가 “New York”이고 요일이 “Monday”임  |  `"Location": [ "New York" ], "Day": ["Monday"]`  |  예  |  예  | 
| [Anything-but](#eb-filtering-anything-but) | 상태는 ‘initializing’ 이외의 모든 값입니다. | `"state": [ { "anything-but": "initializing" } ]` |  예  |  예  | 
| [Anything-but(다음으로 시작하는 것)](#eb-filtering-anything-but-prefix) | 리전이 미국에 있지 않습니다. |  `"Region": [ { "anything-but": {"prefix": "us-" } } ]`  |  예  |  아니요  | 
| [Anything-but(다음으로 끝나는 것)](#eb-filtering-anything-but-suffix) | FileName이 .png 확장자로 끝나지 않습니다. |  `"FileName": [ { "anything-but": { "suffix": ".png" } } ]`  |  예  |  아니요  | 
| [Anything-but(대/소문자 무시)](#eb-filtering-anything-but-ignore-case) | 상태는 ‘initializing’ 또는 ‘INITIALIZING’과 같은 기타 대/소문자 변형 이외의 모든 값입니다. | `"state": : [{ "anything-but": { "equals-ignore-case": "initializing" }}]}` |  예  |  아니요  | 
| [와일드카드를 사용하는 Anything-but](#eb-filtering-anything-but-wildcard) | FileName은 `/lib/`를 포함하는 파일 경로가 아닙니다. |  `"FilePath" : [{ "anything-but": { "wildcard": "*/lib/*" }}]`  |  예  |  아니요  | 
|  [다음으로 시작](#eb-filtering-prefix-matching)  |  리전이 미국에 있습니다.  |  `"Region": [ {"prefix": "us-" } ]`  |  예  |  예  | 
| 다음으로 시작(대/소문자 무시) | 서비스 이름은 대/소문자에 관계없이 ‘eventb’ 문자로 시작합니다. | `{"service" : [{ "prefix": { "equals-ignore-case": "eventb" }}]}` |  예  |  예  | 
|  [비어 있음](eb-event-patterns-null-values.md)  |  LastName이 비어 있습니다.  |  `"LastName": [""]`  |  예  |  예  | 
|  같음  |  이름이 ‘Alice’임  |  `"Name": [ "Alice" ]`  |  예  |  예  | 
|  [같음(대/소문자 무시)](#eb-filtering-equals-ignore-case-matching)  |  이름이 ‘Alice’임  |  `"Name": [ { "equals-ignore-case": "alice" } ]`  |  예  |  예  | 
|  [다음으로 끝남](#eb-filtering-suffix-matching)  |  FileName은 .png 확장명으로 끝남  |  `"FileName": [ { "suffix": ".png" } ]`  |  예  |  예  | 
| 다음으로 끝남(대/소문자 무시) | 서비스 이름은 문자 ‘tbridge’ 또는 ‘TBRIDGE’와 같은 기타 대/소문자 변형으로 끝납니다. | `{"service" : [{ "suffix": { "equals-ignore-case": "tBridge" }}]}` |  예  |  예  | 
|  [존재함](#eb-filtering-exists-matching)  |  Productname이 있음  |  `"ProductName": [ { "exists": true } ]`  |  예  |  예  | 
|  [존재하지 않음](#eb-filtering-exists-matching)  |  Productname이 없음  |  `"ProductName": [ { "exists": false } ]`  |  예  |  예  | 
|  [아님](#eb-filtering-anything-but)  |  날씨는 “Raining”이 아님  |  `"Weather": [ { "anything-but": [ "Raining" ] } ]`  |  예  |  예  | 
|  [Null](eb-event-patterns-null-values.md)  |  UserID가 null임  |  `"UserID": [ null ]`  |  예  |  예  | 
|  [숫자(같음)](#filtering-numeric-matching)  |  가격은 100임  |  `"Price": [ { "numeric": [ "=", 100 ] } ]`  |  예  |  예  | 
|  [숫자(범위)](#filtering-numeric-matching)  |  가격이 10을 초과하고 20보다 작거나 같음  |  `"Price": [ { "numeric": [ ">", 10, "<=", 20 ] } ]`  |  예  |  예  | 
|  또는  |  PaymentType이 “Credit” 또는 “Debit”임  |  `"PaymentType": [ "Credit", "Debit"]`  |  예  |  예  | 
|  [또는(여러 필드)](#eb-filtering-complex-example-or)  |  위치가 'New York'이고 요일이 'Monday'임  |  `"$or": [ { "Location": [ "New York" ] }, { "Day": [ "Monday" ] } ]`  |  예  |  예  | 
|  [와일드카드](#eb-filtering-wildcard-matching)  |  ‘dir’ 폴더 내에 있는 확장명이.png인 모든 파일  |  `"FileName": [ { "wildcard": "dir/*.png" } ] `  |  예  |  아니요  | 

## 접두사 일치
<a name="eb-filtering-prefix-matching"></a>

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

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

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

### 대/소문자를 무시하는 접두사 일치
<a name="eb-filtering-prefix-matching-ignore-case"></a>

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

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

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

## 접미사 일치
<a name="eb-filtering-suffix-matching"></a>

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

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

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

### 대/소문자를 무시하는 접미사 일치
<a name="eb-filtering-suffix-matching-ignore-case"></a>

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

예를 들어, 다음 이벤트 패턴은 `FileName` 필드가 문자열 `.png`로 끝나는 모든 이벤트와 일치할 뿐만 아니라, `.PNG` 또는 해당 문자의 기타 대/소문자 변형과도 일치합니다.

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

## Anything-but 일치
<a name="eb-filtering-anything-but"></a>

*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 일치
<a name="eb-filtering-anything-but-ignore-case"></a>

`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 일치
<a name="eb-filtering-anything-but-prefix"></a>

`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 일치
<a name="eb-filtering-anything-but-suffix"></a>

`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 일치
<a name="eb-filtering-anything-but-wildcard"></a>

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

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

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

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

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

자세한 내용은 [와일드카드를 사용한 매칭](#eb-filtering-wildcard-matching) 단원을 참조하십시오.

## 숫자 일치
<a name="filtering-numeric-matching"></a>

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

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

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

## IP 주소 일치
<a name="eb-filtering-ip-matching"></a>

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

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

## Exists 일치
<a name="eb-filtering-exists-matching"></a>

*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 일치
<a name="eb-filtering-equals-ignore-case-matching"></a>

*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
    }
  }
}
```

## 와일드카드를 사용한 매칭
<a name="eb-filtering-wildcard-matching"></a>

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

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

이벤트 패턴에서 와일드카드를 사용할 때 고려할 사항:
+ 주어진 문자열 값에 와일드카드 문자를 원하는 수만큼 지정할 수 있지만 연속된 와일드카드 문자는 지원되지 않습니다.
+ EventBridge는 와일드카드 필터에 백슬래시 문자(\$1)를 사용하여 리터럴 \$1 및 \$1 문자를 지정할 수 있도록 지원합니다.
  + 문자열 `\*`은 리터럴 \$1 문자를 나타냅니다.
  + 문자열 `\\`은 리터럴 \$1 문자를 나타냅니다.

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

### 와일드카드 및 이벤트 패턴 복잡성
<a name="eb-filtering-wildcard-matching-complexity"></a>

와일드카드를 사용하는 규칙의 복잡성에는 제한이 있습니다. 규칙이 너무 복잡하면 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" } ]
  }
  ```

## 다중 일치가 있는 복잡한 예제
<a name="eb-filtering-complex-example"></a>

다중 일치 기준을 더 복잡한 이벤트 패턴으로 결합할 수 있습니다. 예를 들어 다음 이벤트 패턴은 `anything-but`과 `numeric`을 결합합니다.

```
{
  "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` 일치가 있는 복잡한 예제
<a name="eb-filtering-complex-example-or"></a>

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

`$or` 구성의 개별 필드에 대한 패턴 일치에 [숫자 일치](#filtering-numeric-matching) 및 [배열](eb-event-patterns-arrays.md) 등의 다른 필터 유형을 포함할 수 있습니다.

다음과 같은 조건 중 하나라도 충족되면 다음 이벤트 패턴이 일치합니다.
+ `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`, `UpdateArchive` 및 `TestEventPattern`)을 허용하는 API는 `$or`를 사용하여 1,000개가 넘는 규칙 조합이 생성되면 `InvalidEventPatternException`을 발생시킵니다.  
이벤트 패턴에서 규칙 조합 수를 결정하려면 이벤트 패턴에 있는 각 `$or` 배열의 총 인수의 수를 곱합니다. 예를 들어 위 패턴에는 세 개의 인수가 있는 단일 `$or` 배열이 포함되므로 총 규칙 조합 수도 3입니다. 두 개의 인수가 있는 다른 `$or` 배열을 추가하면 총 규칙 조합은 6개가 됩니다.