iT邦幫忙

0

AWS Lambda 搭配 Amazon API Gateway

  • 分享至 

  • xImage
  •  

AWS Lambda 搭配 Amazon API Gateway

AWS Lambda 是一種無伺服器、事件推動的運算服務,而 Amazon API Gateway 可以讓開發人員輕鬆地建立、發佈、維護、監控和保護任何規模的 API,使用 API Gateway 可以建立 RESTful API 和 WebSocket API,以啟用即時雙向通訊應用程式。本篇就是介紹如何結合這兩個 AWS 服務,透過 Amazon API Gateway 來推動 AWS Lambda。

步驟 1. 進入 AWS Lambda 控制台

登錄 AWS 控制台畫面後選擇進入 AWS Lambda 控制台,單擊左邊功能導覽列中的函式,會進入函式畫面,注意所在區域,本範例以東京區域為例,如下圖所示,單擊建立函式按鈕。

https://ithelp.ithome.com.tw/upload/images/20220424/201295106d0vuVJbEJ.png
AWS Lambda 函式控制台畫面

步驟 2. 建立 Lambda 函式

在建立函式畫面中,設定如下:

  • 選擇下列選項之一來建立您的函式: 從頭開始撰寫
  • 函式名稱: lambda2api
  • 執行時間: Python 3.7
  • 架構: x86_64

配置完畢後單擊右下方的建立函式即可,如下圖所示。

https://ithelp.ithome.com.tw/upload/images/20220424/20129510gjUPuSWRaE.png
建立 Lambda 函式配置

步驟 3. 新增觸發條件

進入 Lambda 函式的編輯畫面後,首先先單擊 +新增觸發 按鈕,用來指定 API Gateway 觸發這個 Lambda 函式,配置選項如下:

  • 觸發組態: API Gateway
  • API: 建立 API
  • API 類型: HTTP API
  • 安全性: 開啟
  • 其他設置
  • API 名稱: lambda2api-API
  • 部署階段: default
  • 跨原始資源共用 (CORS): 勾選

將 API Gateway 新增至 Lambda 函數,以建立可叫用函數的 HTTP 端點,而 API Gateway支援兩種類型的 RESTful API︰HTTP API 和 REST API。HTTP API 是輕量級、低延遲的 RESTful API,較新推出並內建於 API Gateway version 2 API;REST API 是可以高度客製化的 RESTful API。

CORS 需要從不在相同網域託管的網頁叫用您的 API。勾選跨原始資源共用 (CORS) 選項可在所有回應中新增 Access-Control-Allow-Origin 標頭,以啟用任何網域的跨原始資源共用 (CORS)。此外,Lambda 會增加 Amazon API Gateway 的必要權限,以便用這個觸發條件叫用您的 Lambda 函式。這點可以透過檢視 IAM 來觀察增加的權限。

配置完畢後單擊 新增 按鈕,如下圖所示。

https://ithelp.ithome.com.tw/upload/images/20220424/20129510cP7hmO6aX4.png
新增 API Gateway 觸發條件配置

步驟 4. 修改程式碼

修改 Lambda 程式碼以便於後續觀察 API Gateway 是如何傳遞 HTTP 的請求,所以以下代碼將傳入參數 event 顯示出來,修改完程式碼後記得單擊 Deploy 按鈕,這才會把這代碼佈署到雲端,如下圖所示。

import json

def lambda_handler(event, context):
    # TODO implement
    return {
        'statusCode': 200,
        'body': json.dumps(event, indent=4, default=str)
    }

https://ithelp.ithome.com.tw/upload/images/20220424/20129510PyriY3wvhI.png
修改 Lambda 程式碼

步驟 5. 透過 API Gateway 觸發 Lambda 函式

單擊上圖的 API Gateway 或是 組態 頁籤後選擇 觸發 功能畫面,會看到步驟 3 所建立的 API Gateway端點,單擊 API 終端節點 就可以透過 API Gateway 觸發 Lambda 函式,如下圖所示。

https://ithelp.ithome.com.tw/upload/images/20220424/20129510sZRShOjv7B.png
API 終端節點觸發 Lambda 函式

下圖顯示呼叫 API Gateway 的結果,因為使用者的請求為 GET ,可以在 ["requestContext"]["http"]這個鍵值中找到使用者的請求內容。

https://ithelp.ithome.com.tw/upload/images/20220424/20129510gNC60ZlkKR.png
Lambda 函式運行結果

步驟 6. 使用 curl 呼叫 API Gateway

因為 RESTful API 通常都是透過程式調用,所以我們試著用 curl 透過 get 與 post 方法來傳資料給後端的 Lambda 函式,觀察在 API Gateway 後方的Lambda 函式,會接收到怎樣的請求格式。

# GET request
curl "https://j98fukyxs3.execute-api.ap-northeast-1.amazonaws.com/default/lambda2api?say=Hi&to=Mon"

# POST request
curl "https://j98fukyxs3.execute-api.ap-northeast-1.amazonaws.com/default/lambda2api" \
  -X POST \
  -d "{\"say\":\"Hi\",\"to\":\"Mon\"}" \
  -H "content-type: application/json" 

當 API Gateway 收到 curl 的 get 請求時,傳過來的資料會在 ["rawQueryString"] 這個欄位中,標頭在 ["requestContext"]["http"] 這個欄位,如下圖所示。

https://ithelp.ithome.com.tw/upload/images/20220424/201295107yGsQ0dmP3.png
API Gateway 發出 GET 請求

當 API Gateway 收到 curl 的 post 請求時,傳過來的資料會在 ["body"] 這個欄位中,標頭在 ["requestContext"]["http"] 與 ["headers"] 這兩個欄位,如下圖所示。

https://ithelp.ithome.com.tw/upload/images/20220424/20129510UoIwMF3r6J.png
API Gateway 發出 POST 請求

參考資料


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言