我在与Python Lambda函数集成的API网关上有一个方法。如果在我的Python Lambda函数中发生异常,其中errorMessage字段与该方法的集成响应中的正则表达式之一不匹配,我希望我的API网关返回500响应。关于未处理的异常的API网关500响应
我只想返回一个200,如果没有引发异常,lambda返回没有失败。
随着在上面的图片中的设置 - 引发的任何异常,其不为400响应会给出一个200响应匹配(.|\n)*'type':\s*'.*Error'(.|\n)*
。
如果发现任何异常与已配置的响应不匹配,我该如何返回500 - 当Python函数成功返回时仍返回200?我只需要在代码中包装所有东西(除了try除外),这可能会引发异常并生成可预测的errorMessage字符串?
编辑:
我目前由具有500的(.|\n)*
拉姆达错误的正则表达式的整合。响应“实现这一目标”。这是一个合理的方式来捕捉未处理的异常为500错误?
编辑:
事实证明,这种配置是给500的错误时,Python函数返回无一例外。
我希望拉姆达错误的正则表达式的只尝试匹配,如果实际的例外是由Python函数抛出(因为他们只根据文档检查的errorMessage场)。使其回落到默认方法201(在更新的场景中)。奇怪的是,当使用API GW控制台“Test”进行测试时,它会返回400,但在其他任何地方尝试时会给出500(在500 Integration Response中定义的主体映射)。
我认为能够将所有未处理的异常返回为500的唯一方法是从我的Python函数raise Exception('Success')
而不是return
- 然后将201 Lambda Error Regex匹配为“成功”......我真的不想这么做。
这是一个好消息。非常感谢。 – unclemeat
我可能说得太快了。这似乎是我配置的方式,即使函数返回时没有异常,也会给出500个响应。我已更新原始帖子,提供更多信息。 – unclemeat
Lambda在200个案例中为错误消息返回一个空字符串。将您的500 Lambda错误正则表达式更改为(。| \ n)+,以便它至少需要一个字符并且不匹配空字符串。 –