Kinesis Firehose на S3 публикует файлы в кодировке base64 - PullRequest
0 голосов
/ 03 июля 2019

Я отправляю данные из Kinesis Firehose в функцию Lambda (которая в своей текущей тестовой форме не выполняет ничего, кроме декодирования и перекодирования полезной нагрузки), которая затем направляется на S3. Поток работает нормально, но файлы в S3 содержат только двоичный код в кодировке base64.

Вот толчок:

import boto3
import base64

client = boto3.client(
    'firehose',
    region_name = 'us-east-2'
)


push = {'id': '0142c979-e521-4e53-8bbe-1ac3281f0906', 'appId': 'b1fce1e293e4d0620041a76c6a70813c', 'deviceId': 'NEGL4CB15141K525', 'msgCode': 'location', 'type': 'keep', 'timestamp': 1561812470273, 'fields': {'location': [-73.9066, 40.682915]}}

string = json.dumps(push).encode()

payload = base64.b64encode(string)

client.put_record(
        DeliveryStreamName='test'
        ,Record = {
                'Data': payload
        })

А вот и лямбда:

from __future__ import print_function
import json
import base64

def lambda_handler(event, context):
    output = []

    for record in event['records']:
       #Kinesis data is base64 encoded so decode here
       payload=base64.b64decode(record['data']).decode('utf-8')
       print("Decoded payload: " + str(payload))

    output_record = {
        'recordId': record['recordId'],
        'result': 'Ok',
        'data': base64.b64encode(payload.encode('utf-8') + b'\n').decode('utf-8')
        }
    output.append(output_record)

    print('Successfully processed {} records.'.format(len(event['records'])))

    return {'records': output}      

Я новичок в Firehose и довольно часто собираю воедино, какие учебники я могу найти в Интернете. Насколько я понимаю, это должно попасть в мой контейнер S3 как декодированный JSON, чтобы я мог запросить его с Афиной или чем-то еще, что я хотел бы сделать. Но файлы в моем ведре в конечном итоге закодированный (например eyJpZCI6ICIwMTQyYzk3OS1lNTIxLTRlNTMtOGJiZS0xYWMzMjgxZjA5MDYiLCAiYXBwSWQiOiAiYjFmY2UxZTI5M2U0ZDA2MjAwNDFhNzZjNmE3MDgxM2MiLCAiZGV2aWNlSWQiOiAiTkVHTDRDQjE1MTQxSzUyNSIsICJtc2dDb2RlIjogImxvY2F0aW9uIiwgInR5cGUiOiAia2VlcCIsICJ0aW1lc3RhbXAiOiAxNTYxODEyNDcwMjczLCAiZmllbGRzIjogeyJsb2NhdGlvbiI6IFstNzMuOTA2NiwgNDAuNjgyOTE1XX19)

Любая помощь с тем, что мне здесь не хватает, очень ценится.

...