API Gateway EventBridge-PutEvents集成:无需Lambda传递request.headers至Detail
无需Lambda,将API Gateway请求头传递至EventBridge Detail的方案
直接在RequestParameters的Detail字段中组合$request.headers和$request.body会触发错误,原因是该字段仅支持单个请求变量引用,无法直接拼接复杂JSON结构。可以通过**集成请求模板(RequestTemplates)**实现需求,具体配置如下:
调整CloudFormation集成配置
移除原RequestParameters中的Detail配置,添加RequestTemplates来构造包含请求头和请求体的自定义Detail内容:
Type: AWS::ApiGatewayV2::Integration Properties: IntegrationType: AWS_PROXY IntegrationSubtype: EventBridge-PutEvents RequestParameters: Source: SOME_TEXT DetailType: SOME_TEXT RequestTemplates: application/json: | { "Detail": "{\"headers\": $util.escapeJavaScript($input.params().header), \"body\": $util.escapeJavaScript($input.json('$'))}", "Source": "SOME_TEXT", "DetailType": "SOME_TEXT" }
关键配置说明
$util.escapeJavaScript():用于转义JSON字符串中的特殊字符(如引号、换行),保证最终生成的Detail是合法的JSON格式$input.params().header:获取API请求的所有请求头键值对$input.json('$'):获取原始请求体内容- 构造的
Detail值需要是JSON字符串格式,因此外层需用引号包裹转义后的内容
补充注意事项
如果你的API需要支持多种Content-Type,可在RequestTemplates中添加对应类型的模板,或使用$default作为通用匹配模板。
内容的提问来源于stack exchange,提问作者Nikolay Grishchenko
相关产品推荐
相关产品推荐

