我正在使用Lambda函数查询RDS MySQL数据库。为了获取一行,我将主键作为参数传递给URL(使用AWS API Gateway)。示例网址为:
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代理集成。
答案 0 :(得分:0)
应该在API网关上启用Lambda代理集成,以便API Gateway将事件详细信息(包括参数)传递给Lambda。
有关在控制台中如何执行此操作的信息,请参见此处:
转到您的API,然后转到“资源”,再转到“方法执行”,然后选择“集成请求”。从那里打勾,写上“使用Lambda代理集成”的框。
启用此功能后,API网关会将事件中可用的请求详细信息(包括参数)代理到Lambda。
答案 1 :(得分:0)
请确保选中“使用Lambda代理集成”复选框,该复选框将在API网关的方法和关联的Lambda函数之间建立Lambda-Proxy类型的集成。
通过Lambda代理集成,需要Lambda返回以下格式(doc)的输出:
{
"isBase64Encoded" : "boolean",
"statusCode": "number",
"headers": { ... },
"body": "JSON string"
}
这意味着,如果您想将event
对象发送回客户端,则必须将callback
对象放入上述格式。
exports.handler = (event, context, callback) => {
//prevent timeout from waiting event loop
const response = {
statusCode: 200,
headers: {
"x-custom-header": "my custom header value"
},
body: JSON.stringify({
message: 'Your function executed successfully!',
input: event,
}),
};
// success response
callback(null, response);
};
答案 2 :(得分:0)
如果您完成了大部分 API Gateway 设置修改过程,但没有点击部署,也会出现此问题。在我们点击 Deploy 之前,我们收到了填充有事件信息的测试请求,而真正的 HTTPS 连接创建了空事件 ({})。