如何使用GET请求向AWS Lambda函数传递参数?

34

假设我想在从我的Api网关端点到Lambda函数的GET请求中传递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网关上方法请求的URL查询字符串参数中。但是,我如何在函数内部访问它们?


你尝试过打印eventcontext吗?你可以查看文档中的示例 - albert
1
如果您正确传递数据,您应该能够通过类似于 event.val1 的方式访问 event 对象(至少在 JS 中是这样访问对象属性的)。 - JohnAllen
2个回答

29

在 API 网关的 Method Request 部分定义查询字符串参数之后,您需要在 Method Execution 部分定义映射模板。

Method Execution 部分中,选择 Mapping Templates,然后单击 Add Mapping Template。输入 application/json 作为 Content Type,然后创建一个类似以下内容的映射模板:

{
    "va1": "$input.params('val1')",
    "val2": "$input.params('val2')"
}

这将告诉 API 网关获取输入参数(可以通过路径、标头或查询参数传递),其中包括名为 val1val2 的参数,并将它们作为事件数据发送到 Lambda 函数中,以 val1val2 的形式。


4
谢谢。我要补充的是,映射模板位于方法执行页面上的集成请求下。这个链接很有帮助: https://forums.aws.amazon.com/thread.jspa?threadID=192601。我仍然有一些问题,但至少我知道该去哪里查找了。 - capitalistcuttle
3
也许我会找到所有这些层的原因,但必须说,乍一看,这比我想象的要复杂得多。Python 是如此易于内省,以至于 AWS Lambda 可以通过检查函数签名自动创建映射。 - capitalistcuttle
2
这个链接解决了一些关于在编辑映射模板时如何包含各种类型参数的细节问题:http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html#input-variable-reference - pythonjsgeo
您不再需要定义映射模板来访问查询请求参数。另一种解决方案是使用Lambda代理集成,如此答案所述。https://dev59.com/yl0Z5IYBdhLWcg3wiw0v#46114185 - Mohamed Salem Lamiri

13

所有信息都可以从Event对象中检索。

例如:变量foo的值可以从事件中检索: event["foo"]


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接