本文將教學如何把寫好的 FastAPI 程式碼,配合 AWS Lambda 部署到 API Gateway 上(包含詳細圖文解說 API Gateway 的設定)
前情提要
這篇文章會使用到 AWS Lambda 的函式,若還不清楚怎麼使用的話,推薦可以先看下面這篇文章再回來,如果正在閱讀文章的你已經會使用,那就可以直接往下看囉!
在 AWS Lambda 上使用 Python 第三方套件教學
流程步驟
- 建立 API
- 設定 API
- 建立方法
- 建立資源
- 部署 API
- 實際呼叫 API 測試
1. 建立 API
首先要確定自己要建立的區域,建議使用比較近的國家地區,例如:東京、大阪、新加坡或香港,因為這將會嚴重影響 API 的速度,我之前誤闖美國東部 Ohio (us-east-2),導致我在 GET / POST 都慢到懷疑人生,所以請先一定要選擇好!
接著就可以進入 AWS API Gateway 的頁面, API 類型選擇「REST API」並點選「建置」,若是第一次在這個國家地區建立 API 的話,會跳出一個教學視窗,大概看一看就可以按確定把它關掉了。

接下來會進入到以下頁面,此時預設可能是「範本 API」,請改成建立「新 API」,並且設定一個「API 名稱」,因為我的 API 是要來收集 cookie 的,所以我命名為 cookie_api,設定完成就可以按「建立 API」。

2. 設定 API
建立方法 (Create method)
接下來會進入到這個 API 的設定介面,先點擊「操作」選擇「建立方法」

此時在 API 根目錄(/)底下會出現一個下拉式選單,請選擇「ANY」後點選打勾圖示

右邊會出現方法設定,這邊記得要勾選「使用 Lambda 代理整合」,並在「Lambda 函數」中輸入預先設定的 Lambda 函式名稱,我的程式碼叫做 cookie_api_function,只要打第一個字 c 就會出現候選名稱了,選下去就對了!最後就按下「儲存」完成。

不知道什麼是 Lambda 函式?趕快點擊下方文章惡補一下吧!
在 AWS Lambda 上使用 Python 第三方套件教學
建立資源 (Create resource)
再來要在 API 根目錄底下建立新的資源,一樣點選「操作」,這次選擇「建立資源」,右邊就會出現資源設定的頁面,只要勾選「設定為代理資源」底下的資源名稱和路徑就會自動幫我們帶入 proxy 和 {proxy+} 了,不用特地輸入哦!

點選「建立資源」後,會進入到資源的 /{proxy+} ANY 設定,這邊只要像剛剛建立方法一樣,輸入「Lambda 函數」這一格即可按下「儲存」囉!

3. 部署 API
設定完之後,就可以進行我們的 API 部署作業,很簡單,也是一樣點選「操作」選擇「部署 API」

此時會跳出一個視窗,「部署階段」是一個下拉式選單,但沒有部署過的話應該會只有新階段可以選,所以就選擇「新階段」(New Stage) 並輸入「階段名稱」,這個名稱將會成會 API 的網址的一部分,所以可以思考一下如何設定。
我這邊就當作是開發階段的 API,因此命名為 cookie_api_dev,階段說明和部署說明都是選填,可自行依照不同情境去填寫說明,都完成後就可以按下「部署」!

4. 實際呼叫 API 測試
在左側的側欄可以看到,到剛剛的步驟都是在 API: cookie_api 底下的「資源」中操作,部署後會進入到「階段」這一頁,且這頁會顯示我們這支 API 最重要的網址(如下圖紅框的「叫用 API」位置),底下也會有這個 API 的 Rate 限制。

API 的網址結構大概會長這樣:
https://my-api-id.execute-api.region-id.amazonaws.com/cookie_api_dev
紅字的部分會依照每個人有所不同,而藍字就是剛剛部署的 API 階段名稱
GET / POST 的方式也會因人而異,像我收集使用者 cookie 的 FastAPI 程式碼如下:
因此我 POST 時使用的網址就會是:
https://my-api-id.execute-api.region-id.amazonaws.com/cookie_api_dev/members/
GET 時使用的網址則是:
https://my-api-id.execute-api.region-id.amazonaws.com/cookie_api_dev/members/{member_id}?offset=5
以上就是將 FastAPI 部署到 AWS API Gateway 的各種設定和呼叫方法的教學。
若覺得文章不錯的話可以訂閱我的部落格,也歡迎追蹤我的 Facebook 粉絲專頁:https://www.facebook.com/jumpingcoder
補充紀錄
這次 POST 的資料是存到 MongoDB 中,所以稍微紀錄一下 Python 連接 MongoDB Database 和 Collection 的部分。
db = client['member_log'] # Database Name
collection = db['cookie'] # Collection Name
上方的 db
和 collection
所對應到雲端 MongoDB 的名稱:

[…] 將 FastAPI 部署到 AWS API Gateway 教學(配合 Lambda 使用) […]
讚讚