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投递目标的响应有强制要求:
- HTTP响应状态码必须为
200 - 响应头
Content-Type必须设置为application/json - 响应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
相关产品推荐
相关产品推荐

