我正在使用Lambda函数查询RDS MySQL数据库。为了获取行,我将主键作为URL中的参数传递(使用AWS API Gateway)。示例URL是:
https://aaaaaaa.execute-api.aaaaaaa.amazonaws.com/default/getresult?pk=1245
在Lambda函数中,
exports.handler = (event, context, callback) => {
//prevent timeout from waiting event loop
callback(null, event);
};
我得到的输出为{}
的网址。
注意:Lambda代理集成开启。
5条答案
按热度按时间a64a0gku1#
应在API网关上启用Lambda代理集成,以便API网关将事件详细信息(包括参数)传递给Lambda。
有关如何在控制台中执行此操作,请参阅此图像:
转到您的API,然后是资源,然后是方法执行,然后选择“集成请求”。从那里勾选“使用Lambda代理集成”的框。
启用此选项允许API Gateway将请求代理到Lambda,并在事件中提供请求详细信息,包括参数。
gijlo24d2#
确保选中Use Lambda Proxy Integration复选框,这将在API Gateway的方法和关联的Lambda函数之间建立Lambda-Proxy类型的集成。
通过Lambda代理集成,Lambda需要返回以下格式的输出(doc):
这意味着如果你想把
event
对象发送回客户端,你必须把一个以上格式的对象放到callback
中。yzuktlbb3#
如果您完成了API网关设置修改过程的大部分内容,但没有单击Deploy,也可能发生此问题。直到我们单击Deploy,我们才得到填充了事件信息的测试请求,而真实的的HTTPS连接创建了空事件({})。
uxhixvfz4#
也可以进入API网关〉resources〉{要使用的方法查询字符串参数}〉方法请求〉查询字符串参数。
并在那里定义参数。这使您可以控制是否需要这些参数。
然后在你的lambda函数中,它也会在一个'queryStringParameters'对象中。
因此,不是
event['val1']
,而是event['queryStringParameters']['val1']
。也许这对AWS lambda/API网关设置来说是新的。但我认为这是一种稍微更直观的方法,因为您正在定义参数,而不是接受任何东西,并且必须在lambda函数中猜测用户正在发送什么。
uajslkp65#
在我的例子中,我在lambda函数中输入了console log,但忘记了部署它。