

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

# 在亚马逊上使用 Elastic Beanstalk EventBridge
<a name="AWSHowTo.eventbridge"></a>

使用亚马逊 EventBridge，您可以设置事件驱动型规则，用于监控您的 Elastic Beanstalk 资源并启动使用其他服务的目标操作。 AWS 例如，每当生产环境的运行状况变为 *Warning*（警告）状态时，您可以通过向 Amazon SNS 主题发出信号来设置发送电子邮件通知的规则。或者，您可以将 Lambda 函数设置为每当环境的运行状况变为 *Degraded*（降级）或 *Severe*（严重）状态时，将通知传递给 Slack。

您可以在亚马逊中创建规则， EventBridge 以便对以下任何 Elastic Beanstalk 事件采取行动：
+ *环境操作的状态更改（包括创建、更新和终止操作）。*该事件指定状态更改是已启动、成功还是失败。
+ *其他资源的状态更改。*除了环境之外，系统监控的其他资源包括负载均衡器、Auto Scaling 组和实例。
+ *环境的运行状况转变。*该事件表明环境运行状况从一种运行状况过渡到另一种状况。
+ *托管更新的状态更改。*该事件指定状态更改是已启动、成功还是失败。

要捕获您感兴趣的特定 Elastic Beanstalk 事件，请定义可用于检测事件的特定事件 EventBridge 模式。事件模式与它们匹配的事件具有相同的结构。模式引用了您要匹配的字段，并提供您所查找的值。尽最大努力发出事件。在正常操作情况下，它们从 Elastic EventBridge Beanstalk 以近乎实时的方式交付。但是，可能会出现延迟或阻止事件交付的情况。

有关 Elastic Beanstalk 事件中包含的字段列表及其可能的字符串值，请参阅[Elastic Beanstalk 事件字段映射](#eb-eventbridge-mapping)。有关 EventBridge 规则如何处理事件模式的信息，请参阅[中的事件和事件模式 EventBridge](https://docs.aws.amazon.com//eventbridge/latest/userguide/eventbridge-and-event-patterns.html)。

## 使用监控 Elastic Beanstalk 资源 EventBridge
<a name="eb-eventbridge-tasks"></a>

借助 EventBridge，您可以创建规则，定义在 Elastic Beanstalk 为其资源发出事件时要采取的操作。例如，您可以创建一个规则，只要环境状态发生变化就向您发送电子邮件。

该 EventBridge 控制台有一个**预定义的模式**选项，用于构建 Elastic Beanstalk 事件模式。如果您在创建规则时在 EventBridge控制台中选择此选项，则可以快速构建 Elastic Beanstalk 事件模式。您只需选择事件字段和值即可。在您进行选择时，控制台将构建并显示事件模式。或者，您可以手动编辑构建的事件模式，并将其另存为自定义模式。控制台还为您提供显示详细的 **Sample Event**（示例事件）选项，您可以将其复制并粘贴到您正在构建的事件模式中。

如果您更喜欢在 EventBridge 控制台中键入或复制并粘贴事件模式，则可以选择使用控制台中的**自定义模式**选项。通过这样做，您无需完成前面描述的选择字段和值的步骤。本主题提供了可以使用的[事件匹配模式](#eb-eventbridge-patterns)和 [Elastic Beanstalk 事件](#eb-eventbridge-examples)的示例。

**要为资源事件创建规则**

1. 使用具有 AWS 使用权限的账户 EventBridge 和 Elastic Beanstalk 登录。

1. 打开 Amazon EventBridge 控制台，网址为[https://console.aws.amazon.com/events/](https://console.aws.amazon.com/events/)。

1. 在导航窗格中，选择**规则**。

1. 选择**创建规则**。

1. 输入规则的 **Name (名称)** 和“Description (描述)”（可选）。

1. 对于**事件总线**，选择**默认**。当你账户中的某项 AWS 服务发出事件时，它总是会进入你账户的默认事件总线。

1. 对于**规则类型**，选择**具有事件模式的规则**。

1. 选择**下一步**。

1. 对于**事件来源**，选择**AWS 事件或 EventBridge 合作伙伴事件**。

1. （可选）对于**示例事件**，选择 **AWS 事件**。在搜索字段中输入 *Elastic Beanstalk*。这将提供一个示例 Elastic Beanstalk 事件列表，您可以从中选择显示的事件。此步骤仅显示您可以参考的示例事件。它不影响规则创建的结果。本主题后面的 [Elastic Beanstalk 事件示例](#eb-eventbridge-examples) 部分提供了相同类型事件的示例。

1. 在 **Event pattern**（事件模式）部分，选择 **Event pattern form**（事件模式表单）。
**注意**  
如果您已有事件模式的文本，并且不需要 EventBridge 控制台为您构建，请选择**自定义模式（JSON 编辑器）**。然后，您可以手动输入或将文本复制粘贴到 **Event pattern**（事件模式）框中。选择 **Next**（下一步），然后转到关于进入目标的步骤。

1. 对于**事件源**，选择**AWS 服务**。

1. 对于 **AWS 服务**，选择 **Elastic Beanstalk**。

1. 对于 **Event type**（事件类型），选择 **Status Change**（状态更改）。

1. 本步骤介绍了如何使用 Elastic Beanstalk 的 **detail type**（详细信息类型）、**status**（状态）和 **severity**（严重性）事件字段。当您选择这些字段和要匹配的值时，控制台将构建并显示事件模式。
   + 如果您为**特定详细信息类型**选择*仅一个*值，则可以为层次结构中的下一个字段选择一个或多个值。
   + 如果您为**特定详细信息类型**选择*多个*值，则可以为层次结构中的下一个字段选择特定值。这样可防止事件模式中各字段之间的不明确匹配逻辑。

   **environment**（环境）事件字段不受此层次结构的影响，因此它将按下一步中的说明显示。

1. 对于环境，选择 **Any environment**（任意环境）或 **Specific environment(s)**（特定环境）。
   + 如果选择 “**特定环境**”，则可以从下拉列表中选择一个或多个环境。 EventBridge 将你在 *EnvironmentName[]* 列表中选择的所有环境添加到事件模式的*详细信息*部分。然后，您的规则将筛选所有事件，以仅包括您选择的特定环境。
   + 如果您选择 **Any environment**（任意环境），则不会向事件模式中添加任何环境。因此，您的规则不会根据环境筛选任何 Elastic Beanstalk 事件。

1. 选择**下一步**。

1. 对于**目标类型**，选择**AWS 服务**。

1. 对于 **Select a target**（选择目标），选择从 Elastic Beanstalk 收到资源状态更改事件时要执行的目标操作。

   例如，您可以使用 Amazon Simple Notification Service (SNS) 主题在事件发生时发送电子邮件或短信。为此，您需要使用 Amazon SNS 控制台创建 Amazon SNS 主题。要了解更多信息，请参阅[使用 Amazon SNS 发送用户通知](https://docs.aws.amazon.com//sns/latest/dg/sns-user-notifications.html)。
**重要**  
一些目标操作可能需要使用其他服务并会产生额外费用，例如 Amazon SNS 或 Lambda 服务。有关 AWS 定价的更多信息，请参阅[https://aws.amazon.com/pricing/](https://aws.amazon.com/pricing/)。有些服务属于 AWS 免费使用套餐的一部分。如果您是新客户，则可免费试用这些服务。请参阅[https://aws.amazon.com/free/](https://aws.amazon.com/free/)了解更多信息。

1. （可选）选择 **Add another target**（添加另一个目标）来为事件规则指定其他目标操作。

1. 选择**下一步**。

1. （可选）为规则输入一个或多个标签。有关更多信息，请参阅《[亚马逊* EventBridge 用户指南》中的亚马逊 EventBridge *标签](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-tagging.html)。

1. 选择**下一步**。

1. 查看规则详细信息并选择**创建规则**。

## Elastic Beanstalk 事件模式示例
<a name="eb-eventbridge-patterns"></a>

事件模式与它们匹配的事件具有相同的结构。模式引用了您要匹配的字段，并提供您所查找的值。
+ 所有环境的*运行状况更改*

  ```
  {
     "source": [
      "aws.elasticbeanstalk"
    ],
    "detail-type": [
      "Health status change"
      ]
  }
  ```
+ 以下环境的*运行状况更改*：`myEnvironment1` 和 `myEnvironment2`。此事件模式可针对这两个特定环境进行筛选，而之前未筛选的*运行状态更改*示例会为所有环境发送事件。

  ```
  {"source": [
      "aws.elasticbeanstalk"
      ],
      "detail-type": [
          "Health status change"
      ],
      "detail": {
          "EnvironmentName": [
              "myEnvironment1",
              "myEnvironment2"
          ]
      }
  }
  ```
+ 针对所有环境的*Elastic Beanstalk 资源状态更改*

  ```
  {
    "source": [
      "aws.elasticbeanstalk"
    ],
    "detail-type": [
      "Elastic Beanstalk resource status change"
      ]
  }
  ```
+ 对于以下环境，*Elastic Beanstalk 资源状态更改*为 `Status` * Environment update failed*（环境更新失败）和 `Severity` *ERROR*（错误）：`myEnvironment1` 和 `myEnvironment2`

  ```
  {"source": [
      "aws.elasticbeanstalk"
      ],
      "detail-type": [
          "Elastic Beanstalk resource status change"
      ],
      "detail": {
          "Status": [
              "Environment update failed"
              ],
          "Severity": [
              "ERROR"
              ],
          "EnvironmentName": [
              "myEnvironment1",
              "myEnvironment2"
          ]
      }
  }
  ```
+ 负载均衡器、Auto Scaling 组和实例的*其他资源状态更改*

  ```
  {
     "source": [
      "aws.elasticbeanstalk"
    ],
    "detail-type": [
      "Other resource status change"
      ]
  }
  ```
+ 所有环境的*托管更新状态更改*

  ```
  {
     "source": [
      "aws.elasticbeanstalk"
    ],
    "detail-type": [
      "Managed update status change"
      ]
  }
  ```
+ 捕获 Elastic Beanstalk 的*所有事件* （不包括 `detail-type` 部分）

  ```
  {
    "source": [
      "aws.elasticbeanstalk"
    ]
  }
  ```

## Elastic Beanstalk 事件示例
<a name="eb-eventbridge-examples"></a>

以下是*资源状态更改* 的 Elastic Beanstalk 事件示例：

```
{ 
   "version":"0",
   "id":"1234a678-1b23-c123-12fd3f456e78",
   "detail-type":"Elastic Beanstalk resource status change",
   "source":"aws.elasticbeanstalk",
   "account":"111122223333",
   "time":"2020-11-03T00:31:54Z",
   "region":"us-east-1",
   "resources":[
      "arn:was:elasticbeanstalk:us-east-1:111122223333:environment/myApplication/myEnvironment"
   ],
   "detail":{
      "Status":"Environment creation started",
      "EventDate":1604363513951,
      "ApplicationName":"myApplication",
      "Message":"createEnvironment is starting.",
      "EnvironmentName":"myEnvironment",
      "Severity":"INFO"
   }
}
```

以下是*运行状况更改* 的 Elastic Beanstalk 事件示例：

```
{ 
   "version":"0",
   "id":"1234a678-1b23-c123-12fd3f456e78",
   "detail-type":"Health status change",
   "source":"aws.elasticbeanstalk",
   "account":"111122223333",
   "time":"2020-11-03T00:34:48Z",
   "region":"us-east-1",
   "resources":[
      "arn:was:elasticbeanstalk:us-east-1:111122223333:environment/myApplication/myEnvironment"
   ],
   "detail":{
      "Status":"Environment health changed",
      "EventDate":1604363687870,
      "ApplicationName":"myApplication",
      "Message":"Environment health has transitioned from Pending to Ok. Initialization completed 1 second ago and took 2 minutes.",
      "EnvironmentName":"myEnvironment",
      "Severity":"INFO"
   }
}
```

## Elastic Beanstalk 事件字段映射
<a name="eb-eventbridge-mapping"></a>

下表将 Elastic Beanstalk 事件字段及其可能的字符串值映射到该字段。 EventBridge `detail-type`有关 EventBridge 如何使用服务的事件模式的更多信息，请参阅[中的事件和事件模式 EventBridge](https://docs.aws.amazon.com//eventbridge/latest/userguide/eventbridge-and-event-patterns.html)。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/AWSHowTo.eventbridge.html)