封裝層內容 - AWS Lambda

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

封裝層內容

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

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

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

為確保層內容在 Linux 環境中正常運作,建議使用 Docker 等工具來建立層內容。

每個 Lambda 執行時間的層路徑

將層新增至函數時,Lambda 會將層內容載入該執行環境的 /opt 目錄。在每一次 Lambda 執行期中,PATH 變數已包含 /opt 目錄中的特定資料夾路徑。為確保 Lambda 能夠擷取層內容,層 .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.4.0 (GEM_PATH)

ruby/lib (RUBYLIB)

所有執行時間

bin (PATH)

lib (LD_LIBRARY_PATH)

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

Node.js
範例 適用於 Node.js 的 AWS X-Ray 開發套件的檔案結構
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.4.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

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

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

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