发布于 4年前

如何正确处理 AWS API Gateway 的 Lambda Error Status

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

本文假設讀者已經知道如何利用 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 值

  3. 新增 HTTP Status 400 Method Response

  4. 前往 API Gateway Console

  5. 進入 Method Execution

  6. 進入 Method Response

  7. 點選 Add Response

  8. 輸入 HTTP Status 400

  9. 點選 Add Response Model

  10. 輸入 Content type application/json、Models Error

  11. 新增 Lambda Error Regex Integration Response

  12. 進入 Integration Response

  13. 點選 Add integration response

  14. 輸入 Lambda Error Regex .*status.*fail.*、Method response status 400

  15. 設置 Mapping Templates

  16. 展開 Mapping Templates

  17. 點選 Add mapping template

  18. 輸入 Content-Type application/json

  19. 點選 Output passthrough 並改成 Mapping Templates

  20. 輸入以下程式碼:

#set($inputRoot = $input.path('$.errorMessage'))
$inputRoot
  1. 部署 API

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

HTTP/1.1 400 Bad Request
...

{
    "foo": "bar",
    "reason": "some reason",
    "status": "fail"
}

相关文章

©2020 edoou.com   京ICP备16001874号-3