Arbeiten mit Ebenen für Python Lambda-Funktionen - AWS Lambda

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Arbeiten mit Ebenen für Python Lambda-Funktionen

Verwenden Sie Lambda-Ebenen, um Code und Abhängigkeiten zu verpacken, 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:

  1. 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.

  2. Erstellen Sie die Ebene in Lambda.

  3. Fügen Sie die Ebene zu Ihren Funktionen hinzu.

In diesem Thema wird erklärt, wie Sie eine Python-Ebene erstellen und sie an eine Lambda-Funktion anhängen.

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 den Layer mit derselben Python-Version, die Sie für die Lambda-Funktion verwenden möchten. Wenn Sie Ihren Layer beispielsweise mit Python 3.13 erstellen, verwenden Sie die Python 3.13-Laufzeit für Ihre Funktion.

  • Ihre ZIP-Datei muss ein python Verzeichnis auf der Stammebene enthalten.

  • Die Pakete in Ihrem Layer müssen mit Linux kompatibel sein. Lambda-Funktionen laufen auf Amazon Linux.

Sie können Layer erstellen, die entweder Python-Bibliotheken von Drittanbietern enthalten, die mit installiert pip wurden (z. B. requests oderpandas), oder Ihre eigenen Python-Module und -Pakete.

Um eine Ebene mit Pip-Paketen zu erstellen
  1. Wählen Sie eine der folgenden Methoden, um pip Pakete in das erforderliche Verzeichnis der obersten Ebene () python/ zu installieren:

    pip install

    Für reine Python-Pakete (wie Requests oder boto3):

    pip install requests -t python/

    Einige Python-Pakete, wie NumPy Pandas, enthalten kompilierte C-Komponenten. Wenn Sie eine Ebene mit diesen Paketen auf macOS oder Windows erstellen, müssen Sie möglicherweise diesen Befehl verwenden, um ein Linux-kompatibles Rad zu installieren:

    pip install numpy --platform manylinux2014_x86_64 --only-binary=:all: -t python/

    Weitere Hinweise zur Arbeit mit Python-Paketen, die kompilierte Komponenten enthalten, finden Sie unterZIP-Bereitstellungspakete mit nativen Bibliotheken erstellen.

    requirements.txt

    Mithilfe einer requirements.txt Datei können Sie Paketversionen verwalten und konsistente Installationen sicherstellen.

    Beispiel requirements.txt
    requests==2.31.0 boto3==1.37.34 numpy==1.26.4

    Wenn Ihre requirements.txt Datei nur reine Python-Pakete enthält (wie Requests oder boto3):

    pip install -r requirements.txt -t python/

    Einige Python-Pakete, wie NumPy Pandas, enthalten kompilierte C-Komponenten. Wenn Sie eine Ebene mit diesen Paketen auf macOS oder Windows erstellen, müssen Sie möglicherweise diesen Befehl verwenden, um ein Linux-kompatibles Rad zu installieren:

    pip install -r requirements.txt --platform manylinux2014_x86_64 --only-binary=:all: -t python/

    Weitere Hinweise zur Arbeit mit Python-Paketen, die kompilierte Komponenten enthalten, finden Sie unterZIP-Bereitstellungspakete mit nativen Bibliotheken erstellen.

  2. Komprimieren Sie den Inhalt des python Verzeichnisses.

    zip -r layer.zip python/

    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) verwenden, um Pakete zu installieren, wird Ihre Verzeichnisstruktur anders sein (z. B.python/lib/python3.x/site-packages). Solange Ihre ZIP-Datei das python Verzeichnis auf der Stammebene enthält, kann Lambda Ihre Pakete finden und importieren.

Um eine Ebene mit Ihrem eigenen Code zu erstellen
  1. Erstellen Sie das erforderliche Verzeichnis auf oberster Ebene für Ihre Ebene:

    mkdir python
  2. Erstellen Sie Ihre Python-Module im python Verzeichnis. Das folgende Beispielmodul validiert Bestellungen, indem es bestätigt, dass 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) }
  3. Den Inhalt des python Verzeichnisses komprimieren.

    zip -r layer.zip python/

    Die Verzeichnisstruktur Ihrer ZIP-Datei sollte wie folgt aussehen:

    python/     # Required top-level directory
    └── validator.py
  4. Importieren und verwenden Sie die Module in Ihrer Funktion wie bei jedem Python-Paket. Beispiel:

    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' })

    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 Ihren Layer entweder mit der AWS CLI oder der Lambda-Konsole veröffentlichen.

AWS CLI

Führen Sie den publish-layer-version AWS CLI Befehl aus, um die Lambda-Schicht zu erstellen:

aws lambda publish-layer-version \ --layer-name my-layer \ --zip-file fileb://layer.zip \ --compatible-runtimes python3.13

Der Parameter compatible runtimes ist optional. Wenn angegeben, verwendet Lambda diesen Parameter, um Ebenen in der Lambda-Konsole zu filtern.

Console
So erstellen Sie eine Ebene (Konsole)
  1. Öffnen Sie die Seite Ebenen der Lambda-Konsole.

  2. Wählen Sie Create Layer (Ebene erstellen) aus.

  3. Wählen Sie „.zip-Datei hochladen“ und laden Sie dann das zuvor erstellte ZIP-Archiv hoch.

  4. (Optional) Wählen Sie unter Kompatible Laufzeiten die Python-Laufzeit aus, die der Python-Version entspricht, mit der Sie Ihren Layer erstellt haben.

  5. Wählen Sie Erstellen aus.

Fügen Sie den Layer zu Ihrer Funktion hinzu

AWS CLI

Führen Sie den update-function-configuration AWS CLI Befehl aus, um die Ebene an Ihre Funktion anzuhängen. Verwenden Sie für den --layers Parameter den Layer-ARN. Der ARN muss die Version angeben (z. B.arn:aws:lambda:us-east-1:123456789012:layer:my-layer:1). Weitere Informationen finden Sie unter Ebenen und Ebenenversionen.

aws lambda update-function-configuration \ --function-name my-function \ --cli-binary-format raw-in-base64-out \ --layers "arn:aws:lambda:us-east-1:123456789012:layer:my-layer:1"
Console
Um einer Funktion eine Ebene hinzuzufügen
  1. Öffnen Sie die Seite Funktionen der Lambda-Konsole.

  2. Wählen Sie die Funktion aus.

  3. Blättern Sie nach unten bis zum Abschnitt Ebenen und wählen Sie dann Eine Ebene hinzufügen.

  4. Wählen Sie unter Ebene auswählen die Option Benutzerdefinierte Ebenen und wählen Sie dann Ihre Ebene aus.

    Anmerkung

    Wenn Sie bei der Erstellung des Layers keine kompatible Runtime hinzugefügt haben, wird Ihr Layer hier nicht aufgeführt. Sie können stattdessen den Layer-ARN angeben.

  5. Wählen Sie Hinzufügen aus.

Beispiel-App

Weitere Beispiele für die Verwendung von Lambda-Layern finden Sie in der Layer-Python-Beispielanwendung im AWS Lambda Developer Guide-Repository. GitHub Diese Anwendung umfasst zwei Ebenen, die Python-Bibliotheken enthalten. Nachdem Sie die Ebenen erstellt haben, können Sie die entsprechenden Funktionen bereitstellen und aufrufen, um sicherzustellen, dass die Ebenen erwartungsgemäß funktionieren.