将 Elastic Beanstalk 与 Amazon EventBridge 结合使用 - AWS Elastic Beanstalk

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

将 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 事件模式。您只需选择事件字段和值即可。在您进行选择时,控制台将构建并显示事件模式。或者,您可以手动编辑构建的事件模式,并将其另存为自定义模式。控制台还为您提供显示详细的 Sample Event(示例事件)选项,您可以将其复制并粘贴到您正在构建的事件模式中。

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

要为资源事件创建规则
  1. 通过具有 EventBridge 和 Elastic Beanstalk 使用权限的账户登录AWS。

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

  3. 在导航窗格中,选择 Rules (规则)

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

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

  6. 对于 Event bus(事件总线),选择 default(默认)。当您账户中的某个 AWS 服务发出一个事件时,它始终会发送到您账户的默认事件总线。

  7. 对于 Rule type(规则类型),选择 Rule with an event pattern(具有事件模式的规则)。

  8. 选择 Next (下一步)

  9. 对于 Event source(事件源),选择 AWS 事件或 EventBridge 合作伙伴事件

  10. (可选)对于 Sample event(示例事件),选择 AWS events(AWS 事件)。在搜索字段中输入 Elastic Beanstalk。这将提供一个示例 Elastic Beanstalk 事件列表,您可以从中选择显示的事件。此步骤仅显示您可以参考的示例事件。它不影响规则创建的结果。本主题后面的 Elastic Beanstalk 事件示例 部分提供了相同类型事件的示例。

  11. Event pattern(事件模式)部分,选择 Event pattern form(事件模式表单)。

    注意

    如果您已经有事件模式的文本,并且不需要 EventBridge 控制台为您构建它,请选择 Custom pattern (JSON editor)(自定义模式(JSON 编辑器))。然后,您可以手动输入或将文本复制粘贴到 Event pattern(事件模式)框中。选择 Next(下一步),然后转到关于进入目标的步骤。

  12. 对于 Event source(事件源),选择 AWS services(AWS 服务)。

  13. 对于 AWS service(AWS 服务),选择 Elastic Beanstalk

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

  15. 本步骤介绍了如何使用 Elastic Beanstalk 的 detail type(详细信息类型)、status(状态)和 severity(严重性)事件字段。当您选择这些字段和要匹配的值时,控制台将构建并显示事件模式。

    • 如果您为 Specific detail type(s)(特定详细信息类型)仅选择一个值,则可以为层次结构中的下一个字段选择一个或多个值。

    • 如果您为 Specific detail type(s)(特定详细信息类型)选择多个值,则可以为层次结构中的下一个字段选择特定值。这样可防止事件模式中各字段之间的不明确匹配逻辑。

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

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

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

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

  17. 选择 Next (下一步)

  18. 对于 Target types(目标类型),选择 AWS service(AWS 服务)。

  19. 对于 Select a target(选择目标),选择从 Elastic Beanstalk 收到资源状态更改事件时要执行的目标操作。

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

    重要

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

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

  21. 选择 Next (下一步)

  22. (可选)为规则输入一个或多个标签。有关更多信息,请参阅 Amazon EventBridge 用户指南中的 Amazon EventBridge 标签

  23. 选择 Next (下一步)

  24. 查看规则详细信息并选择 Create rule(创建规则)。

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" ] }
  • 对于以下环境,Elastic Beanstalk 资源状态更改Status Environment update failed(环境更新失败)和 Severity ERROR(错误):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 分钟后重试。