我正在使用与Lambda集成的API网关。
注意:我不使用Lambda代理.
我需要从API网关返回一个二进制响应。我已成功地将其设置如下:
return "base64 encoded binary data"
返回该数据。CONVERT_TO_BINARY
Content-Type
头映射到二进制内容的二进制媒体类型问题是,除了发送二进制数据(我可以从上述步骤成功完成)外,我还需要在API响应中包含一个x-my-header
自定义头。
我知道如何在API中设置标头映射,但是报头必须从数据库数据中计算,因此这个值也需要从lambda返回。
我对lambda集成的理解(请记住,这里我没有使用lambda代理)是API网关发出HTTP请求来触发lambda。然后Lambda向API返回一个HTTP响应,将输出的函数添加到主体中,并向响应中添加内部aws头。
现在可以使用以下方法将头映射到方法响应:
integration.response.header.header-name
我的问题是..。
当我使用自定义lambda集成(而不是代理)时,我可以告诉lambda将我的自定义头添加到二进制响应中吗?
注意事项:如果i使用lambda代理,我知道返回对象如下所示,然后我将能够发送自定义头。但出于我无法控制的原因,我不能使用lambda代理。
如果Lambda I使用lambda代理,则返回对象解决方案:
return {
'body': "base64 encoded binary data",
'headers': 'x-my-header': 'my-value',
'isBase64Encoded': True
}
对于Lambda Integration (不是代理),我尝试过修改lambda输出。
return {
"base64-data": "base64 encoded binary data",
"x-my-header: "some value"
}
并在集成响应中建立映射模板.
$input.json("$.base64-data")
并使用.建立头映射。
integration.response.body.x-my-header
但是API网关返回一个错误:
Execution failed due to configuration error: Unable to transform response
我认为发生此错误是因为当您启用CONVERT_TO_BINARY
时,不存在映射模板。来自AWS文档:
当将文本有效负载转换为二进制blob时,API网关假设文本数据是Base64 64编码的字符串,并将二进制数据输出为经过Base64 64解码的blob。如果转换失败,则返回一个指示API配置错误的500个响应。您没有为这种转换提供映射模板,尽管您必须在API上启用传递行为。
发布于 2020-12-17 01:15:46
我意识到这是一个老问题,但最近遇到了一个类似的头映射问题,尽管我没有使用二进制数据。
在我看来,兰博达的回归可能是这样的
{
"base64-data": "base64 encoded binary data",
"x-my-header: "some value"
}
基于Lambda响应,可以应用以下映射(我基于AWS示例修改了映射)
$input.json("$.base64-data")
#set($context.responseOverride.header.x-my-header = "$input.json('$.x-my-header')")
$input.json("$")引用您的响应,$.key是引用您的子键的正确方法。
您还必须在您的方法响应中预先配置您的标题“x header”。
在集成响应中,标头映射可能只是一个空值。
""
实际值将由由映射模板设置的覆盖($context.responseOverride.header)提供。
https://stackoverflow.com/questions/53902955
复制相似问题