如何访问 AWS Lambda 中的标头?
Posted
技术标签:
【中文标题】如何访问 AWS Lambda 中的标头?【英文标题】:How to Access header in AWS Lambda? 【发布时间】:2016-03-21 01:33:33 【问题描述】:我正在使用 AWS Api Gateway。 我已经使用 API Gateway 创建了资源和方法。
我创建了 Lambda 函数,用于生成 json 格式的签名 URL,以通过 CloudFront 访问 s3 存储桶。
当我使用 GET 方法调用 lambda 函数时。我将“channekID”作为查询字符串传递。我也想发送 X-API-Key 自定义标头进行授权。
我尝试了很多东西,但没有找到任何解决方案。 如何在 Lambda 函数中发送自定义标头? 并在 Lambda 中访问标头值之后 如何使用 x-api-key 进行授权?
【问题讨论】:
【参考方案1】:Api Gateway 团队签到,Luc 的回答是正确的。您的 Lambda 函数上下文只能访问请求正文,因此您的客户端发送到 Api Gateway 的任何标头都必须映射到请求模板中。 Luc给出的例子是一个很好的例子,但也可以查看参考文档:
http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html
杰克
【讨论】:
我正在尝试从 django 应用程序中访问使用的 api 密钥名称(不是实际密钥)。我需要记录每个请求以及是谁提出的。我该怎么做?谢谢。【参考方案2】:您无法使用 Lambda 访问标头。但是您可以做的是在 Api Gateway 中创建一个映射模板,将标头值放入事件对象中。
标头应位于可在映射模板中使用的$input.params(x)
变量中。请参阅full documentation 了解如何准确集成它。
更新:在您的映射模板中(在 api 网关 -> 您的端点 -> 集成请求下),添加如下内容:
#set($inputRoot = $input.path('$'))
"apikey" : "$input.params('X-Api-Key')"
现在你可以在event.apikey
下的lambda函数中访问api键(我没有测试这个,但我们在生产中使用了类似的东西)。请注意,您可以对所有标头变量以及正文中的变量执行此操作。
【讨论】:
好的,感谢您的回复。 $input.params(x) 意味着我正在将 header 变量作为 querystring 访问。对!!!! 那么如何使用 x-api-key 授权 lambda 函数?? 我用一个小例子更新了答案,展示了它是如何工作的 很抱歉几年后添加这个,但我在按照您的回复后试图弄清楚一些事情。你所描述的工作,但我不能让身体也被映射。如果我尝试添加一行 "body": "$input.params('body')" 它不起作用。你能指出身体有什么不同吗? 如果你只是记录它,帖子正文应该在某个地方。但是,我强烈建议不要再像这样使用它。相反,使用像 serverless.com 这样的开源无服务器框架要容易得多。如果您使用他们的 yaml 文件结构创建 HTTP 端点,那么您就可以在那里获得所需的一切。默认情况下传递标头。以上是关于如何访问 AWS Lambda 中的标头?的主要内容,如果未能解决你的问题,请参考以下文章
使用 http 端点访问 lambda 中的 HTTP 请求(标头、查询字符串、cookie、正文)对象
aws 如何从生产环境中的 lambda 函数访问 ECS 服务
AWS Lambda 上的 Nestjs(无服务器框架)|如何访问事件参数?