Wählen Sie Ihre Cookie-Einstellungen aus

Wir verwenden essentielle Cookies und ähnliche Tools, die für die Bereitstellung unserer Website und Services erforderlich sind. Wir verwenden Performance-Cookies, um anonyme Statistiken zu sammeln, damit wir verstehen können, wie Kunden unsere Website nutzen, und Verbesserungen vornehmen können. Essentielle Cookies können nicht deaktiviert werden, aber Sie können auf „Anpassen“ oder „Ablehnen“ klicken, um Performance-Cookies abzulehnen.

Wenn Sie damit einverstanden sind, verwenden AWS und zugelassene Drittanbieter auch Cookies, um nützliche Features der Website bereitzustellen, Ihre Präferenzen zu speichern und relevante Inhalte, einschließlich relevanter Werbung, anzuzeigen. Um alle nicht notwendigen Cookies zu akzeptieren oder abzulehnen, klicken Sie auf „Akzeptieren“ oder „Ablehnen“. Um detailliertere Entscheidungen zu treffen, klicken Sie auf „Anpassen“.

Arbeiten mit Ebenen für Python Lambda-Funktionen

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

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.

Eine Lambda-Ebene ist ein ZIP-Dateiarchiv mit ergänzendem Code oder ergänzenden Daten. 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.

Dieses Thema enthält Schritte und Anleitungen zum ordnungsgemäßen Verpacken und Erstellen einer Python-Lambda-Ebene mit externen Bibliotheksabhängigkeiten.

Voraussetzungen

Um die Schritte in diesem Abschnitt ausführen zu können, müssen Sie über folgende Voraussetzungen verfügen:

In diesem Thema verweisen wir auf die layer-pythonBeispielanwendung im awsdocs-Repository GitHub . Diese Anwendung enthält Skripts, mit denen die Abhängigkeiten heruntergeladen und die Ebenen generiert werden. Die Anwendung enthält auch entsprechende Funktionen, die Abhängigkeiten von den Ebenen nutzen. Nachdem Sie eine Ebene erstellt haben, können Sie die entsprechende Funktion bereitstellen und aufrufen, um zu überprüfen, ob alles ordnungsgemäß funktioniert. Die Laufzeit der Schicht muss mit der Laufzeit der Funktion kompatibel sein. Wenn Sie beispielsweise die Python 3.13-Laufzeit für Ihre Funktion verwenden, muss Ihr Layer auch mit Python 3.13 kompatibel sein.

In der layer-python-Beispielanwendung gibt es zwei Beispiele:

  • Das erste Beispiel beinhaltet das Verpacken der requests Bibliothek in eine Lambda-Ebene. Das layer/-Verzeichnis enthält die Skripten zur Generierung der Ebene. Das function/-Verzeichnis enthält eine Beispielfunktion, mit deren Hilfe getestet werden kann, ob die Ebene funktioniert. Der größte Teil dieses Tutorials beschäftigt sich mit der Erstellung und Verpackung dieser Ebene.

  • Das zweite Beispiel beinhaltet das Verpacken der numpy Bibliothek in eine Lambda-Ebene. Das layer-numpy/-Verzeichnis enthält die Skripten zur Generierung der Ebene. Das function-numpy/-Verzeichnis enthält eine Beispielfunktion, mit deren Hilfe getestet werden kann, ob die Ebene funktioniert. Ein Beispiel dafür, wie Sie diese Ebene erstellen und verpacken, finden Sie unterArbeiten mit manylinux-Wheel-Verteilungen.

Python-Layer-Kompatibilität mit Amazon Linux

Der erste Schritt beim Erstellen einer Ebene besteht darin, den gesamten Ebeneninhalt in einem ZIP-Dateiarchiv zu bündeln. Da Lambda-Funktionen unter Amazon Linux ausgeführt werden, muss Ihr Ebeneninhalt in einer Linux-Umgebung kompiliert und erstellt werden können.

In Python sind die meisten Pakete zusätzlich zur Quelldistribution als Wheels (.whl-Dateien) verfügbar. Jedes Wheel ist eine Art von gebauter Distribution, die eine bestimmte Kombination von Python-Versionen, Betriebssystemen und Maschinenbefehlssätzen unterstützt.

Wheels sind nützlich, um sicherzustellen, dass Ihre Ebene mit Amazon Linux kompatibel ist. Wenn Sie Ihre Abhängigkeiten herunterladen, laden Sie nach Möglichkeit das Universal Wheel herunter. (Standardmäßig installiert pip das Universal Wheel, wenn eines vorhanden ist). Das Universal Wheel enthält any als Plattform-Tag, was darauf hinweist, dass es mit allen Plattformen, einschließlich Amazon Linux, kompatibel ist.

Im folgenden Beispiel packen Sie die requests-Bibliothek in eine Lambda-Ebene. Die requests-Bibliothek ist ein Beispiel für ein Paket, das als Universal Wheel verfügbar ist.

Nicht alle Python-Pakete werden als Universal Wheels vertrieben. numpy hat zum Beispiel mehrere Wheel-Verteilungen, von denen jede eine andere Gruppe von Plattformen unterstützt. Laden Sie für solche Pakete die manylinux-Distribution herunter, um die Kompatibilität mit Amazon Linux sicherzustellen. Eine ausführliche Anleitung zum Verpacken solcher Ebenen finden Sie unter Arbeiten mit manylinux-Wheel-Verteilungen.

In seltenen Fällen ist ein Python-Paket möglicherweise nicht als Wheel verfügbar. Wenn nur die Quelldistribution (sdist) existiert, empfehlen wir, Ihre Abhängigkeiten in einer Docker-Umgebung zu installieren und zu verpacken, die auf dem Amazon Linux 2023-Basiscontainer-Image basiert. Wir empfehlen diesen Ansatz auch, wenn Sie Ihre eigenen, in anderen Sprachen wie C/C++ geschriebenen Bibliotheken einbinden möchten. Dieser Ansatz ahmt die Lambda-Ausführungsumgebung in Docker nach und stellt sicher, dass Ihre Abhängigkeiten von Nicht-Python-Paketen mit Amazon Linux kompatibel sind.

Ebenenpfade für Python-Laufzeiten

Wenn Sie einer Funktion eine Ebene hinzufügen, lädt Lambda den Ebeneninhalt in das Verzeichnis /opt der Ausführungsumgebung. Für jede Lambda-Laufzeit enthält die Variable PATH bereits spezifische Ordnerpfade innerhalb des Verzeichnisses /opt. Um sicherzustellen, dass Lambda Ihren Layer-Inhalt aufnimmt, sollte Ihre Layer-.zip-Datei ihre Abhängigkeiten in den folgenden Ordnerpfaden haben:

  • python

  • python/lib/python3.x/site-packages

Die resultierende Ebenen-.zip-Datei, die Sie in diesem Tutorial erstellen, hat beispielsweise die folgende Verzeichnisstruktur:

layer_content.zip └ python └ lib └ python3.13 └ site-packages └ requests └ <other_dependencies> (i.e. dependencies of the requests package) └ ...

Die requests-Bibliothek befindet sich korrekt im python/lib/python3.13/site-packages-Verzeichnis. Dadurch wird sichergestellt, dass Lambda die Bibliothek bei Funktionsaufrufen finden kann.

Verpacken des Ebeneninhalts

In diesem Beispiel verpacken Sie die Python requests-Bibliothek in einer Ebenen-.zip-Datei. Führen Sie die folgenden Schritte aus, um den Ebeneninhalt zu installieren und zu verpacken.

So installieren und verpacken Sie Ihren Ebeneninhalt
  1. Klonen Sie das aws-lambda-developer-guide GitHub Repo, das den Beispielcode enthält, den Sie im Verzeichnis benötigen. sample-apps/layer-python

    git clone https://github.com/awsdocs/aws-lambda-developer-guide.git
  2. Wechseln Sie in das Verzeichnis layer der layer-python-Beispielanwendung. Dieses Verzeichnis enthält die Skripts, die Sie verwenden, um die Ebene ordnungsgemäß zu erstellen und zu verpacken.

    cd aws-lambda-developer-guide/sample-apps/layer-python/layer
  3. Überprüfen der requirements.txt Datei. In dieser Datei werden die Abhängigkeiten definiert, die Sie in die Ebene aufnehmen wollen, nämlich die requests-Bibliothek. Sie können diese Datei so aktualisieren, dass sie alle Abhängigkeiten enthält, die Sie in Ihre eigene Ebene aufnehmen möchten.

    Beispiel requirements.txt
    requests==2.31.0
  4. Stellen Sie sicher, dass Sie berechtigt sind, beide Skripte auszuführen.

    chmod 744 1-install.sh && chmod 744 2-package.sh
  5. Führen Sie das Skript 1-install.sh mit dem folgenden Befehl aus.

    ./1-install.sh

    Dieses Skript verwendet venv, um eine virtuelle Python-Umgebung namens create_layer zu erstellen. Anschließend werden alle erforderlichen Abhängigkeiten in das create_layer/lib/python3.11/site-packages-Verzeichnis installiert.

    Beispiel 1-install.sh
    python3.13 -m venv create_layer source create_layer/bin/activate pip install -r requirements.txt
  6. Führen Sie das Skript 2-package.sh mit dem folgenden Befehl aus.

    ./2-package.sh

    Dieses Skript kopiert den Inhalt aus dem create_layer/lib-Verzeichnis in ein neues Verzeichnis mit dem Namen python. Anschließend wird der Inhalt des Verzeichnisses python in eine Datei namens layer_content.zip gepackt. Dies ist die ZIP-Datei für Ihre Ebene. Sie können die Datei entpacken und überprüfen, ob sie die richtige Dateistruktur enthält, wie im Abschnitt Ebenenpfade für Python-Laufzeiten gezeigt.

    Beispiel 2-package.sh
    mkdir python cp -r create_layer/lib python/ zip -r layer_content.zip python

Erstellen der Ebene

In diesem Abschnitt nehmen Sie die layer_content.zip-Datei, die Sie im vorherigen Abschnitt generiert haben und laden sie als Lambda-Ebene hoch. Sie können eine Ebene mit der AWS Management Console oder der Lambda-API über die AWS Command Line Interface (AWS CLI) hochladen. Wenn Sie Ihre Layer-.zip-Datei hochladen, geben Sie python3.13 im folgenden PublishLayerVersion AWS CLI Befehl die kompatible Laufzeit und die kompatible arm64 Architektur an.

aws lambda publish-layer-version --layer-name python-requests-layer \ --zip-file fileb://layer_content.zip \ --compatible-runtimes python3.13 \ --compatible-architectures "arm64"

Notieren Sie sich aus der Antwort den LayerVersionArn, der wie arn:aws:lambda:us-east-1:123456789012:layer:python-requests-layer:1 aussieht. Sie benötigen diesen Amazon-Ressourcennamen (ARN) im nächsten Schritt dieses Tutorials, wenn Sie die Ebene zu Ihrer Funktion hinzufügen.

Hinzufügen der Ebene zur Funktion

In diesem Abschnitt stellen Sie eine Beispiel-Lambda-Funktion bereit, die die requests-Bibliothek in ihrem Funktionscode verwendet und fügen dann die Ebene hinzu. Um die Funktion bereitzustellen, benötigen Sie eine Ausführungsrolle. Wenn Sie noch keine Ausführungsrolle haben, folgen Sie den Schritten im zusammenklappbaren Abschnitt.

So erstellen Sie eine Ausführungsrolle
  1. Öffnen Sie die Seite Roles (Rollen) in der IAM-Konsole.

  2. Wählen Sie Rolle erstellen.

  3. Erstellen Sie eine Rolle mit den folgenden Eigenschaften.

    • Trusted entity (Vertrauenswürdige Entität)Lambda.

    • BerechtigungenAWSLambdaBasicExecutionRole.

    • Role name (Name der Rollelambda-role.

    Die AWSLambdaBasicExecutionRoleRichtlinie verfügt über die Berechtigungen, die die Funktion benötigt, um Protokolle in Logs zu CloudWatch schreiben.

So erstellen Sie eine Ausführungsrolle
  1. Öffnen Sie die Seite Roles (Rollen) in der IAM-Konsole.

  2. Wählen Sie Rolle erstellen.

  3. Erstellen Sie eine Rolle mit den folgenden Eigenschaften.

    • Trusted entity (Vertrauenswürdige Entität)Lambda.

    • BerechtigungenAWSLambdaBasicExecutionRole.

    • Role name (Name der Rollelambda-role.

    Die AWSLambdaBasicExecutionRoleRichtlinie verfügt über die Berechtigungen, die die Funktion benötigt, um Protokolle in Logs zu CloudWatch schreiben.

Der Lambda-Funktionscode importiert die requests-Bibliothek, stellt eine einfache HTTP-Anfrage und gibt dann den Statuscode und den Hauptteil zurück.

import requests def lambda_handler(event, context): print(f"Version of requests library: {requests.__version__}") request = requests.get('https://api.github.com/') return { 'statusCode': request.status_code, 'body': request.text }
So stellen Sie die Lambda-Funktion bereit
  1. Navigieren Sie zum function/ Verzeichnis . Wenn Sie sich gerade in dem layer/-Verzeichnis befinden, führen Sie den folgenden Befehl aus:

    cd ../function
  2. Erstellen Sie mit dem folgenden Befehl ein Bereitstellungspaket in Form einer .zip-Datei:

    zip my_deployment_package.zip lambda_function.py
  3. Bereitstellen der Funktion. Ersetzen Sie im folgenden AWS CLI Befehl den --role Parameter durch den ARN Ihrer Ausführungsrolle:

    aws lambda create-function --function-name python_function_with_layer \ --runtime python3.13 \ --architectures "arm64" \ --handler lambda_function.lambda_handler \ --role arn:aws:iam::123456789012:role/lambda-role \ --zip-file fileb://my_deployment_package.zip
  4. Fügen Sie als Nächstes die Ebene zu Ihrer Funktion hinzu. Ersetzen Sie im folgenden AWS CLI Befehl den --layers Parameter durch den ARN der Layer-Version, den Sie zuvor notiert haben:

    aws lambda update-function-configuration --function-name python_function_with_layer \ --cli-binary-format raw-in-base64-out \ --layers "arn:aws:lambda:us-east-1:123456789012:layer:python-requests-layer:1"
  5. Versuchen Sie abschließend, Ihre Funktion mit dem folgenden AWS CLI Befehl aufzurufen:

    aws lambda invoke --function-name python_function_with_layer \ --cli-binary-format raw-in-base64-out \ --payload '{ "key": "value" }' response.json

    Die Ausgabe sollte in etwa wie folgt aussehen:

    { "StatusCode": 200, "ExecutedVersion": "$LATEST" }

    Die response.json-Ausgabedatei enthält Details zur Antwort.

Sie können jetzt die Ressourcen, die Sie für dieses Tutorial erstellt haben, löschen, es sei denn, Sie möchten sie behalten. Durch das Löschen von AWS Ressourcen, die Sie nicht mehr verwenden, vermeiden Sie unnötige Kosten für Ihre AWS-Konto.

So löschen Sie die Lambda-Ebene
  1. Öffnen Sie die Seite Ebenen der Lambda-Konsole.

  2. Wählen Sie die Ebene aus, die Sie erstellt haben.

  3. Klicken Sie auf Löschen und dann erneut auf Löschen.

So löschen Sie die Lambda-Funktion:
  1. Öffnen Sie die Seite Funktionen der Lambda-Konsole.

  2. Wählen Sie die Funktion aus, die Sie erstellt haben.

  3. Wählen Sie Aktionen, Löschen aus.

  4. Geben Sie confirm in das Texteingabefeld ein und wählen Sie Delete (Löschen) aus.

Sie können jetzt die Ressourcen, die Sie für dieses Tutorial erstellt haben, löschen, es sei denn, Sie möchten sie behalten. Durch das Löschen von AWS Ressourcen, die Sie nicht mehr verwenden, vermeiden Sie unnötige Kosten für Ihre AWS-Konto.

So löschen Sie die Lambda-Ebene
  1. Öffnen Sie die Seite Ebenen der Lambda-Konsole.

  2. Wählen Sie die Ebene aus, die Sie erstellt haben.

  3. Klicken Sie auf Löschen und dann erneut auf Löschen.

So löschen Sie die Lambda-Funktion:
  1. Öffnen Sie die Seite Funktionen der Lambda-Konsole.

  2. Wählen Sie die Funktion aus, die Sie erstellt haben.

  3. Wählen Sie Aktionen, Löschen aus.

  4. Geben Sie confirm in das Texteingabefeld ein und wählen Sie Delete (Löschen) aus.

Arbeiten mit manylinux-Wheel-Verteilungen

Manchmal hat ein Paket, das Sie als Abhängigkeit einschließen möchten, kein Universal Wheel (insbesondere kein any-Plattform-Tag). In diesem Fall laden Sie stattdessen das Wheel herunter, das manylinux unterstützt. Dadurch wird sichergestellt, dass Ihre Ebenenbibliotheken mit Amazon Linux kompatibel sind.

numpy ist ein Paket, das kein Universal Wheel hat. Wenn Sie das numpy-Paket in Ihre Ebene einbinden möchten, können Sie die folgenden Beispielschritte ausführen, um Ihre Ebene ordnungsgemäß zu installieren und zu verpacken.

So installieren und verpacken Sie Ihren Ebeneninhalt
  1. Klonen Sie das aws-lambda-developer-guide GitHub Repo, das den Beispielcode enthält, den Sie im sample-apps/layer-python Verzeichnis benötigen.

    git clone https://github.com/awsdocs/aws-lambda-developer-guide.git
  2. Wechseln Sie in das Verzeichnis layer-numpy der layer-python-Beispielanwendung. Dieses Verzeichnis enthält die Skripts, die Sie verwenden, um die Ebene ordnungsgemäß zu erstellen und zu verpacken.

    cd aws-lambda-developer-guide/sample-apps/layer-python/layer-numpy
  3. Überprüfen der requirements.txt Datei. In dieser Datei werden die Abhängigkeiten definiert, die Sie in Ihre Ebene aufnehmen wollen, nämlich die numpy-Bibliothek. Hier geben Sie die URL der manylinux-Wheel-Verteilung an, die mit Python 3.11, Amazon Linux und dem x86_64-Befehlssatz kompatibel ist:

    Beispiel requirements.txt
    https://files.pythonhosted.org/packages/3a/d0/edc009c27b406c4f9cbc79274d6e46d634d139075492ad055e3d68445925/numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
  4. Stellen Sie sicher, dass Sie berechtigt sind, beide Skripte auszuführen.

    chmod 744 1-install.sh && chmod 744 2-package.sh
  5. Führen Sie das Skript 1-install.sh mit dem folgenden Befehl aus.

    ./1-install.sh

    Dieses Skript verwendet venv, um eine virtuelle Python-Umgebung namens create_layer zu erstellen. Anschließend werden alle erforderlichen Abhängigkeiten in das create_layer/lib/python3.11/site-packages-Verzeichnis installiert. Der pip-Befehl ist in diesem Fall anders, da Sie das --platform-Tag als manylinux2014_x86_64 angeben müssen. Damit wird pip angewiesen, das richtige manylinux-Wheel zu installieren, auch wenn Ihr lokaler Rechner macOS oder Windows verwendet.

    Beispiel 1-install.sh
    python3.11 -m venv create_layer source create_layer/bin/activate pip install -r requirements.txt --platform=manylinux2014_x86_64 --only-binary=:all: --target ./create_layer/lib/python3.11/site-packages
  6. Führen Sie das Skript 2-package.sh mit dem folgenden Befehl aus.

    ./2-package.sh

    Dieses Skript kopiert den Inhalt aus dem create_layer/lib-Verzeichnis in ein neues Verzeichnis mit dem Namen python. Anschließend wird der Inhalt des Verzeichnisses python in eine Datei namens layer_content.zip gepackt. Dies ist die ZIP-Datei für Ihre Ebene. Sie können die Datei entpacken und überprüfen, ob sie die richtige Dateistruktur enthält, wie im Abschnitt Ebenenpfade für Python-Laufzeiten gezeigt.

    Beispiel 2-package.sh
    mkdir python cp -r create_layer/lib python/ zip -r layer_content.zip python

Verwenden Sie den folgenden PublishLayerVersion AWS CLI Befehl, um diese Ebene auf Lambda hochzuladen:

aws lambda publish-layer-version --layer-name python-numpy-layer \ --zip-file fileb://layer_content.zip \ --compatible-runtimes python3.11 \ --compatible-architectures "x86_64"

Notieren Sie sich aus der Antwort den LayerVersionArn, der wie arn:aws:lambda:us-east-1:123456789012:layer:python-numpy-layer:1 aussieht. Um zu überprüfen, ob Ihre Ebene wie erwartet funktioniert, stellen Sie die Lambda-Funktion im function-numpy-Verzeichnis bereit.

So stellen Sie die Lambda-Funktion bereit
  1. Navigieren Sie zum function-numpy/ Verzeichnis . Wenn Sie sich gerade in dem layer-numpy/-Verzeichnis befinden, führen Sie den folgenden Befehl aus:

    cd ../function-numpy
  2. Den Funktionscode überprüfen. Die Funktion importiert die numpy-Bibliothek, erstellt ein einfaches numpy-Array und gibt dann einen Dummy-Statuscode und einen Text zurück.

    import json import numpy as np def lambda_handler(event, context): x = np.arange(15, dtype=np.int64).reshape(3, 5) print(x) return { 'statusCode': 200, 'body': json.dumps('Hello from Lambda!') }
  3. Erstellen Sie mit dem folgenden Befehl ein Bereitstellungspaket in Form einer .zip-Datei:

    zip my_deployment_package.zip lambda_function.py
  4. Bereitstellen der Funktion. Ersetzen Sie im folgenden AWS CLI Befehl den --role Parameter durch den ARN Ihrer Ausführungsrolle:

    aws lambda create-function --function-name python_function_with_numpy \ --runtime python3.11 \ --handler lambda_function.lambda_handler \ --role arn:aws:iam::123456789012:role/lambda-role \ --zip-file fileb://my_deployment_package.zip
  5. Fügen Sie als Nächstes die Ebene zu Ihrer Funktion hinzu. Ersetzen Sie im folgenden AWS CLI Befehl den --layers Parameter durch den ARN Ihrer Layer-Version:

    aws lambda update-function-configuration --function-name python_function_with_numpy \ --cli-binary-format raw-in-base64-out \ --layers "arn:aws:lambda:us-east-1:123456789012:layer:python-requests-layer:1"
  6. Versuchen Sie abschließend, Ihre Funktion mit dem folgenden AWS CLI Befehl aufzurufen:

    aws lambda invoke --function-name python_function_with_numpy \ --cli-binary-format raw-in-base64-out \ --payload '{ "key": "value" }' response.json

    Die Ausgabe sollte in etwa wie folgt aussehen:

    { "StatusCode": 200, "ExecutedVersion": "$LATEST" }

    Sie können anhand der Funktionsprotokolle überprüfen, ob der Code das numpy-Array standardmäßig ausgibt.

DatenschutzNutzungsbedingungen für die WebsiteCookie-Einstellungen
© 2025, Amazon Web Services, Inc. oder Tochtergesellschaften. Alle Rechte vorbehalten.