如何在AWS EventBridge输入转换器中保留Avro消息的Base64编码值?
解决EventBridge Kafka源自动解码Base64负载的问题
问题核心是EventBridge的Kafka源集成会自动对消息的data字段做Base64解码,输入转换器本身就依赖这个预处理逻辑,所以不管怎么配置输入转换器,都拿不到原始的Base64编码值。给你两个直接可行的解决方法:
方法一:跳过输入转换器,直接传递原始事件给Lambda
在EventBridge管道配置增强Lambda的时候,不要设置输入转换器,选择传递完整的原始事件(不同控制台界面可能叫“使用原始输入”)。这样Lambda收到的就是EventBridge从Kafka拉取的完整事件结构,其中records下每条消息的data字段就是你需要的原始Base64编码字符串。
方法二:在Lambda中提取原始Base64值
以Python Lambda为例,直接从原始事件中提取未解码的Base64数据:
import base64 # 这里导入你需要的Avro处理库,比如fastavro或avro def lambda_handler(event, context): # 遍历Kafka主题下的所有消息 for topic, message_list in event["records"].items(): for msg in message_list: # 拿到原始Base64编码的负载 raw_base64_payload = msg["data"] # 自行解码并处理Avro数据 decoded_bytes = base64.b64decode(raw_base64_payload) # 示例:用fastavro解码Avro二进制 # from fastavro import schemaless_reader # import json # import io # with open("your-schema.avsc", "r") as f: # schema = fastavro.parse_schema(json.load(f)) # avro_data = schemaless_reader(io.BytesIO(decoded_bytes), schema) # 处理完后再发送到SQS的逻辑... return {"statusCode": 200, "message": "处理完成"}
为什么输入转换器搞不定?
EventBridge Kafka源的输入转换器在执行变量引用(比如$.records.*.data)之前,已经自动完成了Base64解码操作。所以输入转换器里能拿到的都是解码后的数据,根本碰不到原始的Base64字符串,这是机制问题,没法通过调整引用方式解决。
内容的提问来源于stack exchange,提问作者Edoardo Costantini
相关产品推荐
相关产品推荐

