如何使用 GET 请求将参数传递给 AWS Lambda 函数?
Posted
技术标签:
【中文标题】如何使用 GET 请求将参数传递给 AWS Lambda 函数?【英文标题】:How do I pass arguments to AWS Lambda functions using GET requests? 【发布时间】:2016-03-27 00:10:40 【问题描述】:假设从我的 Api 网关端点向我的 Lambda 函数发出 GET 请求时,我想在 URL 字符串中传递 val1 和 val2:
https://xyz.execute-api.amazonaws.com/prod/test?val1=5&val2=10
我有一个简单的函数,将两个输入 val1 和 val2 相加:
def lambda_handler(event, context):
# How do I get at val1 and val2??
return 'result': val1 + val2
我已将 val1 和 val2 添加到 AWS API Gateway 上的方法请求的 URL 查询字符串参数中。但是如何在函数内部访问它们呢?
【问题讨论】:
您是否尝试同时打印event
和context
?你可以看看sample in the docs
如果你正确地传递你的数据,你应该可以使用event.val1
之类的东西访问event
对象(至少在JS中你是这样访问对象的属性的)
How to pass a querystring or route parameter to AWS Lambda from Amazon API Gateway的可能重复
【参考方案1】:
在API网关的方法请求部分定义查询字符串参数后,你需要在方法执行部分定义一个映射模板。
在方法执行部分,选择映射模板,然后点击添加映射模板。为 Content Type 输入 application/json
,然后创建一个如下所示的映射模板:
"va1": "$input.params('val1')",
"val2": "$input.params('val2')"
这将告诉 API Gateway 获取名为 val1
和 val2
的输入参数(在路径中、在标头中或在查询参数中传递),并将它们作为 @ 发送到事件数据中的 Lambda 函数987654328@和val2
。
【讨论】:
谢谢。我要补充一点,映射模板位于方法执行页面上的集成请求下。此链接很有帮助:forums.aws.amazon.com/thread.jspa?threadID=192601。仍然有一些问题,但至少我知道去哪里找。 也许我会为所有这些层找到一些原因,但不得不说乍一看这比我想象的要复杂得多。 Python 是如此内省,以至于 AWS Lambda 可以通过检查函数签名自动创建映射。 这个链接清除了一些关于如何在编辑映射模板时包含各种类型参数的细节:docs.aws.amazon.com/apigateway/latest/developerguide/… 您不再需要定义映射模板来访问您的查询请求参数。另一个解决方案包括使用此答案中描述的 Lambda 代理集成。 ***.com/questions/31329958/…【参考方案2】:所有信息都可以从Event
对象中获取。
例如:
变量 foo 的值可以从事件中检索为:event["foo"]
。
【讨论】:
以上是关于如何使用 GET 请求将参数传递给 AWS Lambda 函数?的主要内容,如果未能解决你的问题,请参考以下文章
如何将两个参数传递给 Javascript/NodeJS 中的 API“获取”请求
如何将输入参数传递给 AWS Glue Map.apply 函数
如何使用 GET 方法将 GET 参数传递给 Laravel?