【问题标题】:Kinesis to Lambda - Parsing DataKinesis 到 Lambda - 解析数据
【发布时间】:2017-04-20 15:34:52
【问题描述】:

我正在按照本教程将数据从我的 API 网关推送到 Kinesis 流:

http://docs.aws.amazon.com/apigateway/latest/developerguide/integrating-api-with-aws-services-kinesis.html#api-gateway-get-and-add-records-to-stream

我的身体映射模板设置为.....

{
    "StreamName": "my-stream-name",
    "Data": "$util.base64Encode($input.path('$.Data'))",
    "PartitionKey": "$input.path('$.PartitionKey')"
}

...并将以下内容放入 API 测试的请求正文中...

{
  "Data": {
    "Foo": "A",
    "Bar": "B"
  },
  "PartitionKey": "some key"
}

然后,我创建了一个 Lambda 函数,该函数针对相同的 Kinesis Stream 设置了触发器。但是,我正在努力解码/反序列化来自 Kinesis 的记录。

exports.handler = (event, context, callback) => {    
    event.Records.forEach(function(record) {        
        let payload = JSON.parse(Buffer(record.kinesis.data, 'base64').toString('ascii'))      
    });
};

似乎数据正在以非 JSON 格式序列化到 Kinesis。 forEach 循环中record.kinesis.data 的值为

e0Zvbz1BLCBCYXI9Qn0=

...通过 Buffer(record.kinesis.data, 'base64').toString('ascii')

返回为

{Foo=A, Bar=B}

不是

{"Foo":"A", "Bar":"B"}

主要目的显然是让有效载荷处于我可以说console.log(payload.Foo)的状态

任何关于我应该做什么/寻找什么的提示将不胜感激。

【问题讨论】:

    标签: json amazon-web-services lambda base64 amazon-kinesis


    【解决方案1】:

    对于其他人来说

    我的身体映射模板设置为.....

    {
        "StreamName": "my-stream-name",
        "Data": "$util.base64Encode($input.path('$.Data'))",
        "PartitionKey": "$input.path('$.PartitionKey')"
    }
    

    现在改为处理 json....

    {
        "StreamName": "my-stream-name",
        "Data": "$util.base64Encode($input.json('$.Data'))",
        "PartitionKey": "$input.path('$.PartitionKey')"
    }
    

    在哪里...

    ($input.json('$.Data'))
    

    是变化:)

    【讨论】:

      猜你喜欢
      • 2020-11-13
      • 2016-10-31
      • 1970-01-01
      • 2018-09-07
      • 2016-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-10
      相关资源
      最近更新 更多