本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
亚马逊EventBridge输入转换
在将信息EventBridge传递给规则目标之前,您可以自定义事件中的文本。使用控制台或 API 中的输入转换器,定义使用 JSON 路径引用原始事件源中的值的变量。转换后的事件被发送到目标而不是原始事件。但是,动态路径参数必须引用原始事件,而不是转换后的事件。您最多可以定义 100 个变量,为每个变量分配一个输入值。然后,您可以在输入模板 中以 <variable-name
> 形式使用这些变量。
有关使用输入变压器的教程,请参见教程:使用输入转换器自定义 EventBridge 传递给事件目标的内容。
注意
EventBridge不支持所有 JSON 路径语法并在运行时对其进行评估。支持的语法包括:
点表示法(例如,
$.detail
)猛冲
下划线
字母数字字符
数组索引
通配符 (*)
本主题内容:
预定义变量
有一些预定义的变量可以在不定义 JSON 路径的情况下使用。这些变量是保留的,您不能使用以下名称创建变量:
-
aws.events.rule-arn
— EventBridge 规则的亚马逊资源名称 (ARN)。 -
aws.events.rule-name
— EventBridge 规则的名称。 -
aws.events.event.ingestion-time
— 接收事件的时间EventBridge。这是 ISO 8601 的时间戳。此变量由生成EventBridge,无法覆盖。 -
aws.events.event
— 原始事件负载为 JSON(不含detail
字段)。只能用作 JSON 字段的值,因为其内容无法转义。 -
aws.events.event.json
— 完整的原始事件负载为 JSON。 (带字detail
段)。只能用作 JSON 字段的值,因为其内容无法转义。
输入转换示例
以下是亚马逊 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 路径引用事件中的项目,并将这些值存储在变量中。例如,您可以通过在第一个文本框中输入以下内容来创建一个输入路径,以引用示例事件中的值。你也可以使用方括号和索引从数组中获取项目。
注意
EventBridge在运行时替换输入转换器以确保有效的 JSON 输出。因此,在引用 JSON 路径参数的变量周围加上引号,但不要在引用 JSON 对象或数组的变量前后加引号。
{
"timestamp" : "$.time",
"instance" : "$.detail.instance-id",
"state" : "$.detail.state",
"resource" : "$.resources[0]"
}
这定义了四个变量<timestamp>
<instance>
、<state>
、和<resource>
。您可以在创建输入模板 时引用这些变量。
输入模板 是您要传递给目标的信息的模板。您可以创建将字符串或 JSON 传递到目标的模板。使用上一个事件和输入路径,以下输入模板 示例将事件转换为示例输出,然后再将其路由到目标。
描述 | 模板 | Output |
---|---|---|
简单字符串 |
|
|
带转义引号的字符串 |
|
请注意,这是 EventBridge 控制台中的行为。Amazon CLI 对斜杠字符进行转义,结果为 |
简单的 JSON |
|
|
带有字符串和变量的 JSON |
|
|
混合变量和静态信息的 JSON |
|
|
在 JSON 中包含保留变量 |
|
|
在字符串中包含保留变量 |
|
|
亚马逊CloudWatch日志组 |
|
|
使用 EventBridge API 转换输入
有关使用 EventBridge API 转换输入的信息,请参阅使用输入转换器从事件中提取数据并将该数据输入到目标。
使用转换输入 Amazon CloudFormation
有关使用Amazon CloudFormation转换输入的信息,请参见AWS::Events::RuleInputTransformer。
转换输入的常见问题
以下是转换输入时的一些常见问题EventBridge:
-
对于字符串,需要引号。
-
为模板创建 JSON 路径时不进行验证。
-
如果您指定一个变量来匹配事件中不存在的 JSON 路径,则该变量不会被创建,也不会出现在输出中。
-
像这样的 JSON 属性
aws.events.event.json
只能用作 JSON 字段的值,不能在其他字符串中内联使用。 -
EventBridge填充目标的输入模板时,不会转义由输入路径提取的值。
-
如果 JSON 路径引用 JSON 对象或数组,但该变量是在字符串中引用的,则EventBridge删除所有内部引号以确保字符串有效。例如,对于
<detail>
指向的变量$.detail
,“细节为<detail>” 将导致从对象中EventBridge删除引号。因此,如果您想基于单个 JSON 路径变量输出 JSON 对象,则必须将其作为密钥。在这个例子中,
{"detail": <detail>}
.