使用 Lambda 層來提高效率 AWS SAM - AWS Serverless Application Model

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

使用 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