本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
針對 Python Lambda 函數使用層
使用 Lambda 層來封裝您要在多個函數之間重複使用的程式碼和相依性。層通常具備程式庫相依性、自訂執行期或組態檔案。建立層包含三個一般步驟:
-
封裝層內容。這表示建立 .zip 封存檔,其中包含您要在函數中使用的相依項。
-
在 Lambda 中建立層。
-
將層新增至函數中。
本主題說明如何建立 Python layer 並將其連接至 Lambda 函數。
封裝層內容
若要建立 layer,請將套件綁定到符合下列要求的 .zip 檔案封存中:
-
使用您計劃用於 Lambda 函數的相同 Python 版本建置 layer。例如,如果您使用 Python 3.13 建置 layer,請使用適用於函數的 Python 3.13 執行時間。
-
您的 .zip 檔案必須包含根層級的
python
目錄。 -
層中的套件必須與 Linux 相容。Lambda 函數會在 Amazon Linux 上執行。
您可以建立層,其中包含與 pip
(例如 requests
或 pandas
) 一起安裝的第三方 Python 程式庫,或是您自己的 Python 模組和套件。
使用 pip 套件建立圖層
-
選擇下列其中一種方法,將
pip
套件安裝到所需的頂層目錄 (python/
): -
壓縮
python
目錄的內容。zip -r layer.zip python/
.zip 檔案的目錄結構看起來應該如下所示:
python/
# Required top-level directory └── requests/ └── boto3/ └── numpy/ └── (dependencies of the other packages)注意
如果您使用 Python 虛擬環境 (venv) 來安裝套件,您的目錄結構將會不同 (例如,
python/lib/python3.
)。只要 .zip 檔案在根層級包含x
/site-packagespython
目錄,Lambda 就可以尋找和匯入套件。
使用您自己的程式碼建立 layer
-
為您的 layer 建立所需的頂層目錄:
mkdir python
-
在
python
目錄中建立您的 Python 模組。下列範例模組透過確認訂單包含必要資訊來驗證訂單。範例 自訂模組:https://validator.py
import json def validate_order(order_data): """Validates an order and returns formatted data.""" required_fields = ['product_id', 'quantity'] # Check required fields missing_fields = [field for field in required_fields if field not in order_data] if missing_fields: raise ValueError(f"Missing required fields: {', '.join(missing_fields)}") # Validate quantity quantity = order_data['quantity'] if not isinstance(quantity, int) or quantity < 1: raise ValueError("Quantity must be a positive integer") # Format and return the validated data return { 'product_id': str(order_data['product_id']), 'quantity': quantity, 'shipping_priority': order_data.get('priority', 'standard') } def format_response(status_code, body): """Formats the API response.""" return { 'statusCode': status_code, 'body': json.dumps(body) }
-
壓縮
python
目錄的內容。zip -r layer.zip python/
.zip 檔案的目錄結構看起來應該如下所示:
python/
# Required top-level directory └── validator.py -
在您的函數中,匯入並使用模組,就像使用任何 Python 套件一樣。範例:
from validator import validate_order, format_response
import json def lambda_handler(event, context): try: # Parse the order data from the event body order_data = json.loads(event.get('body', '{}')) # Validate and format the order validated_order = validate_order(order_data) return format_response(200, { 'message': 'Order validated successfully', 'order': validated_order }) except ValueError as e: return format_response(400, { 'error': str(e) }) except Exception as e: return format_response(500, { 'error': 'Internal server error' })您可以使用下列測試事件來叫用 函數:
{ "body": "{\"product_id\": \"ABC123\", \"quantity\": 2, \"priority\": \"express\"}" }
預期的回應:
{ "statusCode": 200, "body": "{\"message\": \"Order validated successfully\", \"order\": {\"product_id\": \"ABC123\", \"quantity\": 2, \"shipping_priority\": \"express\"}}" }
在 Lambda 中建立 layer
您可以使用 AWS CLI 或 Lambda 主控台發佈 layer。
將 layer 新增至函數
範例應用程式
如需如何使用 Lambda 層的更多範例,請參閱《 AWS Lambda 開發人員指南 GitHub 儲存庫》中的 layer-python