Arbeiten mit Ebenen für Python Lambda-Funktionen
Verwenden Sie Lambda-Ebenen, um Code und Abhängigkeiten zu bündeln, die Sie für mehrere Funktionen wiederverwenden möchten. Ebenen enthalten üblicherweise Bibliotheksabhängigkeiten, eine benutzerdefinierte Laufzeit oder Konfigurationsdateien. Das Erstellen einer Ebene umfasst drei allgemeine Schritte:
-
Verpacken Ihres Ebeneninhalts. Dies bedeutet, dass Sie ein .zip-Dateiarchiv erstellen, das die Abhängigkeiten enthält, die Sie in Ihren Funktionen verwenden möchten.
-
Erstellen Sie die Ebene in Lambda.
-
Fügen Sie die Ebene zu Ihren Funktionen hinzu.
Themen
Verpacken Ihres Ebeneninhalts
Um eine Ebene zu erstellen, bündeln Sie Ihre Pakete in einem ZIP-Dateiarchiv, das die folgenden Anforderungen erfüllt:
-
Erstellen Sie die Ebene mithilfe derselben Version von Python, die Sie für die Lambda-Funktion verwenden möchten. Wenn Sie Ihre Ebene beispielsweise mit Python 3.13 erstellen, verwenden Sie die Laufzeit Python 3.13 für Ihre Funktion.
-
Ihre ZIP-Datei muss ein
python-Verzeichnis auf der Stammebene enthalten. -
Die Pakete in Ihrer Ebene müssen mit Linux kompatibel sein. Lambda-Funktionen werden auf Amazon Linux ausgeführt.
Sie können Ebenen erstellen, die entweder mit pip installierte Python-Bibliotheken von Drittanbietern (wie requests oder pandas) oder Ihre eigenen Python-Module und -Pakete enthalten.
So erstellen Sie eine Ebene mit pip-Paketen
-
Wählen Sie eine der folgenden Methoden, um
pip-Pakete in das erforderliche Verzeichnis der obersten Ebene (python/) zu installieren: -
Zippen Sie den Inhalt des
python-Verzeichnisses.Die Verzeichnisstruktur Ihrer ZIP-Datei sollte wie folgt aussehen:
python/# Required top-level directory └── requests/ └── boto3/ └── numpy/ └── (dependencies of the other packages)Anmerkung
Wenn Sie eine virtuelle Python-Umgebung (venv) zur Installation von Paketen verwenden, sieht Ihre Verzeichnisstruktur anders aus (zum Beispiel
python/lib/python3.). Solange Ihre ZIP-Datei dasx/site-packagespython-Verzeichnis auf der Stammebene enthält, kann Lambda Ihre Pakete finden und importieren.
So erstellen Sie eine Ebene mithilfe Ihres eigenen Codes
-
Erstellen Sie das erforderliche Verzeichnis der obersten Ebene für Ihre Ebene:
mkdir python -
Erstellen Sie Ihre Python-Module im
python-Verzeichnis. Das folgende Beispielmodul validiert Bestellungen, indem es überprüft, ob sie die erforderlichen Informationen enthalten.Beispiel Benutzerdefiniertes Modul: 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) } -
Zippen Sie den Inhalt des
python-Verzeichnisses.Die Verzeichnisstruktur Ihrer ZIP-Datei sollte wie folgt aussehen:
python/# Required top-level directory └── validator.py -
Importieren und verwenden Sie die Module in Ihrer Funktion wie bei jedem anderen Python-Paket. Beispiel:
from validator import validate_order, format_responseimport 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' })Sie können das folgende Testereignis verwenden, um die Funktion aufzurufen:
{ "body": "{\"product_id\": \"ABC123\", \"quantity\": 2, \"priority\": \"express\"}" }Erwartete Antwort:
{ "statusCode": 200, "body": "{\"message\": \"Order validated successfully\", \"order\": {\"product_id\": \"ABC123\", \"quantity\": 2, \"shipping_priority\": \"express\"}}" }
Erstellen Sie die Ebene in Lambda
Sie können Ihre Ebene entweder über die AWS CLI oder die Lambda-Konsole veröffentlichen.
Fügen Sie die Ebene zu Ihrer Funktion hinzu
Beispiel-App
Weitere Beispiele für die Verwendung von Lambda-Ebenen finden Sie in der Beispielanwendung layer-python