

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

# 透過 使用 Lambda 層提高效率 AWS SAM
<a name="serverless-sam-cli-layers"></a>

使用 AWS SAM，您可以在無伺服器應用程式中包含圖層。 AWS Lambda 圖層可讓您將程式碼從 Lambda 函數擷取到 Lambda 圖層，然後可用於多個 Lambda 函數。這樣做可讓您減少部署套件的大小、將核心函數邏輯與相依性分開，以及跨多個函數共用相依性。如需層的詳細資訊，請參閱《 *AWS Lambda 開發人員指南*》中的 [Lambda 層](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html)。

本主題提供有關下列項目的資訊：
+ 在應用程式中包含圖層
+ 如何在本機快取層

如需建置自訂 layer 的資訊，請參閱 [在 中建置 Lambda 層 AWS SAM](building-layers.md)。

## 在應用程式中包含圖層
<a name="including-layers"></a>

若要在您的應用程式中包含圖層，請使用 [AWS::Serverless::Function](sam-resource-function.md) 資源類型的 `Layers` 屬性。

以下是包含 layer 的 Lambda 函數的範例 AWS SAM 範本：

```
ServerlessFunction:
  Type: AWS::Serverless::Function
  Properties:
    CodeUri: .
    Handler: my_handler
    Runtime: Python3.7
    Layers:
        - <LayerVersion ARN>
```

## 如何在本機快取層
<a name="local-testing-with-layers"></a>

當您使用其中一個`sam local`命令叫用函數時，函數的 layer 套件會下載並在本機主機上快取。

下表顯示不同作業系統的預設快取目錄位置。


****  

| 作業系統 | Location | 
| --- | --- | 
| Windows 7 | C:\$1Users\$1<user>\$1AppData\$1Roaming\$1AWS SAM | 
| Windows 8 | C:\$1Users\$1<user>\$1AppData\$1Roaming\$1AWS SAM | 
| Windows 10 | C:\$1Users\$1<user>\$1AppData\$1Roaming\$1AWS SAM | 
| macOS | \$1/.aws-sam/layers-pkg | 
| Unix | \$1/.aws-sam/layers-pkg | 

快取套件之後， AWS SAM CLI會將圖層疊加到用來叫用函數的 Docker 映像上。 AWS SAM CLI 會產生其建置的映像名稱，以及快取中保留的 LayerVersions。您可以在以下章節中找到結構描述的詳細資訊。

若要檢查重疊圖層，請執行下列命令，在您要檢查的映像中啟動 bash 工作階段：

```
docker run -it --entrypoint=/bin/bash samcli/lambda:<Tag following the schema outlined in Docker Image Tag Schema> -i
```

**Layer 快取目錄名稱結構描述**

假設範本中定義的 LayerVersionArn， AWS SAM CLI會從 ARN 擷取 LayerName 和版本。它會建立目錄，將 layer 內容放置在名為 的 中`LayerName-Version-<first 10 characters of sha256 of ARN>`。

範例：

```
ARN = arn:aws:lambda:us-west-2:111111111111:layer:myLayer:1
Directory name = myLayer-1-926eeb5ff1
```

**Docker Image 標籤結構描述**

若要計算唯一圖層雜湊，請將所有唯一圖層名稱與 '-' 分隔符號結合，採用 SHA256 雜湊，然後採用前 10 個字元。

範例：

```
ServerlessFunction:
  Type: AWS::Serverless::Function
  Properties:
    CodeUri: .
    Handler: my_handler
    Runtime: Python3.7
    Layers:
        - arn:aws:lambda:us-west-2:111111111111:layer:myLayer:1
        - arn:aws:lambda:us-west-2:111111111111:layer:mySecondLayer:1
```

唯一名稱的運算方式與 Layer Caching Directory 名稱結構描述相同：

```
arn:aws:lambda:us-west-2:111111111111:layer:myLayer:1 = myLayer-1-926eeb5ff1
arn:aws:lambda:us-west-2:111111111111:layer:mySecondLayer:1 = mySecondLayer-1-6bc1022bdf
```

若要計算唯一圖層雜湊，請將所有唯一圖層名稱與 '-' 分隔符號結合，採用 sha256 雜湊，然後採用前 25 個字元：

```
myLayer-1-926eeb5ff1-mySecondLayer-1-6bc1022bdf = 2dd7ac5ffb30d515926aef
```

然後將此值與函數的執行時間和架構結合，並以 '-' 為分隔符號：

```
python3.7-x86_64-2dd7ac5ffb30d515926aefffd
```