2017-03-07 40 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)+,以便它至少需要一個字符並且不匹配空字符串。 –