通过Mule Amazon Lambda Connector调用AWS Lambda无法获取传入头部如何处理
原因说明
你在Mule调试日志中看到的HTTP头是AWS SigV4签名鉴权流程使用的传输层头部,Lambda的标准Invoke API默认不会把这些传输层头部直接透传给函数的event参数,event默认只会携带调用方传入的请求体内容,这是Lambda的原生设计,和Mule连接器的实现无关。
可用解决方案
不用引入API网关的前提下,你可以选择以下任意一种方案实现头部透传:
方案1:自定义Payload封装头部
这是改造成本最低的方案:
- 在Mule侧调用Lambda之前,将原有请求体和需要透传的头部统一封装为新的Payload,新增一个独立的
customHeaders字段存放所有需要传递的头部内容 - Lambda侧直接从
event对象中解析customHeaders字段即可拿到所有头部
参考封装后的Payload结构:
{ "originalBody": "你原本要传递的请求体内容", "customHeaders": { "customerHeader": "headerValue", "accept": "application/json", "x-amz-date": "20210716T073050Z" } }
方案2:通过Mule Lambda连接器的Invocation Parameters透传
Mule官方的Amazon Lambda Connector支持自定义调用参数传递:
- 打开Mule流中Lambda连接器的配置页,找到Invocation Parameters配置项
- 将需要透传的头部作为键值对添加到该配置中,连接器会将这些参数作为事件的一部分传递给Lambda
- 如果需要传递连接器自动生成的SigV4鉴权头,可以先从Mule的消息属性中提取对应头的值,再绑定到Invocation Parameters中
方案3:通过Lambda上下文获取系统内置信息
部分AWS原生的元数据可以直接从Lambda的context参数读取,不需要额外传递:
- 包括请求ID、调用方ARN、Lambda运行区域、函数配置信息等都可以通过上下文对象直接获取
- 注意自定义业务头、鉴权相关的
Authorization头无法通过该方式获取,需要通过前两种方案主动透传
内容的提问来源于stack exchange,提问作者Satyam Pisal
相关产品推荐
相关产品推荐

