【发布时间】:2019-12-03 06:49:57
【问题描述】:
如果在 API Gateway 中使用"Lambda Proxy Integration"(here too & here),则会发生两个重要的变化:
1) 数据被映射到event.body(而不是直接在需要映射模板的event对象上)
2) event.body 已字符串化,需要进行 JSON.parse 处理
这是一个简单的 Lambda 函数示例,该函数期望输入符合来自 API Gateway (node10x) 的 Lambda 代理集成--
exports.handler = async (event, context) => {
if (event && event.body) {
try {
event.body = JSON.parse(event.body);
} catch(e) {
return {
statusCode: 200,
body: JSON.stringify({message: 'Hit error in try/catch'})
}
}
}
return {
statusCode: 200,
body: JSON.stringify({message: event})
}
}
问:如何(或应该)将 Lambda 的“内置”测试输入功能用于 Lambda 脚本,该脚本以 Lambda 代理集成的方式期待数据?
测试输入直接来自event 对象(不是event.body),并且数据没有从测试有效负载中字符串化
如果函数需要event.body,我们可以解决#1,我们可以将其传递给测试,但 event.body 预计会被字符串化。我们可以默默地跳过 try/catch 但这似乎有点笨拙
是否有更好的技术将“测试”输入数据发送到 Lambda 函数? 除非我忽略了某些事情,否则您似乎要么需要获得更好的解决方案,要么手动制作测试输入以“匹配”来自带有 Lambda 代理集成的 API 网关调用的预期有效负载
【问题讨论】:
-
为什么不将字符串化的 JSON 对象作为测试事件中的值放入“body”键?
-
这也让我想到了——我认为现在的底线是不要过分依赖通过代理集成以这种方式“测试”Lambda 并使用 SAM 或其他工具在本地运行: github.com/awslabs/…
标签: amazon-web-services aws-lambda aws-api-gateway