aws firehose вызов лямбда-функции дает неправильный выходной формат strcuture - PullRequest
0 голосов
/ 13 декабря 2018

Когда я вставляю объект данных в поток AWS, используя операцию put, он работает нормально. Поскольку лямбда-функция включена в моем потоке пожарных шлангов. Затем вызывается лямбда-функция, но выдает ошибку ответа структуры вывода:

"errorMessage":"Invalid output structure: Please check your function and make sure the processed records contain valid result status of Dropped, Ok, or ProcessingFailed."

так что теперь я создал свою лямбда-функцию следующим образом, чтобы сделать правильный вывод:

import base64
import json

print('Loading function')

def lambda_handler(event, context):
    output=[]
    print('event'+str(event))
    for record in event['records']:
        payload = base64.b64decode(record['data'])
        print('payload'+str(payload))
        payload=base64.b64encode(payload)
        output_record={
            'recordId':record['recordId'],
            'result': 'Ok',
             'data':  base64.b64encode(json.dumps('hello'))
        }
    output.append(output_record)
    return { 'records': output }

Теперь я получаю следующую ошибку при кодировании поля данных как

"errorMessage": "a bytes-like object is required, not 'str'",

и если я изменяю 'привет' на байты типа b'hello ', тогда я получаю следующую ошибку:

 "errorMessage": "Object of type bytes is not JSON serializable",

1 Ответ

0 голосов
/ 13 декабря 2018

импорт json импорт base64 импорт gzip импорт io import zlib

def lambda_handler (событие, контекст): output = []

for record in event['records']:
    payload = base64.b64decode(record['data']).decode('utf-8')
    output_record = {
        'recordId': record['recordId'],
        'result': 'Ok',
        'data': base64.b64encode(payload.encode('utf-8')).decode('utf-8')
    }
    output.append(output_record)

return {'records': output}
...