使用 Amazon EventBridge 监控 AMI 事件 - Amazon Elastic Compute Cloud

使用 Amazon EventBridge 监控 AMI 事件

当 Amazon Machine Image(AMI)状态发生变化时,Amazon EC2 将生成发送到 Amazon EventBridge(以前称为 Amazon CloudWatch Events)的事件。您可以使用 Amazon EventBridge 检测并响应这些事件。要做到这一点,您可以在 EventBridge 中创建触发操作以响应事件的规则。例如,您可以创建 EventBridge 规则,以检测 AMI 创建过程何时完成,然后调用 Amazon SNS 主题以向您发送电子邮件通知。

当 AMI 进入以下任何状态时,Amazon EC2 将生成事件:

  • available

  • failed

  • deregistered

当以下 AMI 操作之一运行时,AMI 可以进入 availablefailed 状态:

  • CreateImage

  • CopyImage

  • RegisterImage

  • CreateRestoreImageTask

当以下 AMI 操作运行时,AMI 可以进入 deregistered 状态:

  • DeregisterImage

事件将尽最大努力生成。

AMI 事件

这里有三个 EC2 AMI State Change 事件:

事件以 JSON 格式发送到默认的 EventBridge 事件总线。

事件中的以下字段可用于创建触发操作的规则:

"source": "aws.ec2“

识别来自 Amazon EC2 的事件。

"detail-type": "EC2 AMI State Change"

识别事件名称。

"detail": { "ImageId": "ami-0123456789example", "State": "available", }

提供以下信息:

  • AMI ID – 如果您想要跟踪特定 AMI。

  • AMI 的状态(availablefailedderegistered)。

available

以下是 Amazon EC2 在 AMI 于 CreateImage、CopyImage、RegisterImage 或 CreateRestoreImageTask 操作成功后进入 available 状态时所生成的事件的示例。

"State": "available" 表明操作成功。

{ "version": "0", "id": "example-9f07-51db-246b-d8b8441bcdf0", "detail-type": "EC2 AMI State Change", "source": "aws.ec2", "account": "012345678901", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-east-1", "resources": ["arn:aws:ec2:us-east-1::image/ami-0123456789example"], "detail": { "RequestId": "example-9dcc-40a6-aa77-7ce457d5442b", "ImageId": "ami-0123456789example", "State": "available", "ErrorMessage": "" } }

failed

以下是 Amazon EC2 在 AMI 于 CreateImage、CopyImage、RegisterImage 或 CreateRestoreImageTask 操作失败后进入 failed 状态时所生成的事件的示例。

以下字段提供相关信息:

  • "State": "failed" – 指示操作失败。

  • "ErrorMessage": "" – 提供操作失败的原因。

{ "version": "0", "id": "example-9f07-51db-246b-d8b8441bcdf0", "detail-type": "EC2 AMI State Change", "source": "aws.ec2", "account": "012345678901", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-east-1", "resources": ["arn:aws:ec2:us-east-1::image/ami-0123456789example"], "detail": { "RequestId": "example-9dcc-40a6-aa77-7ce457d5442b", "ImageId": "ami-0123456789example", "State": "failed", "ErrorMessage": "Description of failure" } }

deregistered

以下是 Amazon EC2 在 AMI 于 DeregisterImage 操作成功后进入 deregistered 状态时所生成的事件的示例。如果操作失败,则不会生成任何事件。由于 DeregisterImage 是同步操作,任何故障都能被立即知晓。

"State": "deregistered" 表明 DeregisterImage 操作成功。

{ "version": "0", "id": "example-9f07-51db-246b-d8b8441bcdf0", "detail-type": "EC2 AMI State Change", "source": "aws.ec2", "account": "012345678901", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-east-1", "resources": ["arn:aws:ec2:us-east-1::image/ami-0123456789example"], "detail": { "RequestId": "example-9dcc-40a6-aa77-7ce457d5442b", "ImageId": "ami-0123456789example", "State": "deregistered", "ErrorMessage": "" } }

创建 Amazon EventBridge 规则

您可以创建 Amazon EventBridge 规则,以指定当 EventBridge 收到与规则中的事件模式匹配的事件时要采取的措施。当事件匹配时,EventBridge 会将事件发送到指定的目标并触发规则中定义的操作。

事件模式与它们匹配的事件具有相同的结构。事件模式匹配或不匹配事件。

为 AMI 状态更改事件创建规则时,您可以在事件模式中包含以下字段:

"source": "aws.ec2“

识别来自 Amazon EC2 的事件。

"detail-type": "EC2 AMI State Change"

识别事件名称。

"detail": { "ImageId": "ami-0123456789example", "State": "available", }

提供以下信息:

  • AMI ID – 如果您想要跟踪特定 AMI。

  • AMI 的状态(availablefailedderegistered)。

示例:创建 EventBridge 规则以发送通知

下面的示例可创建 EventBridge 规则,以便在任何 AMI 在 CreateImage 操作成功完成后处于 available 时发送电子邮件、文本消息或移动推送通知。

创建 EventBridge 规则之前,您必须为电子邮件、短信或移动推送通知创建 Amazon SNS 主题。

要创建 EventBridge 规则以在 AMI 创建并处于 available 状态时发送通知

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

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

  3. 对于定义规则详细信息,请执行以下操作:

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

      规则不能与同一区域中的另一个规则和同一事件总线上的名称相同。

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

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

    4. 选择 Next (下一步)

  4. 对于 Build event pattern(构建事件模式),执行以下操作:

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

    2. 对于 Event pattern(事件模式),在此示例中,您将指定以下事件模式以匹配 AMI 进入 available 状态时生成的任何 EC2 AMI State Change 事件:

      { "source": ["aws.ec2"], "detail-type": ["EC2 AMI State Change"], "detail": {"State": ["available"]} }

      要添加事件模式,您可以通过选择 Event pattern form(事件模式表)使用模板,或者通过选择 Custom pattern (JSON editor)(自定义模式(JSON 编辑器))指定您自己的模式,如下所示:

      1. 要使用模板创建事件模式,请执行以下操作:

        1. 选择 Event pattern form(事件模式表)。

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

        3. 对于 AWS 服务,选择 EC2

        4. 对于 Event type(事件类型),选择 EC2 AMI State Change(EC2 AMI 状态更改)。

        5. 要自定义模板,请选择 Edit pattern(编辑模式),然后进行更改以匹配示例事件模式。

      2. 要指定自定义事件模式,请执行以下操作:

        1. 选择 Custom pattern (JSON editor)(自定义模式(JSON 编辑器))。

        2. Event pattern(事件模式)框中,为此示例添加事件模式。

    3. 选择 Next (下一步)

  5. 对于 Select target(s)(选择目标),请执行以下操作:

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

    2. 对于 Select a target(选择目标),选择 SNS topic(SNS 主题)以在事件发生时发送电子邮件、短信或移动推送通知。

    3. 对于 Topic(主题),选择现有主题。您首先需要使用 Amazon SNS 控制台创建 Amazon SNS 主题。有关更多信息,请参阅Amazon Simple Notification Service 开发人员指南中的使用 Amazon SNS 进行应用程序对人 (A2P) 消息传送

    4. (可选)在 Additional settings(其他设置)下,您可以选择配置其他设置。有关更多信息,请参阅《Amazon EventBridge 用户指南》中的创建对事件作出反应的 Amazon EventBridge 规则(步骤 16)。

    5. 选择 Next (下一步)

  6. (可选)对于 Tags(标签),您可以选择向规则分配一个或多个标签,然后选择 Next(下一步)。

  7. 对于 Review and create(查看与创建),执行以下操作:

    1. 查看规则的详细信息并根据需要对其进行修改。

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

有关更多信息,请参阅《Amazon EventBridge 用户指南》中的以下主题:

有关如何创建 Lambda 函数和运行 Lambda 函数的 EventBridge 规则的教程,请参阅《AWS Lambda 开发人员指南》中的教程:使用 EventBridge 记录 Amazon EC2 实例的状态