跳到內容
Amo's Blog

如何正確處理 AWS API Gateway 的 Lambda Error Status

翻譯自原文 Error handling in AWS API Gateway with Lambda

1 分鐘閱讀

翻譯自原文 Error handling in AWS API Gateway with Lambda

這篇文章會介紹如何設置 AWS API Gateway 正確處理 Lambda 返回的 HTTP 錯誤狀態碼。

更新:2016.03.12 claudia 可以自動化解決這個問題,詳細可以參考 這篇 文章。

本文假設讀者已經知道如何利用 AWS API Gateway 和 Lambda 建立 REST API,詳細可參考 Create API Gateway API for Lambda Functions

假設你的 Lambda function 錯誤處理如下:

console.log('I am a AWS Lambda function');
exports.handler = function(event, context) {
// 一般使用 context.fail 來返回 Lambda function 錯誤
context.fail(JSON.stringify({status:'fail', reason:'some reason', foo:'bar'}));
};

但是 API Gateway 返回的結果會是 HTTP 200

HTTP/1.1 200 OK
...
{
"errorMessage": "{\"status\":\"fail\",\"reason\":\"some reason\",\"foo\":\"bar\"}"
}

我們希望的結果是:

  1. HTTP Status 400 Bad request
  2. 只顯示 errorMessage 的 JSON 值

  1. 前往 API Gateway Console
  2. 進入 Method Execution
  3. 進入 Method Response
  4. 點選 Add Response
  5. 輸入 HTTP Status 400
  6. 點選 Add Response Model
  7. 輸入 Content type application/json、Models Error

  1. 進入 Integration Response
  2. 點選 Add integration response
  3. 輸入 Lambda Error Regex .*status.*fail.*、Method response status 400

  1. 展開 Mapping Templates
  2. 點選 Add mapping template
  3. 輸入 Content-Type application/json
  4. 點選 Output passthrough 並改成 Mapping Templates
  5. 輸入以下程式碼:

記得點選 Deploy API 完成 API 的更新,然後測試返回結果是否為 HTTP 400

HTTP/1.1 400 Bad Request
...
{
"foo": "bar",
"reason": "some reason",
"status": "fail"
}

留言