将 Elastic Beanstalk 与 Amazon EventBridge 结合使用 - AWS Elastic Beanstalk
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

将 Elastic Beanstalk 与 Amazon EventBridge 结合使用

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

您可以在 Amazon EventBridge 中创建规则,以处理以下任何 Elastic Beanstalk 事件:

  • 环境操作的状态更改(包括创建、更新和终止操作)。 该事件指定状态更改是已启动、成功还是失败。

  • 其他资源的状态更改。除了环境之外,系统监控的其他资源包括负载均衡器、Auto Scaling 组和实例。

  • 环境的运行状况转变。 该事件表明环境运行状况从一种运行状况过渡到另一种状况。

  • 托管更新的状态更改。 该事件指定状态更改是已启动、成功还是失败。

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

有关 Elastic Beanstalk 事件中包含的字段列表及其可能的字符串值,请参阅Elastic Beanstalk 事件字段映射。有关 EventBridge 规则如何处理事件模式的信息,请参阅 EventBridge 中的事件和事件模式

使用 EventBridge 监控 Elastic Beanstalk 资源

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

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

如果您希望键入或复制事件模式并将其粘贴到 EventBridge 控制台中,则可以选择在控制台中使用 Custom pattern(自定义模式)选项。通过这样做,您无需完成前面描述的选择字段和值的步骤。本主题提供了可以使用的事件匹配模式Elastic Beanstalk 事件的示例。

要为资源事件创建规则

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

  2. 打开位于 https://console.aws.amazon.com/events/ 的 Amazon EventBridge 控制台。

  3. 选择 Create rule (创建规则)

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

  5. Define pattern (定义模式) 下,选择 Event pattern (事件模式)

  6. Event matching pattern(事件匹配模式)下,选择 Pre-defined pattern by service(按服务预定义模式)。

    注意

    如果您已经有事件模式的文本,并且不需要 EventBridge 控制台为您构建它,则可以选择 Customer pattern(客户模式)。然后,您可以手动输入或将文本复制粘贴到 Event Pattern(事件模式)框中。选择 Save(保存),然后跳至步骤 12。

  7. 对于 Service provider(服务提供商),选择 AWS。

  8. 对于 Service name(服务名称),请选择 Elastic Beanstalk

  9. 对于 Event type(事件类型),请选择 Status Change(状态更改)。

  10. 本步骤介绍了如何使用 Elastic Beanstalk 的 detail type(详细信息类型)、status(状态)和 severity(严重性)事件字段。当您选择这些字段和要匹配的值时,控制台将构建并显示事件模式。您的选择还会根据字段的层次结构及其值的分组来决定控制台显示后续事件字段的方式。有关更多信息,请参阅Elastic Beanstalk 事件字段映射表。

    • 如果您只为给定字段选择一个特定值,层次结构中的下一个字段将显示在控制台中。您可以在显示的字段中选择一个或多个值。例如,如果选择 Specific detail type(s)(特定详细信息类型)单选按钮,则会显示 detail types(详细信息类型)下拉列表。如果您只从此列表中选择一个值,则控制台中将显示用于使用下一个字段的选项。在此示例中,它是随后的 status(状态)字段。对于此字段,您可以选择 Any status(任何状态)或 Specific status(es)(特定状态)。

    • 如果为给定字段选择了多个值,或者为该字段选择了 Any(任意)单选按钮(例如 Any status(任何状态)),控制台不会为您提供后续字段d 选项。更具体地说,它不会为您提供为层次结构中的后续字段选择特定值的选项。在此示例中, severity(严重性)字段跟在层次结构中的 status(状态)后面。如果之前选择了多个状态,则默认为 Any severity(任意严重性)。如果您选择 Specific severity(s)(特定严重性),则值列表中会列出 No items(无项目)。控制台的设计方式是为了防止事件模式中各字段之间的不明确匹配逻辑。

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

  11. 对于 Environment(环境),选择 Any environment(任意环境)或 Specific environment(s)(特定环境)。

    • 如果您选择 Specific environment(s)(特定环境),则可以从下拉列表中选择一个或多个环境。EventBridge 会将您在EnvironmentName[ ] 列表中选择的所有环境添加到事件模式的 detail(详细信息)部分。然后,您的规则将筛选所有事件,以仅包括您选择的特定环境。

    • 如果您选择 Any environment(任意环境),则不会向事件模式中添加任何环境。因此,您的规则不会根据环境筛选任何 Elastic Beanstalk 事件。

  12. Select event bus(选择事件总线)部分默认设置为 AWS default event bus(AWS 默认事件总线)。保持默认设置的选中状态,然后确认Enable the rule on the selected event bus(在选定的事件总线上启用该规则)已开启。

  13. Select targets (选择目标) 下,选择从 Elastic Beanstalk 收到资源状态更改事件时要执行的目标操作。

    例如,您可以使用 Amazon Simple Notification Service (SNS) 主题在事件发生时发送电子邮件或短信。为此,您需要使用 Amazon SNS 控制台创建 Amazon SNS 主题。要了解更多信息,请参阅使用 Amazon SNS 发送用户通知

    重要

    一些目标操作可能需要使用其他服务并会产生额外费用,例如 Amazon SNS 或 Lambda 服务。有关 AWS 定价的更多信息,请参阅 http://www.amazonaws.cn/pricing/。某些服务是 AWS 免费使用套餐的一部分。如果您是新客户,则可免费试用这些服务。有关更多信息,请参阅 http://www.amazonaws.cn/free/

  14. (可选)选择 Add target(添加目标)来为事件规则指定其他目标操作。

  15. 选择创建

Elastic Beanstalk 事件模式示例

事件模式与它们匹配的事件具有相同的结构。模式引用了您要匹配的字段,并提供您所查找的值。

  • 所有环境的运行状况更改

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

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

    { "source": [ "aws.elasticbeanstalk" ], "detail-type": [ "Elastic Beanstalk resource status change" ] }
  • 以下环境的 Status 环境更新失败Severity 错误Elastic Beanstalk 资源状态更改myEnvironment1myEnvironment2

    {"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 事件示例

以下是资源状态更改 的 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 事件字段映射

下表将 Elastic Beanstalk 事件字段及其可能的字符串值映射到 EventBridge detail-type 字段。有关 EventBridge 如何处理服务的事件模式的更多信息,请参阅 EventBridge 中的事件和事件模式

EventBridge 字段 detail-type Elastic Beanstalk 字段 Status Elastic Beanstalk 字段 Severity Elastic Beanstalk 字段 Message

Elastic Beanstalk 资源状态更改

环境创建已启动

INFO

createEnvironment 正在启动。

环境创建成功

INFO

createEnvironment 已成功完成。

环境创建成功

INFO

启动的环境:<Environment Name>。但是,启动过程中存在问题。有关详细信息,请参阅事件日志。

环境创建失败

ERROR (错误)

无法启动环境。

环境更新已启动

INFO

环境更新正在启动。

环境更新成功

INFO

环境更新已成功完成。

环境更新失败

ERROR (错误)

无法部署配置。

环境终止已开始

INFO

terminateEnvironment 正在启动。

环境终止成功

INFO

terminateEnvironment 已成功完成。

环境终止失败

INFO

由于至少有一个环境终止工作流失败,环境终止步骤失败。

其他资源状态更改

Auto Scaling 组已创建

INFO

createEnvironment 正在启动。

Auto Scaling 组已删除

INFO

createEnvironment 正在启动。

实例已添加

INFO

已将实例 [i-123456789a12b1234] 添加到环境。

实例已删除

INFO

已从环境中删除实例 [i-123456789a12b1234]。

负载均衡器已创建

INFO

已创建负载均衡器名称:<LB Name>

负载均衡器已删除

INFO

删除以下名称的负载均衡器:<LB Name>

运行状况更改

环境运行状况已更改

信息/警告

环境运行状况已转为 <healthStatus>。

环境运行状况已更改

信息/警告

环境运行状况已从 <healthStatus> 转为 <healthStatus>。

托管更新状态更改

托管更新已启动

INFO

托管平台更新正在进行中。

托管更新失败

INFO

托管更新失败,在 %s 分钟后重试。