教學課程:使RESTAPI用 Lambda 代理整合建立 - Amazon API 网关

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

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

Lambda 代理整合是一種輕量且靈活的API閘道API整合類型,可讓您將API方法 (或整API個) 與 Lambda 函數整合。Lambda 函數的編寫方式可以是 Lambda 支援的任何語言。由於這是代理整合,因此您可以隨時變更 Lambda 函數實作,而無需重新部署. API

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

  • 建立 "Hello, World!" Lambda 函數成為API.

  • 建立和測試 API與 Lambda 代理集成。

建立 "Hello, World!" Lambda 函數

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

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

    注意

    記下您建立 Lambda 函數的區域。當您建立API.

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

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

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

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

    1. 函數名稱 中,輸入 GetStartedLambdaProxyIntegration

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

    3. 對於「架構」,請保留預設設定。

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

    5. 角色名稱 中,輸入 GetStartedLambdaBasicExecutionRole

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

    7. 選擇 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 (部署)

創建一個「你好,世界!」 API

現在創建一個API為您的「你好,世界!」 使用API閘道主控台的 Lambda 函數。

要創建一個「你好,世界!」 API
  1. https://console.aws.amazon.com/ap igateway 登入API閘道主控台。

  2. 如果這是您第一次使用 API Gateway,您會看到一個介紹服務功能的頁面。在下方 RESTAPI,選擇 [建置]。出現 [建立範例] API 快顯視窗時,選擇 [確定]

    如果這不是您第一次使用API閘道,請選擇 [建立] API。在下方 RESTAPI,選擇 [建置]。

  3. 對於API名稱,輸入LambdaProxyAPI

  4. 描述,請輸入描述。

  5. 保持API端點類型設定為 [地區]。

  6. 選擇 [建立] API。

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

建立資源
  1. 選擇建立資源

  2. 代理資源保持關閉。

  3. 資源路徑保持為 /

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

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

  6. 選擇建立資源

在代理整合中,整個要求會透過代表任何方法的 Catch-All ANY 方法,依原樣傳送至後端 Lambda 函數。HTTP實際的HTTP方法是由客戶端在運行時指定。此方ANY法可讓您針對所有支援的API方法使用單一HTTP方法設定:DELETEGETHEADOPTIONSPATCHPOST、、和PUT

建立 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。

使用瀏覽器和 c URL 來測試使API用 Lambda 代理整合

您可以使用瀏覽器或 c URL 來測試您的API.

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

若要URL為的helloworld資源建立,請將資源helloworld和查詢字串參數附加?greeter=John至您API的叫用URL。你URL應該看起來像下面這樣。

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

對於其他方法,您必須使用更進階的RESTAPI測試公用程式,例如POSTMANc URL。本教程使用 c URL。下面的 c URL 命令示例假設 c URL 已安裝在您的計算機上。

要API使用 c 測試您的部署URL:
  1. 開啟終端機視窗。

  2. 複製以下 c 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. 若要API使用的查詢字串參數呼叫?greeter=John

      curl -X GET 'https://r275xc9bmd.execute-api.us-east-1.amazonaws.com/test/helloworld?greeter=John'
    2. 若要呼叫標API頭參數,請執行下列動作greeter:John

      curl -X GET https://r275xc9bmd.execute-api.us-east-1.amazonaws.com/test/helloworld \ -H 'content-type: application/json' \ -H 'greeter: John'
    3. 要API使用以下主體調用{"greeter":"John"}

      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!