[英]How exactly does Lambda Error Regex work for custom errors?
我知道Lambda代理集成,但是對Lambda自定義代理感到好奇。 為了捕獲自定義錯誤,我將在Integration Response中定義與以下Lambda函數關聯的正則表達式:
exports.handler = (event, context, callback) => {
...
// Error caught here:
var myErrorObj = {
errorType : "InternalServerError",
httpStatus : 500,
requestId : context.awsRequestId,
trace : {
"function": "abc()",
"line": 123,
"file": "abc.js"
}
}
callback(JSON.stringify(myErrorObj));
};
根據doc :“當您的API方法與前面的Lambda函數集成時,API網關會收到具有以下有效負載的集成響應”
{
"errorMessage": "{\"errorType\":\"InternalServerError\",\"httpStatus\":500,\"requestId\":\"e5849002-39a0-11e7-a419-5bb5807c9fb2\",\"trace\":{\"function\":\"abc()\",\"line\":123,\"file\":\"abc.js\"}}"
}
請注意, httpStatus\\":500
內有一個反斜杠(我們稱之為目標),因此從邏輯上講Lambda Error Regex應該類似於.*httpStatus\\\\":500.*
,也就是說,它應該轉義反斜杠,以便它可以抓住那個目標。 但是,此類正則表達式無法捕獲錯誤,而是.*"httpStatus":500.*
捕獲錯誤。 后者的正則表達式通常會捕獲術語httpStatus":500
。但這與文檔相矛盾。換句話說,似乎API網關的正則表達式不掃描文檔解釋的字符串?因此,它到底要掃描什么?兩者之間到底發生了什么?
{
"errorMessage": "{\"errorType\":\"InternalServerError\",\"httpStatus\":500,\"requestId\":\"e5849002-39a0-11e7-a419-5bb5807c9fb2\",\"trace\":{\"function\":\"abc()\",\"line\":123,\"file\":\"abc.js\"}}"
}
這是API網關從Lambda接收的原始響應有效負載 。 這是一個JSON對象,包含您的errorMessage
字符串,其中包含一個JSON對象(放置在該對象中)。 Lambda再次將JSON.stringify修改為有線響應,就像它設計的那樣。
嘗試直接解析有效負載是不合適的,因此,一旦將有效負載解碼,就刪除了JSON序列化的最外層,以便將正則表達式准確地應用於錯誤消息字符串,就像將其傳遞給回調一樣。 反斜杠轉義的引號是JSON-in-JSON的人工產物,在第一個解碼步驟發生時將其刪除。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.