AWS Firehose символ новой строки - PullRequest
0 голосов
/ 08 мая 2019

Я читал много похожих вопросов о добавлении символов новой строки в firehose, но они все вокруг о добавлении символа новой строки в источник. Проблема в том, что у меня нет доступа к источнику, а третья сторона передает данные в наш экземпляр Kinesis, и я не могу добавить '\ n' к источнику.

Я попытался выполнить преобразование данных пожарного шланга, используя следующий код:

'use strict';
console.log('Loading function');

exports.handler = (event, context, callback) => {
    /* Process the list of records and transform them */
    const output = [];
    event.records.forEach((record) => {
        const results = {
        /* This transformation is the "identity" transformation, the data is left intact */
            recordId: record.recordId,
            result: record.data.event_type === 'alert' ? 'Dropped' : 'Ok',
            data: record.data + '\n'
        };
        output.push(results);
    });
    console.log(`Processing completed.  Successful records ${output.length}.`);
    callback(null, { records: output });
};

но новая строка все еще потеряна. Я также пытался JSON.stringify(record.data) + '\n', но затем я получаю Invalid output structure ошибку.

1 Ответ

1 голос
/ 08 мая 2019

Попробуйте расшифровать record.data, добавьте новую строку и закодируйте ее снова как base 64.

Это Python, но идея та же

for record in event['records']:
    payload = base64.b64decode(record['data'])
    # Do custom processing on the payload here
    payload = payload + '\n'
    output_record = {
        'recordId': record['recordId'],
        'result': 'Ok',
        'data': base64.b64encode(json.dumps(payload))
    }
    output.append(output_record)
return {'records': output}

Из комментария @Matt Westlake:

Для тех, кто ищет ответ узла, это

const data = JSON.parse (newBuffer.from (record.data, 'base64)') .ToString (' utf8' ));

и

new Buffer.from (JSON.stringify (data) + '\ n'). ToString ('base64')

...