View a markdown version of this page

使用 layer 管理 Lambda 事件函數相依性 - AWS Lambda

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

使用 layer 管理 Lambda 事件函數相依性

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

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

  • 縮減部署套件的大小。您可以將所有 Event Function 相依性與 Event Function 程式碼一起包含在部署套件中,而不是將其放在 layer 中。這可以使部署套件在容量小的情況下同時保持條理。

  • 若要將核心函數邏輯與相依項分隔開來。使用 layer,您可以獨立於 Event Function 程式碼來更新 Event Function 相依性,反之亦然。這有助於分離疑慮,並協助您專注於事件函數邏輯。

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

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

  • 若要鎖定內嵌 SDK 版本。隨著 AWS 發行新的服務和功能,內嵌 SDKs可能會變更,恕不另行通知。您可以使用所需的特定版本建立 Lambda 層,鎖定 SDK 的版本。事件函數接著會一律使用 layer 中的 版本,即使內嵌在服務中的版本有所變更。

如果您在 Go 或 Rust 中使用 Lambda 事件函數,我們建議您不要使用 layer。對於 Go 和 Rust 事件函數,您可以提供事件函數程式碼做為可執行檔,其中包含編譯的事件函數程式碼及其所有相依性。將您的相依性放入 layer 會強制您的 Event Function 在初始化階段手動載入其他組件,這可能會增加冷啟動時間。為了獲得最佳的 Go 和 Rust 事件函數效能,請包含您的相依性以及部署套件。

下圖說明兩個共用相依性的 Event Functions 之間的高階架構差異。一個函數使用 Lambda 層,而另一個函數則不使用。

比較兩個不使用 layer 的事件函數,以及兩個共用 layer 的事件函數。

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

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

如何使用層

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

層和層的版本

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

每個層版本皆由唯一的 Amazon Resource Name (ARN) 進行識別。將 layer 新增至 Event Function 時,您必須指定要使用的確切 layer 版本 (例如 arn:aws:lambda:us-east-1:123456789012:layer:my-layer:1)。