Wie erstelle ich eine Lambda-Layer mithilfe einer simulierten Lambda-Umgebung mit Docker?

Lesedauer: 4 Minute
0

Ich möchte eine AWS-Lambda-Layer erstellen, die mit den Laufzeiten der Zielumgebung kompatibel ist. Wie kann ich das machen?

Kurzbeschreibung

Wenn Sie Lambda-Funktionen entwickeln, wählen Sie zwischen unterstützten Lambda-Laufzeitversionen. Um Lambda-Funktionen und -Layers zu erstellen, die mit bestimmten Laufzeiten kompatibel sind, können Sie einen der folgenden Schritte ausführen:

Weitere Informationen finden Sie unter Erstellen und Teilen von Lambda-Layers.

Lösung

Anmerkung: Wenn Sie beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehler auftreten, stellen Sie sicher, dass Sie die neueste Version von AWS CLI verwenden.

Die folgenden Anweisungen verwenden Python als Programmiersprache und eine Linux-basierte Computerplattform als Beispiel. Passen Sie die Schritte für andere Programmiersprachen und Plattformen entsprechend an.

Installieren Sie Docker auf Ihrem Computer

Falls Sie dies noch nicht getan haben, installieren Sie Docker für Linux, Windows oder macOS auf Ihrem Computer.

Erstellen Sie die entsprechende Verzeichnisstruktur und geben Sie Ihre Abhängigkeiten in der pip-Anforderungsdatei (requirements.txt) an

Weitere Informationen zum Erstellen von Verzeichnisstrukturen finden Sie unter Einbeziehen von Bibliotheksabhängigkeiten in einem Layer. Weitere Informationen zur Angabe von Abhängigkeiten finden Sie unter Anforderungsdateien im pip-Benutzerhandbuch.

Beispiel für eine Verzeichnisstruktur für ein Lambda-Layer, die mit den Python-Versionen 3.6 und 3.8 kompatibel ist

├── requirements.txt
└── python/
    └── lib/
        ├── python3.6/
        │   └── site-packages/
        └── python3.8/
            └── site-packages/

Anmerkung: Die gesamte entpackte Größe der Funktion und allen Layers darf die Größenbeschränkung von 250 MB für entpackte Bereitstellungspakete nicht überschreiten. Weitere Informationen zur Python-Versionsunterstützung in Lambda finden Sie unter Erstellen von Lambda-Funktionen mit Python.

Installieren von Bibliotheksabhängigkeiten in den entsprechenden Unterordnern, basierend auf den Laufzeiten, die Sie in Ihrer Verzeichnisstruktur angegeben haben

Führen Sie den folgenden AWS-CLI-Befehl einmal für jede Laufzeit aus, die Sie in der Verzeichnisstruktur angegeben haben:

Wichtig: Ersetzen Sie 3.6 durch 3.7 oder 3.8, je nachdem, welche kompatiblen Bibliotheken Sie installieren möchten.

docker run -v "$PWD":/var/task "public.ecr.aws/sam/build-python3.6" /bin/sh -c "pip install -r requirements.txt -t python/lib/python3.6/site-packages/; exit"

Erstellen Sie ein .zip-Dateiarchiv für Ihr Layer

Führen Sie den folgenden Befehl aus, um den Ordner python zu komprimieren und das Layer-Paket zu erstellen:

Anmerkung: Sie können mypythonlibs durch einen beliebigen Namen ersetzen.

zip -r mypythonlibs.zip python > /dev/null

Die .zip-Datei wird im Ordner /opt der Lambda-Umgebung entleert. Auf den Ordner /opt kann von Ihrem Lambda-Funktionscode aus zugegriffen werden.

Erstellen oder aktualisieren eines Layer

Führen Sie den folgenden Befehl aus, um Ihren Lambda-Layer entweder zu erstellen oder zu aktualisieren:

Wichtig: Stellen Sie sicher, dass Sie die kompatiblen Laufzeiten einschließen, die Sie zuvor festgelegt haben. Ersetzen Sie mypythonlibs durch den Paketnamen, den Sie im vorherigen Schritt verwendet haben. Ersetzen Sie Meine Python-Bibliotheken durch eine beliebige Beschreibung, die Sie bevorzugen.

aws lambda publish-layer-version --layer-name mypythonlibs --description "My python libs" --zip-file fileb://mypythonlibs.zip --compatible-runtimes "python3.6" "python3.8"

Überprüfen Sie die Ausgabe und kopieren Sie den Amazon-Ressourcennamen (ARN) des Layer. Sie benötigen den ARN des Layer, um den nächsten Schritt abzuschließen.

Aktualisieren Sie Ihre Lambda-Funktionskonfiguration, um den Layer zu verwenden

Führen Sie den folgenden Befehl aus, um Ihre Lambda-Funktionskonfiguration für die Verwendung des Layer zu aktualisieren:

Wichtig: Ersetzen Sie arn:aws:lambda:us-east-2:123456789012:layer:mypythonlibs:1 durch den Layer-ARN.

aws lambda update-function-configuration --layers arn:aws:lambda:us-east-2:123456789012:layer:mypythonlibs:1 --function-name my-function

(Optional) Um die Docker-Images für Ihr Lambda-Paket anstelle einer AWS-SAM-Datei zu verwenden

Anstatt eine AWS-SAM-Datei zu verwenden, können Sie auch die Docker-Images amazon/aws-sam-cli-build-image verwenden, um Ihr Lambda-Paket zu erstellen. Mithilfe der Docker-Images können Sie das Paket erstellen, ohne ein Layer zu erstellen.

1.    Führen Sie den folgenden Befehl aus, um die erforderlichen Versionen Ihrer Abhängigkeiten abzurufen:

Wichtig: Ersetzen Sie 3.6 durch 3.7 oder 3.8, je nachdem, welche kompatiblen Bibliotheken Sie installieren möchten.

docker run -v "$PWD":/var/task "public.ecr.aws/sam/build-python3.6" /bin/sh -c "pip install -r requirements.txt -t libs; exit"

2.    Erstellen Sie ein Lambda-Bereitstellungspaket, das Ihren Funktionscode und die richtigen Bibliotheken enthält.


Weitere Informationen

Warum erhalte ich bei meiner Python (Boto 3)-Lambda-Funktion die Fehler „unknown service“, „parameter validation failed“ oder „object has no attribute“?

Aufbauen von Layers

Verwenden einer beliebigen Programmiersprache und Teilen gemeinsamer Komponenten

Lambda (AWS-CLI-Befehlsreferenz)

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 3 Jahren