求助:Lambda转换时读取Kinesis Firehose的VPC流日志数据乱码
解决Kinesis Firehose转换Lambda中读取VPC流日志乱码问题
Kinesis Firehose传给转换Lambda的记录数据默认是Base64编码+gzip压缩的,这就是你看到乱码的原因,按以下步骤处理就能得到可读的VPC流日志:
处理步骤
- 第一步:对每条记录的
data字段做Base64解码,得到二进制数据 - 第二步:对解码后的二进制数据进行gzip解压
- 第三步:将解压后的二进制数据转成UTF-8字符串,即可得到可读的VPC流日志
示例代码(Python)
import base64 import gzip import json def lambda_handler(event, context): output_records = [] for record in event['records']: # 1. Base64解码原始数据 decoded_data = base64.b64decode(record['data']) try: # 2. 解压gzip格式的日志数据 uncompressed_data = gzip.decompress(decoded_data) # 3. 转换为可读的UTF-8字符串 readable_log = uncompressed_data.decode('utf-8') # 按Firehose要求格式返回处理后的记录(需重新Base64编码) output_record = { 'recordId': record['recordId'], 'result': 'Ok', 'data': base64.b64encode(readable_log.encode('utf-8')).decode('utf-8') } except Exception as e: # 处理解码失败的异常记录 output_record = { 'recordId': record['recordId'], 'result': 'ProcessingFailed', 'data': record['data'] } output_records.append(output_record) return {'records': output_records}
额外说明
- VPC流日志通过Firehose传输时,Firehose会自动对日志进行gzip压缩,必须解压才能获取明文
- 处理完成后,必须严格按照Firehose要求的结构返回记录,否则会被判定为处理失败
内容的提问来源于stack exchange,提问作者Jelena
相关产品推荐
相关产品推荐

