2017-03-07 43 views
0

我在与Python Lambda函数集成的API网关上有一个方法。如果在我的Python Lambda函数中发生异常,其中errorMessage字段与该方法的集成响应中的正则表达式之一不匹配,我希望我的API网关返回500响应。关于未处理的异常的API网关500响应

我只想返回一个200,如果没有引发异常,lambda返回没有失败。

Integration Responses

随着在上面的图片中的设置 - 引发的任何异常,其不为400响应会给出一个200响应匹配(.|\n)*'type':\s*'.*Error'(.|\n)*

如果发现任何异常与已配置的响应不匹配,我该如何返回500 - 当Python函数成功返回时仍返回200?我只需要在代码中包装所有东西(除了try除外),这可能会引发异常并生成可预测的errorMessage字符串?

编辑:

我目前由具有500的(.|\n)*拉姆达错误的正则表达式的整合。响应“实现这一目标”。这是一个合理的方式来捕捉未处理的异常为500错误?

编辑:

事实证明,这种配置是给500的错误时,Python函数返回无一例外。

Integration Responses 2

我希望拉姆达错误的正则表达式的只尝试匹配,如果实际的例外是由Python函数抛出(因为他们只根据文档检查的errorMessage场)。使其回落到默认方法201(在更新的场景中)。奇怪的是,当使用API​​ GW控制台“Test”进行测试时,它会返回400,但在其他任何地方尝试时会给出500(在500 Integration Response中定义的主体映射)。

我认为能够将所有未处理的异常返回为500的唯一方法是从我的Python函数raise Exception('Success')而不是return - 然后将201 Lambda Error Regex匹配为“成功”......我真的不想这么做。

回答

1

鉴于API网关的错误响应处理机制的限制,您目前的方法是合理的。

API网关团队已收到来自多个客户的反馈,指出我们的错误处理支持的缺点。我们正在积极努力改善这一点,并希望在未来提供改进的错误处理体验。

+0

这是一个好消息。非常感谢。 – unclemeat

+0

我可能说得太快了。这似乎是我配置的方式,即使函数返回时没有异常,也会给出500个响应。我已更新原始帖子,提供更多信息。 – unclemeat

+1

Lambda在200个案例中为错误消息返回一个空字符串。将您的500 Lambda错误正则表达式更改为(。| \ n)+,以便它至少需要一个字符并且不匹配空字符串。 –