You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS EventBridge Input Transformer如何生成合法JSON数组?

解决EventBus InputTransformer生成数组格式JSON的引号缺失问题

问题核心

需要将EventBus事件中detail字段的完整JSON结构,直接放入带有customField属性的数组对象中,但使用带方括号的InputTemplate时,生成的JSON因缺失引号格式无效进入死信队列;去掉方括号则格式正常但不符合数组需求,且逐个映射字段的方案不适用于多字段场景,EventBridge Pipes也存在相同问题。

正确的InputTransformer配置方案

要实现需求且保证JSON格式有效,需正确配置InputPathsMap和InputTemplate:

  1. 配置InputPathsMap
    提取事件中的detail字段作为模板变量:

    {"detail": "$.detail"}
    
  2. 配置InputTemplate
    用变量直接构造数组结构,模板本身需是有效的JSON框架:

    {"customField": [ <detail> ]}
    

关键注意事项

  • 模板中的<detail>是变量占位符,会被替换为detail字段的完整JSON对象,最终生成的结构为:
    {
      "customField": [
        {
          // 这里是detail的原始JSON结构
        }
      ]
    }
    
  • 通过CLI/CloudFormation配置时,需注意字符串转义:
    • CloudFormation中用单引号包裹模板避免转义:
      InputTransformer:
        InputPathsMap:
          detail: "$.detail"
        InputTemplate: '{"customField": [ <detail> ]}'
      
    • CLI中需转义双引号:
      --input-transformer '{"InputPathsMap": {"detail": "$.detail"}, "InputTemplate": "{\"customField\": [ <detail> ]}"}'
      

之前配置出错的原因

你遇到的引号缺失问题,大概率是模板配置时的语法错误导致:

  • 若模板写成{"customField": [<detail>]}(无空格),虽不影响JSON语法,但部分环境可能解析异常;
  • 若错误地将变量放在引号中(如{"customField": ["<detail>"]}),会把detail的JSON转为字符串,导致结构不符合需求;
  • 控制台配置时未正确输入模板字符串,导致EventBridge解析时破坏了JSON结构。

替代方案(原生InputTransformer受限时)

如果上述配置仍无法解决问题(如复杂嵌套场景),可以用Lambda作为中间处理层:

  1. 将EventBus规则的目标设为Lambda函数;
  2. Lambda接收事件后,直接构造所需结构返回:
    def lambda_handler(event, context):
        return {
            "customField": [event["detail"]]
        }
    

这种方式无需逐个映射字段,完全保留detail的原始结构,适配所有复杂场景。

内容的提问来源于stack exchange,提问作者Dmytro Pavlov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 05:08:26