教學課程:使用 Lambda 代理整合建立 REST API - Amazon API Gateway

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

教學課程:使用 Lambda 代理整合建立 REST API

Lambda 代理整合是一種輕量型彈性 API Gateway API 整合類型,可讓您整合 API 方法 (或整個 API) 與 Lambda 函數。Lambda 函數的編寫方式可以是 Lambda 支援的任何語言。因為它是代理整合,所以您可以隨時變更 Lambda 函數實作,無需重新部署您的 API。

在此教學中,您將執行下列操作:

  • 建立 "Hello, World!" Lambda 函數作為 API 的後端。

  • 建立和測試 具有 Lambda 代理整合的 API。

建立 "Hello, World!" Lambda 函數

建立 "Hello, World!" Lambda 控制台中的 Lambda 函數
  1. 在以下網址登入 Lambda 主控台:https://console.aws.amazon.com/lambda

  2. 在 AWS 導覽列上,選擇一個AWS 區域

    注意

    記下您建立 Lambda 函數的區域。在建立 API 時,您將需要此區域。

  3. 在導覽窗格中,選擇 Functions (函數)

  4. 選擇 Create function (建立函式)

  5. 選擇 Author from scratch (從頭開始撰寫)。

  6. Basic information (基本資訊) 下,請執行下列動作:

    1. 函數名稱 中,輸入 GetStartedLambdaProxyIntegration

    2. 針對執行期,請選擇最新支援的 Node.jsPython 執行期。

    3. 許可下,展開變更預設執行角色。從執行角色下拉式清單中,選擇從 AWS 政策範本建立新角色

    4. 角色名稱 中,輸入 GetStartedLambdaBasicExecutionRole

    5. Policy templates (政策範本) 欄位留白。

    6. 選擇 Create function (建立函式)

  7. 在內嵌程式碼編輯器的 Function code (函數程式碼) 下,複製/貼上下列程式碼:

    Node.js
    export const handler = function(event, context, callback) { console.log('Received event:', JSON.stringify(event, null, 2)); var res ={ "statusCode": 200, "headers": { "Content-Type": "*/*" } }; var greeter = 'World'; if (event.greeter && event.greeter!=="") { greeter = event.greeter; } else if (event.body && event.body !== "") { var body = JSON.parse(event.body); if (body.greeter && body.greeter !== "") { greeter = body.greeter; } } else if (event.queryStringParameters && event.queryStringParameters.greeter && event.queryStringParameters.greeter !== "") { greeter = event.queryStringParameters.greeter; } else if (event.multiValueHeaders && event.multiValueHeaders.greeter && event.multiValueHeaders.greeter != "") { greeter = event.multiValueHeaders.greeter.join(" and "); } else if (event.headers && event.headers.greeter && event.headers.greeter != "") { greeter = event.headers.greeter; } res.body = "Hello, " + greeter + "!"; callback(null, res); };
    Python
    import json def lambda_handler(event, context): print(event) greeter = 'World' try: if (event['queryStringParameters']) and (event['queryStringParameters']['greeter']) and ( event['queryStringParameters']['greeter'] is not None): greeter = event['queryStringParameters']['greeter'] except KeyError: print('No greeter') try: if (event['multiValueHeaders']) and (event['multiValueHeaders']['greeter']) and ( event['multiValueHeaders']['greeter'] is not None): greeter = " and ".join(event['multiValueHeaders']['greeter']) except KeyError: print('No greeter') try: if (event['headers']) and (event['headers']['greeter']) and ( event['headers']['greeter'] is not None): greeter = event['headers']['greeter'] except KeyError: print('No greeter') if (event['body']) and (event['body'] is not None): body = json.loads(event['body']) try: if (body['greeter']) and (body['greeter'] is not None): greeter = body['greeter'] except KeyError: print('No greeter') res = { "statusCode": 200, "headers": { "Content-Type": "*/*" }, "body": "Hello, " + greeter + "!" } return res
  8. 選擇 Deploy (部署)

建立 "Hello, World!" API

立即為您的 "Hello, World!" 建立 API 使用 API Gateway 主控台的 Lambda 函數。

建立 "Hello, World!" API
  1. 在以下網址登入 API Gateway 主控台:https://console.aws.amazon.com/apigateway

  2. 如果這是您第一次使用 API Gateway,您會看到服務功能的介紹頁面。在 REST API 下方,選擇 Build (組建)。當 Create Example API (建立範例 API) 快顯出現時,選擇 OK (確定)

    如果這不是第一次使用 API Gateway,請選擇 Create API (建立 API)。在 REST API 下方,選擇組建

  3. 對於API 名稱,輸入 LambdaProxyAPI

  4. 描述,請輸入描述。

  5. API 端點類型保持設定為區域

  6. 選擇建立 API

在建立 API 之後,請建立資源。一般而言,會根據應用程式邏輯將 API 資源組織為資源樹狀結構。在此範例中,您會建立 /helloworld 資源。

建立資源
  1. 選取 / 資源,然後選擇建立資源

  2. 代理資源保持關閉。

  3. 資源路徑保持為 /

  4. 針對資源名稱,輸入 helloworld

  5. CORS (跨來源資源分享) 保持關閉。

  6. 選擇建立資源

在代理整合中,透過一個代表任何 HTTP 方法的囊括型 ANY 方法,將整個請求按現狀傳送到後端 Lambda 函數。實際的 HTTP 方法由用戶端在執行時間指定。ANY 方法可讓使用針對所有支援的 HTTP 方法而設定的單一 API 方法:DELETEGETHEADOPTIONSPATCHPOSTPUT

建立 ANY 方法
  1. 選取 /helloworld 資源,然後選擇建立方法

  2. 針對方法類型,選取 ANY

  3. 針對整合類型,選取 Lambda 函數

  4. 開啟 Lambda 代理整合

  5. 對於 Lambda 函數,請選取 AWS 區域 您建立 Lambda 函數的位置,然後輸入函數名稱。

  6. 若要使用 29 秒的預設逾時值,請將預設逾時保持開啟。若要設定自訂逾時,請選擇預設逾時,然後輸入介於 5029000 毫秒之間的逾時值。

  7. 選擇建立方法

部署和測試 API

部署 API
  1. 選擇部署 API

  2. 針對階段,選取新階段

  3. 針對階段名稱,輸入 test

  4. 描述,請輸入描述。

  5. 選擇部署

  6. 階段詳細資訊下,選擇複製圖示以複製 API 的調用 URL。

使用瀏覽器和 cURL 來測試具有 Lambda 代理整合的 API

您可以使用瀏覽器或 cURL 來測試您的 API。

若要僅使用查詢字串參數測試GET請求,您可以在瀏覽器網址列中輸入 API helloworld 資源的 URL。

要為 API 的helloworld資源創建 URL,請將資源helloworld和查詢字符串參數附加?greeter=John到調用 URL。您的網址應如下所示。

https://r275xc9bmd.execute-api.us-east-1.amazonaws.com/test/helloworld?greeter=John

針對其他方法,您必須使用更進階的 REST API 測試公用程式,例如 POSTMANcURL。本教學使用 cURL。以下 cURL 命令範例假設 cURL 已安裝在您的電腦上。

若要使用 cURL 測試已部署的 API:
  1. 開啟終端機視窗。

  2. 複製以下 cURL 命令並將它貼到終端視窗,然後將調用 URL 取代為您在上一個步驟中複製的 URL,再將 /helloworld 新增至該 URL 的結尾。

    注意

    如果您是在 Windows 上執行命令,請改用此語法:

    curl -v -X POST "https://r275xc9bmd.execute-api.us-east-1.amazonaws.com/test/helloworld" -H "content-type: application/json" -d "{ \"greeter\": \"John\" }"
    1. 使用查詢字串參數 ?greeter=John 呼叫 API:

      curl -X GET 'https://r275xc9bmd.execute-api.us-east-1.amazonaws.com/test/helloworld?greeter=John'
    2. 使用標頭參數 greeter:John 呼叫 API:

      curl -X GET https://r275xc9bmd.execute-api.us-east-1.amazonaws.com/test/helloworld \ -H 'content-type: application/json' \ -H 'greeter: John'
    3. 使用內文 {"greeter":"John"} 呼叫 API:

      curl -X POST https://r275xc9bmd.execute-api.us-east-1.amazonaws.com/test/helloworld \ -H 'content-type: application/json' \ -d '{ "greeter": "John" }'

    在所有情況下,輸出都是具有下列回應內文的 200 回應:

    Hello, John!