

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 事件模式語法
<a name="eb-create-pattern"></a>

若要建立事件模式，您必須指定要進行事件模式比對的事件欄位。僅指定用於比對的欄位。

例如，下列事件模式範例僅提供三個欄位的值：最上層欄位 `"source"`和 `"detail-type"`，以及`"detail"`物件欄位內的 `"state"` 欄位。套用規則時，EventBridge 會忽略事件中的所有其他欄位。

```
{
  "source": ["aws.ec2"],
  "detail-type": ["EC2 Instance State-change Notification"],
  "detail": {
    "state": ["terminated"]
  }
}
```

若要事件模式匹配事件，該事件必須包含事件模式中所列的所有欄位名稱。欄位名稱也必須顯示在具有相同巢狀結構的事件中。

當您撰寫事件模式來比對事件時，您可以使用 `TestEventPattern` API 或 `test-event-pattern` CLI 指令，來測試您的模式是否能比對出正確的事件。如需詳細資訊，請參閱 [TestEventPattern](https://docs.aws.amazon.com/AmazonCloudWatchEvents/latest/APIReference/API_TestEventPattern.html)。

## 相符事件值
<a name="eb-filtering-match-values"></a>

在事件模式中，要比對的值位於 JSON 數組中，由方括號 ("["、"]") 包圍，以便您可以提供多個值。例如，若要比對來自 Amazon EC2 或 的事件 AWS Fargate，您可以使用下列模式，其會比對 `"source"` 欄位值為 `"aws.ec2"`或 的事件`"aws.fargate"`。

```
{
    "source": ["aws.ec2", "aws.fargate"]
}
```

如需詳細資訊，請參閱[比對多個欄位值](eb-event-patterns-arrays.md)。

## 在 Amazon EventBridge 事件模式中使用比較運算子
<a name="eb-event-patterns-content-based-filtering"></a>

Amazon EventBridge 透過使用事件模式支援宣告式内容篩選。透過內容篩選功能，您可以撰寫複雜事件模式，並僅在非常特定的情況下符合事件。例如，您可以在下列情況下建立符合事件的事件模式：
+ 事件的欄位位於特定數值範圍內。
+ 該事件來自特定的 IP 地址。
+ 特定欄位不存在於事件 JSON 中。

如需詳細資訊，請參閱[比較運算子](eb-create-pattern-operators.md)。

## 建立事件模式時的考量
<a name="eb-create-pattern-considerations"></a>

以下是建構事件模式時需要考量的一些注意事項：
+ EventBridge 會忽略未包含於事件模式的事件中欄位。其效果是，對於未出現在事件模式中的字段擁有一個 `"*": "*"` 萬用字元。
+ 事件模式比對的值遵循 JSON 規則。您可以加入括在引號 (") 中的字串,、數字和關鍵字 `true`、`false`、`null`。
+ 針對字串，EventBridge 會在沒有大小寫折疊或任何其他字串標準化的情況下，使用精確字元比對。
+ 針對數字，EventBridge 也會使用字串表示法。例如，300、300.0 和 3.0e2 不會被視為相等。
+ 如果為相同的 JSON 欄位指定了多個模式，EventBridge 僅會使用最後一個模式。
+ 請注意，當 EventBridge 編譯事件模式以供使用時，它會使用點 (.) 作為連接字元。

  這表示 EventBridge 會將下列事件模式視為相同的模式：

  ```
  ## has no dots in keys
  { "detail" : { "state": { "status": [ "running" ] } } }
  
  ## has dots in keys
  { "detail" : { "state.status": [ "running" ] } }
  ```

  並且這兩種事件模式都將符合以下兩個事件：

  ```
  ## has no dots in keys
  { "detail" : { "state": { "status": "running" } } }
  
  ## has dots in keys
  { "detail" : { "state.status": "running"  } }
  ```
**注意**  
這會描述目前的 EventBridge 行為，而且不應該依賴於該行爲而不進行變更。
+ 包含重複欄位的事件模式無效。如果某個模式包含重複的欄位，EventBridge 僅會考慮最後一個欄位值。

  例如，以下事件模式將匹配相同的事件：

  ```
  ## has duplicate keys
  {
    "source": ["aws.s3"],
    "source": ["aws.sns"],
    "detail-type": ["AWS API Call via CloudTrail"],
    "detail":  {
        "eventSource": ["s3.amazonaws.com"],
        "eventSource": ["sns.amazonaws.com"]
    }
  }
  
  ## has unique keys
  {
    "source": ["aws.sns"],
    "detail-type": ["AWS API Call via CloudTrail"],
    "detail": { "eventSource": ["sns.amazonaws.com"] }
  }
  ```

  而 EventBridge 會將下列兩個事件視為相同的事件：

  ```
  ## has duplicate keys
  {
    "source": ["aws.s3"],
    "source": ["aws.sns"],
    "detail-type": ["AWS API Call via CloudTrail"],
    "detail":  [
      {
        "eventSource": ["s3.amazonaws.com"],
        "eventSource": ["sns.amazonaws.com"]
      }
    ]
  }
  
  ## has unique keys
  {
    "source": ["aws.sns"],
    "detail-type": ["AWS API Call via CloudTrail"],
    "detail": [
      { "eventSource": ["sns.amazonaws.com"] }
    ]
  }
  ```
**注意**  
這會描述目前的 EventBridge 行為，而且不應該依賴於該行爲而不進行變更。