【问题标题】:Is it worth it to "test" Lambda functions w/ Lambda Proxy Integration?使用 Lambda 代理集成“测试”Lambda 函数是否值得?
【发布时间】: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


【解决方案1】:

当您尝试测试您的 Lambda 函数时,您是否尝试过选择预定义的测试事件模板,而不是尝试使用建议的默认事件配置?

你可以试试 Event Template --> API Gateway AWS Proxy。

【讨论】:

    猜你喜欢
    • 2019-02-21
    • 1970-01-01
    • 2021-02-11
    • 1970-01-01
    • 2019-09-27
    • 1970-01-01
    • 2017-07-17
    • 1970-01-01
    • 2018-10-27
    相关资源
    最近更新 更多