使用層管理 Lambda 相依性 - AWS Lambda

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用層管理 Lambda 相依性

Lambda 層是含有補充程式碼或資料的 .zip 封存檔。層通常具備程式庫相依性、自訂執行期或組態檔案。

以下是您可能會考慮使用層的多種原因:

  • 縮減部署套件的大小。切勿將所有函數的相依項以及函數程式碼加入部署套件,而是將它們放在層裡面。這可以使部署套件在容量小的情況下同時保持條理。

  • 若要將核心函數邏輯與相依項分隔開來。您可以透過層獨立於函數程式碼更新函數相依項,反之亦然。這能夠促進關注點分離的原則,且有助於您將重心放在函數邏輯上。

  • 若要跨多個函數共享相依項。建立層後,您可以將其套用於帳戶中的函數,數量無任何限制。如果沒有使用層,則必須在每個個別的部署套件中加入相同的相依項。

  • 若要使用 Lambda 主控台程式碼編輯器。程式碼編輯器是快速測試次要函數程式碼更新的實用工具。不過,如果您的部署套件太大,便無法使用編輯器。使用層可以縮減套件的大小,並取得程式碼編輯器的使用權限。

如果您在 Go 或 Rust 中使用 Lambda 函數,建議您不要使用圖層。對於 Go 和 Rust 函數,您可以將函數代碼作為可執行文件提供,其中包括編譯後的函數代碼及其所有依賴項。將依賴關係放在圖層中會強制函數在初始化階段手動加載其他程序集,這可能會增加冷啟動時間。為了獲得 Go 和 Rust 功能的最佳性能,請將您的依賴項以及部署包括在內。

下圖會說明共用相依項的兩個函數之間的概略架構差異。一個函數使用 Lambda 層,而另一個函數則不使用。

比較兩個不使用圖層的函數,以及共享圖層的兩個函數。

將層新增至 Lambda 函數時,Lambda 會將層內容擷取至函數執行環境中的 /opt 目錄。所有原生支援的 Lambda 執行期皆包含 /opt 目錄中特定目錄的路徑。如此一來,您的函數便可以存取您的層內容。如需有關這類特定路徑以及如何正確封裝層的詳細資訊,請參閱 封裝層內容

每個函數最多可包含五個圖層。此外,您只能將層與 部署為 .zip 封存檔 的 Lambda 函數搭配使用。對於定義為容器映像的函數,您可以在建立容器映像時封裝偏好的執行期和所有程式碼相依項。如需詳細資訊,請參閱運 AWS 算部落格上的使用容器映像中的 Lambda 層和擴充功能

如何使用層

若要建立層,請將相依項封裝到 .zip 檔案中,方法類似於您建立一般部署套件的方式。更具體來說,建立和使用層的一般程序包括以下三個步驟:

層和層的版本

層版本是特定層版本不可變的快照。建立新層時,Lambda 會建立版本編號為 1 的新層版本。每次將更新發佈至層時,Lambda 都會遞增版本編號並建立新的層版本。

每個層版本都由唯一的 Amazon 資源名稱 (ARN) 識別。向函數新增層時,您必須指定要使用的確切層版本。