1

我正在使用AWS Kinesis Firehose進行自定義數據轉換。拉姆達的用Python編寫的3.6和返回字符串如下所示:Firehose轉換輸出的格式化

{ 
    "records": [ 
     { 
      "recordId": "...", 
      "result": "Ok", 
      "data": "..." 
     }, 
     { 
      "recordId": "...", 
      "result": "Ok", 
      "data": "..." 
     }, 
     { 
      "recordId": "...", 
      "result": "Ok", 
      "data": "..." 
     } 
    ] 
} 

這LAMBDA是非常高興,並記錄看起來像上面的只是其送回流水之前的輸出。然而,流水的S3日誌然後顯示一個錯誤:

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

看跨在JS和Java這種網絡傳播的例子,它不是我清楚我需要什麼,以不同的方式來做;我很困惑。

回答

2

如果你的數據是一個JSON對象,你可以嘗試以下

import base64 
import json 
def lambda_handler(event, context): 
    output = [] 
    for record in event['records']: 
     # your own business logic. 
     json_object = {...} 
     output_record = { 
      'recordId': record['recordId'], 
      'result': 'Ok', 
      'data': base64.b64encode(json.dumps(json_object).encode('utf-8')).decode('utf-8') 
     } 
     output.append(output_record) 
    return {'records': output} 

base64.b64encode功能只能b'xxx '的字符串,而' 數據工程'output_record'的屬性需要一個普通的'xxx'字符串。