本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Lambda 層來提高效率 AWS SAM
使用 AWS SAM,您可以在無伺服器應用程式中包含層。 AWS Lambda 層可讓您從 Lambda 函數擷取程式碼至 Lambda 層,然後可用於多個 Lambda 函數。這樣做可以減少部署套件的大小、將核心函數邏輯與相依性分開,以及在多個函式之間共用相依性。如需有關圖層的詳細資訊,請參閱AWS Lambda 開發人員指南中的 Lambda 層。
本主題提供下列相關資訊:
-
在應用程式中包含圖層
-
如何在本機快取圖層
如需建置自訂圖層的資訊,請參閱在中建置 Lambda 圖層 AWS SAM。
在應用程式中包含圖層
若要在應用程式中包含圖層,請使用AWS::Serverless::Function資源類型的Layers
屬性。
以下是包含 Lambda 函數的 AWS SAM 範例範本,其中包含圖層:
ServerlessFunction: Type: AWS::Serverless::Function Properties: CodeUri: . Handler: my_handler Runtime: Python3.7 Layers: - <LayerVersion ARN>
如何在本機快取圖層
當您使用其中一個sam local
命令叫用函數時,函數的 Layer 套件會下載並快取到本機主機上。
下表顯示不同作業系統的預設快取目錄位置。
作業系統 | 位置 |
---|---|
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 SAMCLI疊加到用來叫用函數的 Docker 影像上。會 AWS SAMCLI產生它所建置的影像名稱,以及保留在快取中的影像名稱。 LayerVersions 您可以在以下各節中找到有關結構描述的更多詳細資訊。
要檢查覆蓋的圖層,請執行以下命令以在要檢查的圖像中啟動 bash 會話:
docker run -it --entrypoint=/bin/bash samcli/lambda:<Tag following the schema outlined in Docker Image Tag Schema> -i
圖層快取目錄名稱綱要
鑑於您 LayerVersionArn 的模板中定義了一個,從 ARN 中 AWS SAMCLI提取 LayerName 和版本。它創建一個目錄,以將圖層內容放置在命名中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
碼頭圖片標籤架構
若要計算唯一圖層雜湊值,請將所有唯一的圖層名稱與「-」分隔符合使用,取 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
唯一名稱的計算方式與「層級快取目錄」名稱綱要相同:
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