3

我目前正在使用以下映射模板将发送到 AWS API Gateway 端点的数据传递到 AWS Kinesis Firehose 流:

{
    "DeliveryStreamName": "[STREAMNAME]",
    "Record": {
        "Data": "$util.base64Encode($input.body)"
    }
}

我想做的是:向$input.body正在编码的信息添加信息,就像$context.identity.sourceIp发出请求的客户端一样。

当传递给 Kinesis Firehose 的输出需要进行 Base64 编码时,我该如何处理?理想情况下,我希望发布到 Kinesis Firehose 的数据如下所示:

{
  "x": 1,
  "y": 2,
  "z": 3,
  ...,                   // all the properties from the JSON-request by the client
  "clientIp": "x.x.x.x"  // property added by API-Gateway into client's object
}
4

1 回答 1

8

经过多一点挖掘后,我设法使以下工作:

#set($inputRoot = $input.path('$'))
#set($data =  "{
  #foreach($key in $inputRoot.keySet())
  ""$key"": $input.json($key),
  #end
  ""clientIP"": ""$context.identity.sourceIp"",
}")
{
    "DeliveryStreamName": "[STREAMNAME]",
    "Record": {
        "Data": "$util.base64Encode($data)"
    }
}

我不知道您可以在#set 中执行#foreach。请注意,您还必须使用双引号才能做到这一点。

于 2016-10-28T17:18:46.900 回答