使用 Amazon EventBridge 监控 AMI 事件
当亚马逊机器映像(AMI)状态发生变化时,Amazon EC2 将生成发送到 Amazon EventBridge(以前称为 Amazon CloudWatch Events)的事件。您可以使用 Amazon EventBridge 检测并响应这些事件。要做到这一点,您可以在 EventBridge 中创建触发操作以响应事件的规则。例如,您可以创建 EventBridge 规则,以检测 AMI 创建过程何时完成,然后调用 Amazon SNS 主题以向您发送电子邮件通知。
当 AMI 进入以下任何状态时,Amazon EC2 将生成事件:
-
available
-
failed
-
deregistered
-
disabled
下表列出了 AMI 操作和 AMI 可能存在的状态。在表中,是表示相应操作运行时 AMI 可能存在的状态。
AMI 操作 | available | failed | deregistered | disabled |
---|---|---|---|---|
CopyImage |
是 |
是 |
||
CreateImage |
是 |
是 |
||
CreateRestoreImageTask |
是 |
是 |
||
DeregisterImage |
是 |
|||
DisableImage |
是 |
|||
EnableImage |
是 |
|||
RegisterImage |
是 |
是 |
事件将尽最大努力生成。
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 的状态(
available
、failed
、deregistered
或disabled
)。
-
available
以下是 Amazon EC2 在 AMI 于 CreateImage
、CopyImage
、RegisterImage
、CreateRestoreImageTask
或 EnableImage
操作成功后进入 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": "" } }
disabled
以下是 Amazon EC2 在 AMI 于 DisableImage
操作成功后进入 disabled
状态时所生成的事件的示例。如果操作失败,则不会生成任何事件。由于 DisableImage
是同步操作,任何故障都能被立即知晓。
"State": "disabled"
表明 DisableImage
操作成功。
{ "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": "disabled", "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 的状态(
available
、failed
、deregistered
或disabled
)。
-
示例:创建 EventBridge 规则以发送通知
下面的示例可创建 EventBridge 规则,以便在任何 AMI 在CreateImage
操作成功完成后处于 available
时发送电子邮件、文本消息或移动推送通知。
创建 EventBridge 规则之前,您必须为电子邮件、短信或移动推送通知创建 Amazon SNS 主题。
要创建 EventBridge 规则以在 AMI 创建并处于 available
状态时发送通知
-
打开位于 https://console.aws.amazon.com/events/
的 Amazon EventBridge 控制台。 -
选择 Create rule (创建规则)。
-
对于定义规则详细信息,请执行以下操作:
-
输入规则的 Name (名称) 和“Description (描述)”(可选)。
规则不能与同一区域中的另一个规则和同一事件总线上的名称相同。
-
对于 Event bus(事件总线),选择 default(默认)。当您账户中的某个 AWS 服务生成一个事件时,它始终会发送到您账户的默认事件总线。
-
对于 Rule type(规则类型),选择 Rule with an event pattern(具有事件模式的规则)。
-
选择下一步。
-
-
对于 Build event pattern(构建事件模式),执行以下操作:
-
对于 Event source(事件源),选择 AWS 事件或 EventBridge 合作伙伴事件。
-
对于 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 编辑器))指定您自己的模式,如下所示:
-
要使用模板创建事件模式,请执行以下操作:
-
选择 Event pattern form(事件模式表)。
-
对于 Event source(事件源),选择 AWS services(服务)。
-
对于 AWS 服务,选择 EC2。
-
对于 Event type(事件类型),选择 EC2 AMI State Change(EC2 AMI 状态更改)。
-
要自定义模板,请选择 Edit pattern(编辑模式),然后进行更改以匹配示例事件模式。
-
-
要指定自定义事件模式,请执行以下操作:
-
选择 Custom pattern (JSON editor)(自定义模式(JSON 编辑器))。
-
在 Event pattern(事件模式)框中,为此示例添加事件模式。
-
-
-
选择下一步。
-
-
对于 Select target(s)(选择目标),请执行以下操作:
-
对于 Target types(目标类型),选择 AWS service(服务)。
-
对于 Select a target(选择目标),选择 SNS topic(SNS 主题)以在事件发生时发送电子邮件、短信或移动推送通知。
-
对于 Topic(主题),选择现有主题。您首先需要使用 Amazon SNS 控制台创建 Amazon SNS 主题。有关更多信息,请参阅Amazon Simple Notification Service 开发人员指南中的使用 Amazon SNS 进行应用程序对人 (A2P) 消息传送。
-
(可选)在 Additional settings(其他设置)下,您可以选择配置其他设置。有关更多信息,请参阅《Amazon EventBridge 用户指南》中的创建对事件作出反应的 Amazon EventBridge 规则(步骤 16)。
-
选择下一步。
-
-
(可选)对于 Tags(标签),您可以选择向规则分配一个或多个标签,然后选择 Next(下一步)。
-
对于 Review and create(查看与创建),执行以下操作:
-
查看规则的详细信息并根据需要对其进行修改。
-
选择创建规则。
-
有关更多信息,请参阅《Amazon EventBridge 用户指南》中的以下主题:
有关如何创建 Lambda 函数和运行 Lambda 函数的 EventBridge 规则的教程,请参阅《AWS Lambda 开发人员指南》中的教程:使用 EventBridge 记录 Amazon EC2 实例的状态。