转变 Amazon EventBridge 梁目标输入 - Amazon EventBridge
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

转变 Amazon EventBridge 梁目标输入

您可以从event之前,EventBridge 将事件传递给target一个规则。使用控制台或 API 中的输入变换器,您可以定义使用 JSON 路径引用原始事件源中的值的变量。您可以定义最多 100 个变量,同时从输入中为每个变量分配一个值。然后,您可以在输入模板 中以 <variable-name> 形式使用这些变量。

有关使用输入变换器的教程,请参阅教程:使用输入变换器自定义 EventBridge 传递给事件目标的内容

预定义的变量

您可以在不定义 JSON 路径的情况下使用预定义的变量。这些变量是保留的,您不能使用以下名称创建变量:

  • aws.events.rule-arn— EventBridge 规则的 Amazon 资源名称 (ARN)。

  • aws.events.rule-name— EventBridge rule 的名称。

  • aws.events.event— 原始事件的副本。

  • aws.events.event.ingestion-time— EventBridge 接收事件的时间。此变量由 EventBridge 生成,不能被覆盖。

  • aws.events.event.json— 事件的确切有效载荷(字符串)。

输入转换示例

以下是 Amazon EC2 事件示例。

{ "version": "0", "id": "7bf73129-1428-4cd3-a780-95db273d1602", "detail-type": "EC2 Instance State-change Notification", "source": "aws.ec2", "account": "123456789012", "time": "2015-11-11T21:29:54Z", "region": "us-east-1", "resources": [ "arn:aws:ec2:us-east-1:123456789012:instance/i-abcd1111" ], "detail": { "instance-id": "i-0123456789", "state": "RUNNING" } }

在控制台中定义规则时,选择输入转换器选项配置输入。此选项显示两个文本框:一个用于 Input Path (输入路径) ,一个用于 Input Template (输入模板)

输入路径用于定义变量。使用 JSON 路径引用事件中的项目,并将这些值存储在变量中。例如,您可以通过在第一个文本框中输入以下内容来创建一个输入路径,以引用示例事件中的值。

{ "instance" : "$.detail.instance-id", "state" : "$.detail.state" }

这会定义两个变量,即 <instance><state>。您可以在创建输入模板 时引用这些变量。

输入模板 是您要传递给目标的信息的模板。您可以创建将字符串或 JSON 传递到目标的模板。使用上一个事件和输入路径,以下输入模板 示例将事件转换为示例输出,然后再将其路由到目标。

描述 模板 输出
简单字符串
"instance <instance> is in <state>"
"instance i-0123456789 is in RUNNING"

带转义引号的字符串

"instance \"<instance>\" is in <state>"
"instance \"i-0123456789\" is in RUNNING"

请注意,这是 EventBridge 控制台中的行为。Amazon CLI 对斜杠字符进行转义,结果为 "instance "i-0123456789" is in RUNNING"

简单的 JSON

{ "instance" : <instance>, "state": <state> }
{ "instance" : "i-0123456789", "state": "RUNNING" }

带有字符串和变量的 JSON

{ "instance" : <instance>, "state": "<state>", "instanceStatus": "instance \"<instance>\" is in <state>" }
{ "instance" : "i-0123456789", "state": "RUNNING", "instanceStatus": "instance \"i-0123456789\" is in RUNNING" }

混合变量和静态信息的 JSON

{ "instance" : <instance>, "state": [ 9, <state>, true ], "Transformed" : "Yes" }
{ "instance" : "i-0123456789", "state": [ 9, "RUNNING", true ], "Transformed" : "Yes" }

在 JSON 中包含保留变量

{ "instance" : <instance>, "state": <state>, "ruleArn" : <aws.events.rule-arn>, "ruleName" : <aws.events.rule-name>, "originalEvent" : <aws.events.event> }
{ "instance" : "i-0123456789", "state": "RUNNING", "ruleArn" : "arn:aws:events:us-east-2:123456789012:rule/example", "ruleName" : "example", "originalEvent" : { ... // commented for brevity } }

在字符串中包含保留变量

"<aws.events.rule-name> triggered"
"example triggered"

使用 EventBridge 接 API 转换输入

有关使用 EventBridge API 转换输入的信息,请参阅使用输入转换器从事件中提取数据并将该数据输入到目标

转换输入的常见问题

以下是 EventBridge 中转换输入时的一些常见问题:

  • 对于字符串,需要引号。

  • 为模板创建 JSON 路径时不进行验证。

  • 如果您指定一个变量以匹配在事件中不存在的 JSON 路径,则不会创建该变量,并且将不会在输出中显示该变量。

  • 传递给目标的 JSON 被缩小并转义。

  • EventBridge 不会转义由输入路径,当填充输入模板对于目标。