本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
透過 使用 Lambda 層提高效率 AWS SAM
使用 AWS SAM,您可以在無伺服器應用程式中包含圖層。 AWS Lambda 圖層可讓您將程式碼從 Lambda 函數擷取到 Lambda 圖層,然後可用於多個 Lambda 函數。這樣做可讓您減少部署套件的大小、將核心函數邏輯與相依性分開,以及跨多個函數共用相依性。如需層的詳細資訊,請參閱《 AWS Lambda 開發人員指南》中的 Lambda 層。
本主題提供有關下列項目的資訊:
-
在應用程式中包含圖層
-
如何在本機快取層
如需建置自訂 layer 的資訊,請參閱 在 中建置 Lambda 層 AWS SAM。
在應用程式中包含圖層
若要在您的應用程式中包含圖層,請使用 AWS::Serverless::Function 資源類型的 Layers 屬性。
以下是包含 layer 的 Lambda 函數的範例 AWS SAM 範本:
ServerlessFunction: Type: AWS::Serverless::Function Properties: CodeUri: . Handler: my_handler Runtime: Python3.7 Layers: - <LayerVersion ARN>
如何在本機快取層
當您使用其中一個sam local命令叫用函數時,函數的 layer 套件會下載並在本機主機上快取。
下表顯示不同作業系統的預設快取目錄位置。
| 作業系統 | Location |
|---|---|
| Windows 7 | C:\Users\<user>\AppData\Roaming\AWS SAM |
| Windows 8 | C:\Users\<user>\AppData\Roaming\AWS SAM |
| Windows 10 | C:\Users\<user>\AppData\Roaming\AWS SAM |
| macOS | ~/.aws-sam/layers-pkg |
| Unix | ~/.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