封裝層內容 - AWS Lambda

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

封裝層內容

Lambda 層是含有補充程式碼或資料的 .zip 封存檔。層通常具備程式庫相依性、自訂執行期或組態檔案。

本節會說明如何正確封裝層內容。若要進一步了解有關層的概念性資訊以及您可能會考慮使用的原因,請參閱 使用層管理 Lambda 相依項

建立層的第一步是將所有層內容綁定至 .zip 封存檔。由於 Lambda 函數是在 Amazon Linux 上執行,因此您的層內容必須能夠在 Linux 環境中編譯和建置。

為了確保您的 layer 內容在 Linux 環境中正常運作,我們建議您使用 Docker 之類的工具建立 layer 內容。

每個 Lambda 執行時間的層路徑

將層新增至函數時,Lambda 會將層內容載入該執行環境的 /opt 目錄。在每一次 Lambda 執行期中,PATH 變數已包含 /opt 目錄中的特定資料夾路徑。為了確保 Lambda 取得您的 layer 內容,您的 layer .zip 檔案應該在下列其中一個資料夾路徑中具有其相依性:

執行期 路徑

Node.js

nodejs/node_modules

nodejs/node18/node_modules (NODE_PATH)

nodejs/node20/node_modules (NODE_PATH)

nodejs/node22/node_modules (NODE_PATH)

Python

python

python/lib/python3.x/site-packages (網站目錄)

Java

java/lib (CLASSPATH)

Ruby

ruby/gems/3.3.0 (GEM_PATH)

ruby/lib (RUBYLIB)

所有執行時間

bin (PATH)

lib (LD_LIBRARY_PATH)

下列範例展示如何在圖層 .zip 封存中建構資料夾。

Node.js
範例 適用於 Node.js 的 AWS X-Ray SDK 檔案結構
xray-sdk.zip └ nodejs/node_modules/aws-xray-sdk
Python
python/              # Required top-level directory
└── requests/
└── boto3/
└── numpy/
└── (dependencies of the other packages)
Ruby
範例 JSON gem 的檔案結構
json.zip └ ruby/gems/3.3.0/ | build_info | cache | doc | extensions | gems | └ json-2.1.0 └ specifications └ json-2.1.0.gemspec
Java
範例 Jackson JAR 檔案的檔案結構
layer_content.zip └ java └ lib └ jackson-core-2.17.0.jar └ <other potential dependencies> └ ...
All
範例 JQ 程式庫的檔案結構
jq.zip └ bin/jq

如需封裝、建立和新增層的語言特定說明,請參閱下列頁面:

我們建議不要使用 layer 來管理以 Go 和 Rust 撰寫之 Lambda 函數的相依性。這是因為以這些語言編寫的 Lambda 函數會編譯為單一可執行檔,您在部署函數時提供給 Lambda。此可執行檔包含經過編譯的函數程式碼及其所有相依項。使用層不僅會使程序複雜化,還會導致冷啟動時間增加,因為函數需要在初始化階段期間將額外的組件載入記憶體。

若要搭配 Go 和 Rust Lambda 函數使用外部相依性,請直接將其包含在部署套件中。