Search code examples
amazon-web-servicesamazon-kinesisamazon-kinesis-firehose

How can I decode stream data from kinesis firehose?


I have setup a Kinesis firebase to stream cloudwatch log to a http endpoint. The http endpoint is a nodejs application. I disabled zip, encode in kinesis firehose.

I am able to receive it in the nodes app but I don't know how to decode the records.

One of the records I receive is below format. It is not a base64 string. I don't know what the encode format it is. How can I decode it?

 [
    {
      data: 'H4sIAAAAAAAAAK1QXWvbMBT9K8bsMZl19XEl5c0lbiks24i9vTRhyJZSDHaS2cq6rvS/9zrroBT6UBgCCc7RvefjIe3DOLrbUN0fQ7pIl3mV/1gVZZlfFeksPdztw0AwRwmMMZCSKYK7w+3VcDgdicnc3Zh1rq+9y2IY41+2jENw/TTIOGQMM26zmw+f8qooq+1OCe9c0+DOg7S2MXZnla1rL2rJnQFaMZ7qsRnaY2wP+8u2i2EY08XNtHlMt2eF4lfYxwl8SFtPQgK50EwaQGsks6AZt6C4klqD5XRLxVAywVCB1VygYBRKcBKLLXUQXU9xALm0NCSMRJz964bWl1W+rpJ1+Hmir9d+kYRGAnd8N0evm7n0wsyd0zj3GiCgVN44mXwn35RgkTxH3+zTx9lrw5orIywzaIzSYEAKVHSQPADQKxmTQitrEDQyeMuwMval4eLz8r12/4O7N+t85W5dfP3y/j43cXkaXDw3Cpx95Crpx028aLsu+OQlB2diFfrDcJ+U7Z8wgSZZXRDofifPxLcxkDLiGZ/Sbx+fALQcXhYQAwAA'
    }
...

Solution

  • It is gziped byte64:

    data="H4sIAAAAAAAAAK1QXWvbMBT9K8bsMZl19XEl5c0lbiks24i9vTRhyJZSDHaS2cq6rvS/9zrroBT6UBgCCc7RvefjIe3DOLrbUN0fQ7pIl3mV/1gVZZlfFeksPdztw0AwRwmMMZCSKYK7w+3VcDgdicnc3Zh1rq+9y2IY41+2jENw/TTIOGQMM26zmw+f8qooq+1OCe9c0+DOg7S2MXZnla1rL2rJnQFaMZ7qsRnaY2wP+8u2i2EY08XNtHlMt2eF4lfYxwl8SFtPQgK50EwaQGsks6AZt6C4klqD5XRLxVAywVCB1VygYBRKcBKLLXUQXU9xALm0NCSMRJz964bWl1W+rpJ1+Hmir9d+kYRGAnd8N0evm7n0wsyd0zj3GiCgVN44mXwn35RgkTxH3+zTx9lrw5orIywzaIzSYEAKVHSQPADQKxmTQitrEDQyeMuwMval4eLz8r12/4O7N+t85W5dfP3y/j43cXkaXDw3Cpx95Crpx028aLsu+OQlB2diFfrDcJ+U7Z8wgSZZXRDofifPxLcxkDLiGZ/Sbx+fALQcXhYQAwAA"
    
    import base64
    import gzip
    
    decodedBytes = base64.b64decode(data)
    print(gzip.decompress(decodedBytes))
    

    gives:

    b'{"messageType":"DATA_MESSAGE","owner":"264100014405","logGroup":"/aws/lambda/test","logStream":"2021/06/29/[$LATEST]f53daacc6fd1499c89f959bbd3b42a81","subscriptionFilters":["logs"],"logEvents":[{"id":"36237048169840917029152547719247745064030651972363026432","timestamp":1624925438466,"message":"START RequestId: ec412a2f-6d7c-4d38-aa76-d711e645d8a4 Version: $LATEST\\n"},{"id":"36237048172583908688571814365656638411566400437598617601","timestamp":1624925438589,"message":"END RequestId: ec412a2f-6d7c-4d38-aa76-d711e645d8a4\\n"},{"id":"36237048172583908688571814365656638411566400437598617602","timestamp":1624925438589,"message":"REPORT RequestId: ec412a2f-6d7c-4d38-aa76-d711e645d8a4\\tDuration: 120.25 ms\\tBilled Duration: 121 ms\\tMemory Size: 128 MB\\tMax Memory Used: 66 MB\\t\\n"}]}'