问题描述
我的目标是向数据发送以下格式:
{
"headers": {
"Authorization": "Bearer expectedToken"
},"body": {
"id": "abc","status": "ANY","preferences": [ [Object] ]
}
}
但与 YAML 中的输入转换器苦苦挣扎:
inputTransformer:
inputPathsMap:
expectedToken: '$detail.Metadata.sometoken'
inputTemplate: '{"headers": {"Authorization": <expectedToken>}}'
并收到此错误:
从自定义资源收到响应状态 [Failed]。信息 返回:事件模式无效。原因:“expectedToken”必须是 一个对象或一个数组 + + 在 [来源: (字符串)"{"inputTransformer":{"inputPathsMap":{"expectedToken":"$detail.Metadata.sometoken"},"inputTemplate":"{"headers": {"授权":}}"},"
Trigger 是一个带有映射模板的 APIGW,它附加一个 Auth 令牌作为元数据的一部分,但目标期望它作为一个标头。这是一个可行的解决方案吗?如何将其解析为预期格式?
稍后编辑:从 APIGW 发送的数据:
{
detail: {
body: {
id: 'abc',extraInfo: 'Postman_15:07',preferences: [Array]
},Metadata: {
service: 'my-service',status: 'ANY',sometoken: 'Bearer expectedToken'
}
}
}
解决方法
您能否分享您的事件有效负载的示例(已清除个人信息) - 即具有详细信息和元数据子字段的 JSON?
你也可以试试
inputTransformer:
inputPathsMap:
expectedToken: '$detail.metadata.someToken'
inputTemplate: '{"headers": {"Authorization": "Bearer <expectedToken>"}}'
,
尝试使用像 $.detail.metadata.someToken
之类的输入路径
如果这也不起作用,正如已经要求的那样,请给我们一个到达 EventBridge 本身的事件的示例。如果您不知道事件负载,您可以设置一个事件规则,将事件转发到 CloudWatch 日志组,以便您可以检查日志。 (提示:通过 AWS 控制台设置 cloudwatch 目标,因此使用 CloudFormation 存在一些问题)
,谢谢你的建议。看起来问题出在 eventbridge 下 inputTransformer 部分的缩进。该错误消息绝不是有帮助的。匹配目标 Lambda 期望的最终格式是:
inputTransformer:
inputPathsMap:
expectedToken: '$detail.metadata.someToken'
data: '$.detail.body'
inputTemplate: '{"headers": {"Authorization": <expectedToken>},"body": <data>}'