- Serverless 教程
- Serverless - 首頁
- Serverless - 簡介
- Serverless - 安裝
- Serverless - 部署函式
- Serverless - 區域、記憶體大小、超時時間
- Serverless - 服務
- Serverless - 定時 Lambda 函式
- Serverless - API 閘道器觸發的 Lambda 函式
- Serverless - 包含/排除
- Serverless - 外掛
- Serverless - 打包依賴項
- Serverless - 層建立
- Serverless - 使用 DynamoDB 的 REST API
- Serverless - Telegram 回聲機器人
- Serverless 有用資源
- Serverless - 快速指南
- Serverless - 有用資源
- Serverless - 討論
Serverless - 外掛
隨著 Serverless 的普及,針對利基使用者案例的需求更多功能也自然而然地增長了。這些需求可以透過外掛來滿足。顧名思義,外掛是可選的,您只需要安裝需要的外掛即可。在本章中,我們將瞭解如何訪問 Serverless 可用的多個外掛,如何安裝這些外掛以及如何在 serverless.yml 中引用它們。
瀏覽外掛列表
所有可用於 Serverless 的外掛都可以在 www.serverless.com/plugins/ 找到。
您可以在此處搜尋外掛。例如,如果您搜尋“Python”,您將看到一些專門為 Python 執行時開發的外掛。它們按流行度排序。
讓我們看一下最流行的 Python 外掛(在撰寫本文時):Python Requirements。點選該外掛。這將開啟與該外掛相關的詳細文件。
此文件涵蓋了兩個最重要的方面——安裝外掛以及在 serverless.yml 中引用它。這適用於任何外掛。您只需要開啟其文件即可瞭解該外掛的安裝和使用方法。回到 Python Requirements 外掛,文件指出此外掛會自動捆綁來自 requirements.txt 的依賴項,並在您的 PYTHONPATH 中提供它們。
換句話說,如果您的 Lambda 函式需要其他依賴項(如 pandas、numpy、matplotlib 等),您只需要在 requirements.txt 檔案中指定這些依賴項,該檔案與您的 serverless.yml 檔案位於同一資料夾中。然後,此外掛將完成其餘工作。您甚至可以在 requirements.txt 中指定庫的版本號。例如,這是一個示例 requirements.txt 檔案:
aws-psycopg2==1.2.1 boto boto3==1.7.62 botocore==1.10.62 numpy==1.14.5 pandas==0.25.0 scipy==1.5.2 sqlalchemy==1.2.15
如您所見,您可以僅提及依賴項名稱,或與版本號一起新增(用 == 符號分隔)。當然,依賴項以及應用程式程式碼的大小不能超過 250 MB。因此,務必僅包含您實際需要的依賴項。
現在,讓我們回到我們的外掛。我們已準備好 requirements.txt 檔案。下一步是安裝外掛。開啟您的命令提示符並導航到包含 serverless.yml 檔案的專案資料夾。然後,按照文件說明,執行以下命令以安裝外掛:
sls plugin install -n serverless-python-requirements
實際上,如果您將 serverless-python-requirements 替換為任何其他外掛名稱,上述命令對於大多數外掛仍然有效。但是,建議在安裝新外掛時始終遵循文件中提供的安裝命令。執行上述命令時,您應該會看到類似於下圖中的訊息:
如您所見,在專案資料夾中建立了一個 packages.json 檔案。如果您的專案資料夾中已經存在 packages.json 檔案,它將被編輯以包含上述外掛。此外,serverless.yml 檔案將自動編輯以包含已安裝的外掛。如果您現在開啟 serverless.yml 檔案,您應該會看到添加了以下行:
plugins: - serverless-python-requirements
這意味著在 serverless.yml 中對外掛的引用是自動完成的。文件中提供了與此外掛相關的幾個設定。我們將在下一章中介紹與“交叉編譯”相關的設定。但現在,讓我們看看使用此外掛的效果。我在我的 requirements.txt 中添加了 numpy。我的 handler.py 檔案如下所示:
import time
import numpy
def hello(event, context):
print("second update!")
time.sleep(4)
print(numpy.random.randint(100))
return("hello")
現在讓我將其部署到 Lambda。您應該會看到類似於下圖中的訊息。請關注包的大小。它現在 > 14 MB(這是壓縮包的大小),而不是外掛新增之前的大約 10 kB,因為 numpy 依賴項也一起捆綁在一起了。
這證明依賴項現在與應用程式程式碼一起捆綁在一起了。您可以使用 sls invoke local -f function_name 在本地對其進行測試。如果您是 Windows 或 Mac 使用者,則很有可能在 AWS Lambda 控制檯上測試已部署的 Lambda 函式會丟擲錯誤,類似於以下錯誤:
Unable to import module 'handler': IMPORTANT: PLEASE READ THIS FOR ADVICE ON HOW TO SOLVE THIS ISSUE! Importing the numpy C-extensions failed. This error can happen for many reasons, often due to issues with your setup or how NumPy was installed. We have compiled some common reasons and troubleshooting tips at: https://numpy.org/devdocs/user/troubleshooting-importerror.html Please note and check the following: * The Python version is: Python3.8 from "/var/lang/bin/python3.8" * The NumPy version is: "1.19.4" and make sure that they are the versions you expect. Please carefully study the documentation linked above for further help. Original error was: No module named 'numpy.core._multiarray_umath'
繼續下一章以瞭解此錯誤發生的原因以及如何處理它。