AWS EventBridge EventBus 输入转换器如何将输入转换为数组?

问题描述 投票:0回答:1

我有EventBus,它有一个有特定目标的规则。目标内部有一个带有InputPath 和InputTemplate 的InputTransformer。我想要将其转换为数组。

我使用 detail 字段将自定义事件发送到 EventBus,其中我需要 JSON

{
  "version": "0",
  "id": "9fd93571-3201-4e0d-6cf0-328ff344c9e3",
  "detail-type": "test",
  "source": "foobar",
  "account": "192675374686",
  "time": "2023-10-10T11:22:01Z",
  "region": "us-east-1",
  "resources": [],
  "detail": {
    "address": {
      "field": "888",
      "innerField": {
        "someInnerField": "999"
      }
    }
  }
}

我的预期输出是数组,当我尝试使用 InputPathInputTemplate 添加方括号时,它会在不带双引号的情况下发送它,但它会进行一些转换。

输入路径

{
  "detail": "$.detail"
}

输入模板

[{
  "customField": <detail>
}]

实际输出(从配置了目标的死信队列中获取的消息,由于无效的 json,它被发送到那里,这是真的)

[{
   "customField": {address:{field:888,innerField:{someInnerField:999}}}
}]

预期产出

[{
  "customField": {
    "address": {
      "field": "888",
      "innerField": {
        "someInnerField": "999"
      }
    }
  }
}]

我不想做任何映射,只是想将 **detail ** 字段的整个 JSON 放入一个数组中,其中包含一个具有属性“customField”的对象:并将 JSON 字符串作为值。

[{“customField”:详细信息>}]

已经尝试过的:

它可以按预期使用不带方括号的简单模板,但我需要一个数组:

{
  "customField": <detail>
}

输出

{
  "customField": {
    "address": {
      "field": "888",
      "innerField": {
        "someInnerField": "999"
      }
    }
  }
}

什么完全可以工作,但它不适用于具有很多字段的 JSON

当然,我们可以映射InputPath中的每个字段,然后通过变量将其放入模板中。已经检查过,有效。

路径

{
  "field": "$.detail.address.field",
  "someInnerField": "$.detail.address.innerField.someInnerField"
}

模板

[{
   "customField": {
     "address": {
       "field": "<field>"
       "innerField": {
         "someInnerField": "<someInnerField>"
       }
     }
   }
}]

UPD EventBridge 管道

我们有一个类似的带有EventBridge管道的InputTransformer,似乎它应该按照我想要的方式工作(参见输出),但最终,它没有,我收到不带双引号的字符串

amazon-web-services aws-event-bridge event-bus
1个回答
0
投票

不幸的是,没有办法实现你所要求的。 EventBridge 输入转换器尝试稍微聪明地为您提供帮助并确保您有有效的输出,但在这种情况下,它有害无益。

逻辑本质上是:“您是否正在尝试创建 JSON 输出?如果是,请尝试创建有效的 JSON。如果不是,请尝试创建有效的string。这意味着删除引号,这样您就不必逃离他们。”

不幸的是,今天的决定仅基于输入变压器是否以

{
开头。以
[
开头的转换器被视为字符串而不是 JSON。

这就是该服务自 2016 年推出该功能以来的工作方式,因此遗憾的是,我们无法在不破坏现有客户的情况下更改默认行为。

但是,EventBridge 团队正在评估如何允许您选择加入您希望的行为。

© www.soinside.com 2019 - 2024. All rights reserved.