CloudWatch 事件的事件模式 - Amazon CloudWatch Events
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

CloudWatch 事件的事件模式

注意

Amazon EventBridge 是管理事件的首选方式。CloudWatch Events 和 EventBridge 是相同的底层服务和 API,但 EventBridge 提供了更多功能。您在 CloudWatch 或 EventBridge 中所作的更改将显示在每个控制台中。有关更多信息,请参阅 。Amazon EventBridge

Amazon CloudWatch Events 表示为 JSON 对象。有关 JSON 对象的详细信息,请参阅 RFC 7159。以下是示例事件:

{ "version": "0", "id": "6a7e8feb-b491-4cf7-a9f1-bf3703467718", "detail-type": "EC2 Instance State-change Notification", "source": "aws.ec2", "account": "111122223333", "time": "2017-12-22T18:43:48Z", "region": "us-west-1", "resources": [ "arn:aws:ec2:us-west-1:123456789012:instance/ i-1234567890abcdef0" ], "detail": { "instance-id": " i-1234567890abcdef0", "state": "terminated" } }

请务必记住以下有关事件的详细信息:

  • 所有事件都具有相同的顶级字段 (上述示例中显示的字段),这些字段永远不能缺少。

  • detail 顶级字段的内容因生成事件的服务以及所生成的事件而异。source 字段和 detail-type 字段的组合用于标识在 detail 字段中找到的字段和值。有关由 Amazon 服务生成的事件的示例,请参阅 CloudWatch Events 的事件类型

下面描述了每个事件字段。

version

默认情况下,在所有事件中设置为 0 (零)。

id

为每个事件生成一个唯一值。在事件通过规则移到目标时以及处理事件时,这对于跟踪事件非常有用。

detail-type

source 字段组合起来标识显示在 detail 字段中的字段和值。

通过 CloudTrail 传递的所有事件都具有Amazon API Call via CloudTrail作为detail-type。有关更多信息,请参阅 通过 CloudTrail 传送的事件

source

标识发起事件的服务。来自内部的所有事件Amazon以”Amazon。” 客户生成的事件可具有任意值,前提是它不以”Amazon。” 建议使用 Java 包名样式反向域名字符串。

要查找正确的值,请执行source用于Amazon服务的表Amazon服务命名空间。例如,sourceAmazon CloudFront 的值是aws.cloudfront

账户

标识Amazonaccount.

time

事件时间戳,可由发起事件的服务指定。如果事件跨时间间隔,则服务可能选择报告开始时间,因此该值会明显早于实际接收事件的时间。

region

标识Amazon事件源自的区域。

resources

此 JSON 数组包含用于标识事件中涉及的资源的 ARN。是否包含这些 ARN 由服务决定。例如,Amazon EC2 实例状态更改包含 Amazon EC2 实例 ARN,Auto Scaling 事件包含实例和 Auto Scaling 组的 ARN,而对Amazon CloudTrail不包括资源 ARN。

detail

一个 JSON 对象,其内容由发起事件的服务决定。上述示例中的 detail 内容非常简单,仅为两个字段。AmazonAPI 调用事件的细节对象具有约 50 个字段,可嵌套多个级别。

事件模式

规则使用事件模式来选择事件并将事件路由到目标。模式匹配或不匹配事件。事件模式表示为 JSON 对象,其结构类似于事件的结构,例如:

{ "source": [ "aws.ec2" ], "detail-type": [ "EC2 Instance State-change Notification" ], "detail": { "state": [ "running" ] } }

请务必记住以下有关事件模式匹配的事项:

  • 要使模式匹配事件,事件必须包含模式中列出的所有字段名。字段名必须显示在具有相同嵌套结构的事件中。

  • 模式中未提及的事件的其他字段将被忽略;实际上,有一个 "*":未提及字段的 "*" 通配符。

  • 匹配是精确的 (逐个字符),不进行小写化或任何其他字符串标准化。

  • 匹配的值遵循 JSON 规则:用引号引起来的字符串、数字以及不带引号的关键字truefalse, 和null

  • 数字匹配在字符串表示级别进行。例如,300、300.0 和 3.0e2 不相等。

在编写模式来匹配事件时,可以使用 TestEventPattern API 或 test-event-pattern CLI 命令以确保模式将匹配所需的事件。有关详细信息,请参阅 TestEventPatterntest-event-pattern

以下事件模式将匹配此页面顶部的事件。第一个模式匹配的原因是该模式中指定的实例值之一匹配事件 (且该模式未指定事件中未包含的任何附加字段)。第二个模式匹配的原因是时间中包含“已终止”状态。

{ "resources": [ "arn:aws:ec2:us-east-1:123456789012:instance/i-12345678", "arn:aws:ec2:us-east-1:123456789012:instance/i-abcdefgh" ] }
{ "detail": { "state": [ "terminated" ] } }

这些事件模式不匹配此页面顶部的事件。第一个模式不匹配的原因是该模式为状态指定了“待处理”值,且此值未在事件中显示。第二个模式不匹配的原因是该模式中指定的资源值未在事件中显示。

{ "source": [ "aws.ec2" ], "detail-type": [ "EC2 Instance State-change Notification" ], "detail": { "state": [ "pending" ] } }
{ "source": [ "aws.ec2" ], "detail-type": [ "EC2 Instance State-change Notification" ], "resources": [ "arn:aws:ec2:us-east-1::image/ami-12345678" ] }

在事件模式中匹配 Null 值和空字符串。

您可以创建一种与具有 null 值或空字符串的事件字段匹配的模式。要了解其工作原理,请考虑下面的示例事件:

{ "version": "0", "id": "3e3c153a-8339-4e30-8c35-687ebef853fe", "detail-type": "EC2 Instance Launch Successful", "source": "aws.autoscaling", "account": "123456789012", "time": "2015-11-11T21:31:47Z", "region": "us-east-1", "resources": [ ], "detail": { "eventVersion": "", "responseElements": null } }

要匹配其 eventVersion 值为空字符串的事件,请使用下面的模式,它可匹配该事件示例。

{ "detail": { "eventVersion": [""] } }

要匹配其 responseElements 值为 null 的事件,请使用下面的模式,它可匹配该事件示例。

{ "detail": { "responseElements": [null] } }

在模式匹配中,Null 值和空字符串是不可互换的。编写为检测空字符串的模式不会捕获 null 值。

CloudWatch 事件模式中的数组

模式中每个字段的值均为一个包含一个或多个值的数组,如果数组中的任一值匹配事件中的值,则模式匹配。如果事件中的值为数组,则在模式数组与事件数组的交集不为空时,模式匹配。

例如,某个示例事件模式包含以下文本:

"resources": [ "arn:aws:ec2:us-east-1:123456789012:instance/i-b188560f", "arn:aws:ec2:us-east-1:111122223333:instance/i-b188560f", "arn:aws:ec2:us-east-1:444455556666:instance/i-b188560f", ]

示例模式将与包括以下文本的事件相匹配,因为模式数组中的第一项与事件数组中的第二项匹配。

"resources": [ "arn:aws:autoscaling:us-east-1:123456789012:autoScalingGroup:eb56d16b-bbf0-401d-b893-d5978ed4a025:autoScalingGroupName/ASGTerminate", "arn:aws:ec2:us-east-1:123456789012:instance/i-b188560f" ]