【发布时间】:2017-07-28 07:16:15
【问题描述】:
我在与 Python Lambda 函数集成的 API 网关上有一个方法。如果在我的 Python Lambda 函数中引发异常,其中 errorMessage 字段与该方法的集成响应中的正则表达式之一不匹配,我希望我的 API 网关返回 500 响应。
如果没有引发异常并且 lambda 返回没有失败,我只想返回 200。
使用上图中的设置 - 任何与 400 响应的 (.|\n)*'type':\s*'.*Error'(.|\n)* 不匹配的异常都会给出 200 响应。
如果引发任何与已配置响应不匹配的异常,我如何返回 500 - 当 Python 函数成功返回时仍返回 200?我是否只需将所有可能引发异常并生成可预测的 errorMessage 字符串的代码(使用 try except)包装起来?
编辑:
我目前正在通过 500 的集成响应和 (.|\n)* 的 Lambda 错误正则表达式来“实现这一目标”。这是将未处理的异常捕获为 500 个错误的合理方法吗?
编辑:
当 Python 函数没有异常返回时,这个配置给出了 500 个错误。
我希望 Lambda 错误正则表达式仅在 Python 函数引发实际异常时尝试匹配(因为它们仅根据文档检查 errorMessage 字段)。导致它回退到 201 的默认方法(在更新的场景中)。奇怪的是,它在使用 API GW 控制台“测试”进行测试时返回 400,但在从其他任何地方尝试时给出 500(在 500 集成响应中定义的主体映射)。
我认为将所有未处理的异常返回为 500 的唯一方法是从我的 Python 函数返回 raise Exception('Success') 而不是 return - 然后让 201 Lambda 错误正则表达式匹配“成功”......我真的而不是这样做。
【问题讨论】:
标签: python http aws-lambda aws-api-gateway