問題介紹
AWS Lambda 是一套 Serveless 服務,讓使用者不必花太多時間佈建或管理伺服器,同時得到更多時間編寫核心邏輯。
不過 AWS Lambda 也有些小缺點,例如當 code 與用到的 libraries 超過 3MB 時,你會被告知 deployment package too large
雖然這不影響 function 的運行,但會讓人不方便編輯與查看 lambda function 內容。
解決方法
為了解決這項問題,AWS 在 2018 年推出 Lambda Layers 來存放 function 之間共用的 libraries。
實際舉例
以下拿 python3 的 Lambda Function 當例子:
假設有個 python 程式需要 PyMySQL
、PyYAML
、openpyxl
三個 Libraries。
使用 Layer 前
在不使用 layer 的情況下,你需要建立一個 requirements.txt
,並在裡面寫上 Libraries 與對應的版本。
然後用 pip install --requirement requirements.txt
安裝 Libraries。裝好後你會發現資料夾裡多了好多不是自己寫的檔案:
由於這些 libraries 跟你寫的 code 在同一個資料夾層級,它們會阻礙你閱讀 code,而且當它們超過 3MB 時,無法在 AWS Lambda 線上編輯器顯示。
使用 Layer 後
當你打算採用 layer 時,你需要將 Libraries 打包到名為 python
的資料夾內
1 | pip install \ |
然後用 zip -r lambdaLayer.zip python
將它打包再上傳。
以下介紹透過 AWS Console 上傳的方式
首先進入 AWS Lambda Function Layers 頁面,並點選 Create Layer
上傳剛剛打包好的 zip 檔
上傳好你會得到一串資源識別碼 (ARN, Amazon Resource Name),記下它,因為等一下會用到
這時再回到你想加入 Layer 的 lambda function,然後點選 Layers
。注意 Layers 右邊有個 (0)
,它表示現在有的 Layer 數是 0。
然後再點選 Add a layer
再來選 Provide a layer version ARN
,並貼上剛剛記下的 ARN
這時 Layer 就快建立完成了,最後只要按下 Save
就能儲存 Layer,注意這時 Layers
右邊的數字變成 1,表示有一個 Layer。
結果比較
從上面的例子可以發現使用 Layer 後,編輯器裡只會留下你自己編寫的檔案
這樣不僅方便看 code,也可以在 AWS Lambda 線上編輯器直接修改 code 。