

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 事件模式语法
<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 使用精确 character-by-character匹配而不进行大小写折叠或任何其他字符串规范化。
+ 对于数字， 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 行为，不应依赖它来保持不变。