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

Kinesis Firehose HTTP_Endpoint响应无效报错排查与格式咨询

AWS Kinesis Firehose HTTP端点响应错误排查与修复方案

报错根因

你的代码存在3个核心问题,完全不符合Firehose的HTTP端点响应规范:

  • 响应结构错误:你混淆了API Gateway代理返回结构和Firehose要求的响应body结构,额外添加了statusCode、headers、body等Firehose不识别的字段
  • requestId无效:你写死了固定的requestId值,Firehose要求必须回传本次投递请求自带的requestId,二者必须完全匹配
  • 序列化逻辑错误:你将整个返回结构做了JSON序列化后返回字符串,同时设置了错误的content-length: 0头,导致Firehose无法正常解析响应

官方要求的响应规范

Firehose对HTTP投递目标的响应有强制要求:

  1. HTTP响应状态码必须为200
  2. 响应头Content-Type必须设置为application/json
  3. 响应Body仅允许包含两个必填字段,不允许存在额外字段:
    • requestId:必须和Firehose请求中携带的x-amz-firehose-request-id头的值完全一致
    • timestamp:毫秒级Unix时间戳,支持数字或字符串类型

修复后的代码

以下为适配API Gateway触发Lambda作为Firehose HTTP端点的正确代码:

import json
import time

def lambda_handler(event, context):
    # 提取Firehose本次请求的requestId
    firehose_request_id = event["headers"]["x-amz-firehose-request-id"]
    # 构造符合Firehose要求的响应体
    firehose_resp = {
        "requestId": firehose_request_id,
        "timestamp": int(time.time() * 1000)
    }
    # 返回API Gateway要求的代理结构
    return {
        "statusCode": 200,
        "headers": {
            "Content-Type": "application/json"
        },
        "body": json.dumps(firehose_resp)
    }

如果你的Lambda是直接作为HTTP服务对外暴露(未经过API Gateway代理),直接返回firehose_resp字典即可,无需外层结构,也不需要手动做JSON序列化。

内容的提问来源于stack exchange,提问作者Anoop Js

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 06:45:04