1

我的目标是向数据发送以下格式:

{
  "headers": {
    "Authorization": "Bearer expectedToken"
  },
  "body": {
    "id": "abc",
    "status": "ANY",
    "preferences": [ [Object] ]
  }
}

但与 YAML 中的输入变压器苦苦挣扎:

inputTransformer:
  inputPathsMap:
    expectedToken: '$detail.metadata.someToken'
  inputTemplate: '{"headers": {"Authorization": <expectedToken>}}'

并得到这个错误:

收到来自自定义资源的响应状态 [FAILED]。返回消息:事件模式无效。原因:“expectedToken”必须是对象或者数组++at [Source: (String)"{"inputTransformer":{"inputPathsMap":{"expectedToken":"$detail.metadata.someToken"},"inputTemplate": "{"headers": {"Authorization": }}"},"

Trigger 是一个带有映射模板的 APIGW,该模板将 Auth 令牌作为元数据的一部分附加,但目标期望它作为标头。这是一个可行的解决方案吗?如何将其解析为预期的格式?

稍后编辑: 从 APIGW 发送的数据:

 {
    detail: {
        body: {
          id: 'abc',
          extraInfo: 'Postman_15:07',
          preferences: [Array]
        },
        metadata: {
          service: 'my-service',
          status: 'ANY',
          someToken: 'Bearer expectedToken'
        }
      }
}
4

3 回答 3

0

感谢您的建议。看起来问题出在 eventbridge 下 inputTransformer 部分的缩进上。该错误消息绝不是有帮助的。与目标 Lambda 所期望的匹配的最终格式是:

 inputTransformer:
      inputPathsMap:
        expectedToken: '$detail.metadata.someToken'
        data: '$.detail.body'
      inputTemplate: '{"headers": {"Authorization": <expectedToken>}, "body": <data>}'
于 2021-04-22T13:09:24.730 回答
0

尝试使用类似的输入路径$.detail.metadata.someToken

如果这也不起作用,正如已经要求的那样,请给我们一个到达 EventBridge 本身的事件的示例。如果您不知道事件有效负载,您可以设置将事件转发到 CloudWatch 日志组的事件规则,以便您检查日志。(提示:通过 AWS 控制台设置 cloudwatch 目标,afaik 为此使用 CloudFormation 存在一些问题)

于 2021-04-16T07:02:17.387 回答
0

您能否分享您的事件有效负载的示例(清除个人信息) - 即具有详细信息和元数据子字段的 JSON?

你也可以试试

inputTransformer:
  inputPathsMap:
    expectedToken: '$detail.metadata.someToken'
  inputTemplate: '{"headers": {"Authorization": "Bearer <expectedToken>"}}'
于 2021-04-15T20:30:52.403 回答