

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

# 使用層管理 Lambda 相依項
<a name="chapter-layers"></a>

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

以下是您可能會考慮使用層的多種原因：
+ **縮減部署套件的大小。**切勿將所有函數的相依項以及函數程式碼加入部署套件，而是將它們放在層裡面。這可以使部署套件在容量小的情況下同時保持條理。
+ **若要將核心函數邏輯與相依項分隔開來。**您可以透過層獨立於函數程式碼更新函數相依項，反之亦然。這能夠促進關注點分離的原則，且有助於您將重心放在函數邏輯上。
+ **若要跨多個函數共享相依項。**建立層後，您可以將其套用於帳戶中的函數，數量無任何限制。如果沒有使用層，則必須在每個個別的部署套件中加入相同的相依項。
+ **若要使用 Lambda 主控台程式碼編輯器。**程式碼編輯器是快速測試次要函數程式碼更新的實用工具。不過，如果您的部署套件太大，便無法使用編輯器。使用層可以縮減套件的大小，並取得程式碼編輯器的使用權限。
+ **鎖定嵌入式 SDK 版本。**隨著 AWS 發布新服務與功能，嵌入式 SDK 可能會在未經通知的情況下變更。您可以使用所需的特定版本[建立 Lambda 層](#chapter-layers)，鎖定 SDK 的版本。如此一來，即使內嵌於服務中的版本變更，函數也會永遠使用層中的版本。

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

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

![比較兩個不使用層的函數，以及兩個共用層的函數。](http://docs.aws.amazon.com/zh_tw/lambda/latest/dg/images/lambda-layers-diagram.png)


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

每個函數最多可包含五個圖層。此外，您只能將層與 [部署為 .zip 封存檔](configuration-function-zip.md) 的 Lambda 函數搭配使用。對於[定義為容器映像](images-create.md)的函數，您可以在建立容器映像時封裝偏好的執行期和所有程式碼相依項。如需詳細資訊，請參閱 AWS 運算部落格的[在容器映像中使用 Lambda 圖層和擴展功能](https://aws.amazon.com/blogs/compute/working-with-lambda-layers-and-extensions-in-container-images/)。

**Topics**
+ [如何使用層](#lambda-layers-overview)
+ [層和層的版本](#lambda-layer-versions)
+ [封裝層內容](packaging-layers.md)
+ [在 Lambda 中建立和刪除層](creating-deleting-layers.md)
+ [為函數新增層](adding-layers.md)
+ [AWS CloudFormation 與圖層搭配使用](layers-cfn.md)
+ [AWS SAM 與圖層搭配使用](layers-sam.md)

## 如何使用層
<a name="lambda-layers-overview"></a>

若要建立層，請將相依項封裝到 .zip 檔案中，方法類似於您[建立一般部署套件](configuration-function-zip.md)的方式。更具體來說，建立和使用層的一般程序包括以下三個步驟：
+ **首先，封裝層內容。**這表示您必須建立一個 .zip 封存檔。如需更多詳細資訊，請參閱 [封裝層內容](packaging-layers.md)。
+ **接著，在 Lambda 中建立層。**如需更多詳細資訊，請參閱 [在 Lambda 中建立和刪除層](creating-deleting-layers.md)。
+ **將層新增到您的函數中。**如需更多詳細資訊，請參閱 [為函數新增層](adding-layers.md)。

## 層和層的版本
<a name="lambda-layer-versions"></a>

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

每個層版本皆由唯一的 Amazon Resource Name (ARN) 進行識別。向函式新增層時，必須指定要使用的層的確切版本 (例如 `arn:aws:lambda:us-east-1:123456789012:layer:my-layer:{{1}}`)。