本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在中建置 Lambda 圖層 AWS SAM
您可以用 AWS SAM 來建置自訂 Lambda 層。Lambda 層可讓您從 Lambda 函數擷取程式碼,然後可在多個 Lambda 函數中重複使用。只建置 Lambda 層 (而不是建置整個應用程式) 可以透過幾種方式為您帶來好處。它可以幫助您減少部署軟件包的大小,將核心函數邏輯與依賴項分開,並允許您在多個函數之間共享依賴關係。如需層的相關資訊,請參閱AWS Lambda 開發人員指南中的 AWS Lambda 層。
如何在中構建一個 Lambda 層 AWS SAM
注意
您必須先在 AWS SAM 範本中撰寫 Lambda 層,才能建立 Lambda 層。如需執行此作業的資訊和範例,請參閱使用 Lambda 層來提高效率 AWS SAM。
要構建自定義層,請在 AWS Serverless Application Model (AWS SAM)模板文件中聲明它,並包含帶有BuildMethod
條目的Metadata
資源屬性部分。的有效值BuildMethod
是AWS Lambda 執行階段的識別碼,或makefile
。包含一個BuildArchitecture
項目,以指定您的層支援的指令集架構。的有效值BuildArchitecture
為 Lambda 指令集架構。
如果您指定makefile
,請提供自訂 makefile,您可以在其中宣告包含圖層建置命令build-
之表單的建置目標。您的 makefile 負責在必要時編譯層,並將組建加工品複製到工作流程中後續步驟所需的適當位置。makefile 的位置由圖層資源的layer-logical-id
ContentUri
屬性指定,並且必須命名Makefile
。
注意
創建自定義圖層時, AWS Lambda 取決於環境變量來查找圖層代碼。Lambda 執行階段包括將圖層程式碼複製到的/opt
目錄中的路徑。專案的建置成品資料夾結構必須與執行階段預期的資料夾結構相符,才能找到您的自訂圖層程式碼。
例如,對於 Python,您可以將代碼放在python/
子目錄中。對於 NodeJS,您可以將代碼放在子目錄中nodejs/node_modules/
。
如需詳細資訊,請參閱《AWS Lambda 開發人員指南》中的在圖層中包含程式庫相依性。
以下是範例Metadata
資源屬性區段。
Metadata: BuildMethod: python3.8 BuildArchitecture: arm64
注意
如果不包含Metadata
資源屬性部分,則不 AWS SAM 會構建圖層。而是從圖層資源CodeUri
屬性中指定的位置複製組建加工品。如需詳細資訊,請參閱AWS::Serverless::LayerVersion
資源類型的ContentUri內容。
當您包括資Metadata
源屬性區段時,您可以使用sam build
指令將圖層建置為獨立物件或 AWS Lambda 函數的相依性。
-
作為一個獨立的對象。您可能只想要建置圖層物件,例如當您在本機測試圖層的程式碼變更,而不需要建置整個應用程式時。若要獨立建置圖層,請使用指
sam build
令指定圖層資源。layer-logical-id
-
作為 Lambda 函數的依賴關係。當您在相同 AWS SAM 範本檔案的 Lambda 函數
Layers
屬性中包含層的邏輯 ID 時,該層就是該 Lambda 函數的相依性。當該圖層還包含含有BuildMethod
項目的Metadata
資源屬性區段時,您可以透過使用指令建置整個應用程式,或透過使用指sam build
令指定函數資源來建立圖層。sam build
function-logical-id
範例
範本範例 1:針對 Python 3.9 執行階段環境建置圖層
下列範例 AWS SAM 範本會針對 Python 3.9 執行階段環境建置圖層。
Resources: MyLayer: Type: AWS::Serverless::LayerVersion Properties: ContentUri: my_layer CompatibleRuntimes: - python3.9 Metadata: BuildMethod: python3.9 # Required to have AWS SAM build this layer
模板示例 2:使用自定義生成文件構建圖層
下列範例 AWS SAM 範本使用自訂makefile
來建立圖層。
Resources: MyLayer: Type: AWS::Serverless::LayerVersion Properties: ContentUri: my_layer CompatibleRuntimes: - python3.8 Metadata: BuildMethod: makefile
下面makefile
包含構建目標和將要執行的命令。請注意,ContentUri
屬性設定為my_layer
,因此 makefile 必須位於my_layer
子目錄的根目錄中,且檔案名稱必須是。Makefile
另請注意,構建加工品被複製到python/
子目錄中 AWS Lambda ,以便能夠找到層代碼。
build-MyLayer: mkdir -p "$(ARTIFACTS_DIR)/python" cp *.py "$(ARTIFACTS_DIR)/python" python -m pip install -r requirements.txt -t "$(ARTIFACTS_DIR)/python"
示例 sam 構建命令
下列sam build
指令會建置包含Metadata
資源屬性區段的圖層。
# Build the 'layer-logical-id' resource independently
$
sam build
# Build the 'function-logical-id' resource and layers that this function depends onlayer-logical-id
$
sam build
# Build the entire application, including the layers that any function depends onfunction-logical-id
$
sam build