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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 16:22:46