最近在研究這些AWS服務要怎麼使用,發現有很多概念還不清楚,所以這篇想要來了解一下AWS lambda的一些原理和相關概念~~~
無伺服器
提到AWS lambda這項服務,就會想到他是一種無伺服器的架構,無伺服器的架構是什麼呢?它並不是真的沒有伺服器,而是AWS已經幫你處理好伺服器的基礎架構、維運、設定等等,讓我們可以不用煩惱這些,只要專心開發我們的應用程式。
使用AWS lambda的優點
- 只要按實際的用量付費,不用一直開著機器導致要花更多的錢,因為AWS lambda是事件驅動式的,只有在發生事件比如說使用者請求時才會啟動,所以才不用一直開著。
- 不用擔心當使用量增加時要去調整伺服器的資源,AWS lambda會去預測然後預先幫你準備好。
使用時機
在使用上會有一些限制,AWS lambda最多只能運行15分鐘,所以不適合需要長時間運行的服務,但像是api類型的服務就很適合,因為通常一個請求在幾秒內就會回傳。
實際操作
首先進到AWS Lambda服務後,選取函式->建立函式
然後輸入我們函式的名稱以及選取我們在執行函式需要的環境後,就可以按建立函式
,建立我們的第一個lambda 函式囉~~~
然後我們就會到程式的編輯頁面,可以開始建立我們fastapi的程式~~
我們先把原本lambda_function.py
這個檔案改成 main.py
這樣比較符合fastapi的檔案命名(不改也可以),然後再寫一個最簡單的fastapi回傳hello word,值得注意的是可以看到程式碼第11行需要用Mangum
去把我們的fastapi包起來,這是為什麼呢?因為Mangum可以將任何ASGI的應用(fastapi)轉成lambda handler讓Lambda函數執行,簡單來說就是可以讓我們的fastapi服務可以在AWS lambda服務上運行。
再來我們要來設定執行的時候lambda要執行的func,這部分也是很多教學沒提到的部分,如果沒設定就會跑不起來,我們要去改下圖紅框框的地方把原本的lambda_function.lambda_handler
改成 main.handler
這樣lambda函數才知道啟動的時候要執行什麼。
你以為這樣就結束了嗎,並沒有xd,你會發現我們都沒有裝套件要怎麼執行fastapi和Mangum呢?所以接下來我們要來裝套件,這裏會透過Layer這個功能來裝套件,好處是可以讓不同的lambda函式共用這個layer,要在這個layer裝套件,我們必須先在本地準備好套件的壓縮檔,所以先來教大家怎麼準備這個壓縮檔~~
首先先創一個叫python
的資料夾(一定要叫python不然會吃不到),然侯同時準備好requirements.txt
裡面寫好要裝的套件版本
目錄結構如下:
接著回到一開始的地方,輸入壓縮python資料夾的指令,壓縮成dependency.zip,這樣我們就可以準備上傳囉~~
接著回到AWS選layer->建立Layer
,
一樣輸入這個layer的名稱以後,我們上傳我們剛剛用好的壓縮檔後就可以建立Layer囉~~
再來回到lambda 函式的頁面,設定layer,點選新增layer
選取自訂layer
,選剛剛我們創立好的layer,版本因為只有一版,所以是1。
套件和api程式碼都準備好我們就可以開始部署,點選deploy
,這樣就部署完成囉~~
來測試一下看看有沒有順利運行~~點選Test
然後在範本的地方選apigateway-aws-proxy
,然後把紅色框框的地方都改成下圖這樣,這樣才可以打得到我們的api
可以看到成功回傳Hello World,這樣就完成fastapi部署在lambda上面囉
有什麼問題可以留言在下方跟我說,喜歡我的文章在幫我拍拍手喔~~~~
參考資料: