You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 22:52:05