我已将 API 网关配置为 Kinesis 代理,如 Amazon’s tutorial 中所述,用于将记录放入 Kinesis 流中。

集成请求的 HTTP header 是:

  • stream-name 映射到 method.request.header.stream-name
  • partition-key 映射到 method.request.header.partition-key
  • Content-Type 映射到 application/x-amz-json-1.1

  • 内容类型 application/json 的主体映射模板如下所示:
    {
        "StreamName": "$input.params('stream-name')",
        "PartitionKey": "$input.params('partition-key')",
        "Data": "$util.base64Encode({"rows": "$input.json('$')", "uuid": "$input.params('uuid')"})"
    }
    

    数据以 JSON 请求负载的形式出现。我们应该将 uuid 参数作为 JSON 对象键添加到 Kinesis 的数据负载中,但发送到 Kinesis 的编码数据不是 JSON 对象。

    需要将参数 uuid 作为 json-object key 添加到 kinesis 的 data-payload 中。我面临的问题是,发送到 kinesis 的编码数据不是 JSON 对象。

    我希望发送到 Kinesis 的数据应该是一个 JSON 对象:
    {
     "rows": [{"id": 1, "name": "a"}, {"id": 2, "name": "b"}],
     "uuid": "0001"
    }
    

    但发送到 Kinesis 的实际数据如下所示:
    {
     rows=[{"id": 1, "name": "a"}, {"id": 2, "name": "b"}],
     uuid=0001
    }
    

    如何将 JSON 对象从 API 网关发送到 Kinesis?我一直在试验 $util.parseJson,但找不到针对这种情况的解决方案。

    最佳答案

    您需要在速度模板中转义双引号

    #set($event =  "{
      ""rows"": ""$input.json('$')"",
      ""uuid"": ""$input.params('uuid')"",
    }")
    {
       "StreamName": "$input.params('stream-name')",
       "Data": "$util.base64Encode($event)",
       "PartitionKey": "$input.params('partition-key')"
    }
    

    这是 aws 论坛上的一个类似问题,用于通过 api 网关 https://forums.aws.amazon.com/thread.jspa?threadID=233060 将数据发送到 kinesis

    关于amazon-web-services - 将 API 网关主体中的 JSON 对象添加到 Kinesis 代理?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37914077/

    10-11 10:34