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.
Bereitstellen von Python-Lambda-Funktionen mit Container-Images
Es gibt drei Möglichkeiten, ein Container-Image für eine Python-Lambda-Funktion zu erstellen:
-
Verwenden eines AWS Basis-Images für Python
Die AWS -Basis-Images sind mit einer Sprachlaufzeit, einem Laufzeitschnittstellen-Client zur Verwaltung der Interaktion zwischen Lambda und Ihrem Funktionscode und einem Laufzeitschnittstellen-Emulator für lokale Tests vorinstalliert.
-
Es wird ein AWS reines Betriebssystem-Basis-Image verwendet
AWS Basis-Images nur für Betriebssysteme
enthalten eine Amazon Linux-Distribution und den Runtime-Interface-Emulator . Diese Images werden häufig verwendet, um Container-Images für kompilierte Sprachen wie Go und Rust sowie für eine Sprache oder Sprachversion zu erstellen, für die Lambda kein Basis-Image bereitstellt, wie Node.js 19. Sie können reine OS-Basis-Images auch verwenden, um eine benutzerdefinierte Laufzeit zu implementieren. Um das Image mit Lambda kompatibel zu machen, müssen Sie den Laufzeitschnittstellen-Client für Python in das Image aufnehmen. -
Es wird ein AWS Nicht-Basis-Image verwendet
Sie können auch ein alternatives Basis-Image aus einer anderen Container-Registry verwenden. Sie können auch ein von Ihrer Organisation erstelltes benutzerdefiniertes Image verwenden. Um das Image mit Lambda kompatibel zu machen, müssen Sie den Laufzeitschnittstellen-Client für Python in das Image aufnehmen.
Tipp
Um die Zeit zu reduzieren, die benötigt wird, bis Lambda-Container-Funktionen aktiv werden, siehe die Docker-Dokumentation unter Verwenden mehrstufiger Builds
Auf dieser Seite wird erklärt, wie Sie Container-Images für Lambda erstellen, testen und bereitstellen.
Themen
AWS Basisbilder für Python
AWS stellt die folgenden Basis-Images für Python bereit:
Tags | Laufzeit | Betriebssystem | Dockerfile | Ablehnung |
---|---|---|---|---|
3.12 |
Python 3.12 | Amazon Linux 2023 | Dockerfile für Python 3.12 auf GitHub |
Nicht geplant |
3.11 |
Python 3.11 | Amazon Linux 2 | Dockerfile für Python 3.11 auf GitHub |
Nicht geplant |
3.10 |
Python 3.10 | Amazon Linux 2 | Dockerfile für Python 3.10 auf GitHub |
Nicht geplant |
3.9 |
Python 3.9 | Amazon Linux 2 | Dockerfile für Python 3.9 auf GitHub |
Nicht geplant |
3.8 |
Python 3.8 | Amazon Linux 2 | Dockerfile für Python 3.8 auf GitHub |
14. Oktober 2024 |
ECRAmazon-Repository: gallery.ecr.aws/lambda/python
Die Basis-Images von Python 3.12 und höher basieren auf dem minimalen Container-Image von Amazon Linux 2023. Die Python 3.8-3.11-Basis-Images basieren auf dem Amazon Linux 2-Image. AL2023-basierte Images bieten mehrere Vorteile gegenüber Amazon Linux 2, darunter einen geringeren Bereitstellungsaufwand und aktualisierte Versionen von Bibliotheken wie. glibc
AL2023-basierte Images verwenden microdnf
(symbolisiert alsdnf
) als Paketmanager anstelle vonyum
, dem Standard-Paketmanager in Amazon Linux 2. microdnf
ist eine eigenständige Implementierung von. dnf
Eine Liste der Pakete, die in AL2 023-basierten Images enthalten sind, finden Sie in den Spalten Minimal Container unter Comparing packages installed on Amazon Linux 2023 Container Images. Weitere Informationen zu den Unterschieden zwischen AL2 023 und Amazon Linux 2 finden Sie unter Einführung in die Amazon Linux 2023 Runtime for AWS Lambda
Anmerkung
Um AL2 023-basierte Images lokal auszuführen, auch mit AWS Serverless Application Model (AWS SAM), müssen Sie Docker-Version 20.10.10 oder höher verwenden.
Suchpfad für Abhängigkeiten in den Basis-Images
Wenn Sie in Ihrem Code eine import
-Anweisung verwenden, durchsucht die Python-Laufzeit die Verzeichnisse in ihrem Suchpfad, bis sie das Modul oder Paket findet. Standardmäßig durchsucht die Laufzeit zuerst das Verzeichnis {LAMBDA_TASK_ROOT}
. Wenn Sie eine Version einer in der Laufzeit enthaltenen Bibliothek in Ihr Image einfügen, hat Ihre Version Vorrang vor der Version, die in der Laufzeit enthalten ist.
Andere Schritte im Suchpfad hängen davon ab, welche Version des Lambda-Basis-Images für Python Sie verwenden:
-
Python 3.11 und neuer: In der Laufzeit enthaltene Bibliotheken und über pip installierte Bibliotheken werden im Verzeichnis
/var/lang/lib/python3.11/site-packages
installiert. Dieses Verzeichnis hat im Suchpfad Vorrang vor/var/runtime
. Sie können das überschreiben, SDK indem Sie pip verwenden, um eine neuere Version zu installieren. Sie können pip verwenden, um zu überprüfen, ob die in Runtime enthaltene Datei SDK und ihre Abhängigkeiten mit allen Paketen, die Sie installieren, kompatibel sind. -
Python 3.8-3.10: In der Laufzeit enthaltene Bibliotheken werden im Verzeichnis
/var/runtime
installiert. Über pip installierte Bibliotheken werden im Verzeichnis/var/lang/lib/python3.x/site-packages
installiert. Das Verzeichnis/var/runtime
hat im Suchpfad Vorrang vor/var/lang/lib/python3.x/site-packages
.
Sie können den vollständigen Suchpfad für Ihre Lambda-Funktion sehen, indem Sie den folgenden Codeausschnitt hinzufügen.
import sys search_path = sys.path print(search_path)
Verwenden eines AWS Basis-Images für Python
Zur Durchführung der Schritte in diesem Abschnitt benötigen Sie Folgendes:
-
Docker
(Mindestversion 20.10.10 für Python 3.12 und spätere Basis-Images) -
Python
So erstellen Sie ein Container-Image aus einem AWS Basis-Image für Python
-
Erstellen Sie ein Verzeichnis für das Projekt und wechseln Sie dann zu diesem Verzeichnis.
mkdir example cd example
-
Erstellen Sie eine neue Datei mit dem Namen
lambda_function.py
. Sie können der Datei zum Testen den folgenden Beispielfunktionscode hinzufügen oder Ihren eigenen verwenden.Beispiel Python-Funktion
import sys def handler(event, context): return 'Hello from AWS Lambda using Python' + sys.version + '!'
-
Erstellen Sie eine neue Datei mit dem Namen
requirements.txt
. Wenn Sie den Beispielfunktionscode aus dem vorherigen Schritt verwenden, können Sie die Datei leer lassen, da es keine Abhängigkeiten gibt. Andernfalls listen Sie jede benötigte Bibliothek auf. So sollte beispielsweise Ihrerequirements.txt
aussehen, wenn Ihre Funktion AWS SDK for Python (Boto3) verwendet:Beispiel requirements.txt
boto3
-
Erstellen Sie eine neue Docker-Datei mit der folgenden Konfiguration:
-
Stellen Sie die
FROM
Eigenschaft auf die URIdes Basis-Images ein. -
Verwenden Sie den COPY Befehl, um den Funktionscode und die Laufzeitabhängigkeiten in eine von Lambda definierte Umgebungsvariable zu
{LAMBDA_TASK_ROOT}
kopieren. -
Legen Sie das
CMD
-Argument auf den Lambda-Funktionshandler fest.
Beachten Sie, dass das Dockerfile-Beispiel keine Anweisung enthält. USER
Wenn Sie ein Container-Image auf Lambda bereitstellen, definiert Lambda automatisch einen Standard-Linux-Benutzer mit den geringsten Rechten. Dies unterscheidet sich vom Standardverhalten von Docker, bei dem standardmäßig der Benutzer verwendet wird, wenn keine Anweisung bereitgestellt wird. root
USER
Beispiel Dockerfile
FROM public.ecr.aws/lambda/python:3.12 # Copy requirements.txt COPY requirements.txt ${LAMBDA_TASK_ROOT} # Install the specified packages RUN pip install -r requirements.txt # Copy function code COPY lambda_function.py ${LAMBDA_TASK_ROOT} # Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile) CMD [ "lambda_function.handler" ]
-
-
Erstellen Sie Ihr Docker-Image mit dem docker build
-Befehl. Das folgende Beispiel benennt das Bild in docker-image
und gibt ihm dentest
Tag. docker build --platform linux/amd64 -t
docker-image
:test
.Anmerkung
Der Befehl gibt die
--platform linux/amd64
-Option an, um sicherzustellen, dass Ihr Container mit der Lambda-Ausführungsumgebung kompatibel ist, unabhängig von der Architektur des Entwicklungsrechners. Wenn Sie beabsichtigen, eine Lambda-Funktion mithilfe der ARM64 Befehlssatzarchitektur zu erstellen, müssen Sie den Befehl so ändern, dass er stattdessen die--platform linux/arm64
Option verwendet.
-
Starten Sie Ihr Docker-Image mit dem docker run-Befehl. In diesem Beispiel ist
docker-image
der Image-Name undtest
der Tag.docker run --platform linux/amd64 -p 9000:8080 --read-only
docker-image
:test
Dieser Befehl führt das Image als Container aus und erstellt einen lokalen Endpunkt bei
localhost:9000/2015-03-31/functions/function/invocations
.Anmerkung
Wenn Sie das Docker-Image für die ARM64 Befehlssatzarchitektur erstellt haben, stellen Sie sicher, dass Sie stattdessen die
--platform linux/
Option verwenden.arm64
--platform linux/
amd64
-
Veröffentlichen Sie in einem neuen Terminalfenster ein Ereignis an den lokalen Endpunkt.
-
Die Container-ID erhalten.
docker ps
-
Verwenden Sie den Befehl docker kill
, um den Container zu anzuhalten. Ersetzen Sie in diesem Befehl 3766c4ab331c
durch die Container-ID aus dem vorherigen Schritt.docker kill
3766c4ab331c
Um das Bild auf Amazon hochzuladen ECR und die Lambda-Funktion zu erstellen
-
Führen Sie den get-login-password
Befehl aus, um den Docker bei Ihrer ECR Amazon-Registrierung CLI zu authentifizieren. -
Setzen Sie den
--region
Wert auf den AWS-Region Ort, an dem Sie das ECR Amazon-Repository erstellen möchten. -
111122223333
Ersetzen Sie es durch Ihre AWS-Konto ID.
aws ecr get-login-password --region
us-east-1
| docker login --username AWS --password-stdin111122223333
.dkr.ecr.us-east-1
.amazonaws.com -
-
Erstellen Sie mit dem ECR Befehl create-repository ein Repository
in Amazon. aws ecr create-repository --repository-name
hello-world
--regionus-east-1
--image-scanning-configuration scanOnPush=true --image-tag-mutability MUTABLEAnmerkung
Das ECR Amazon-Repository muss sich im selben Format AWS-Region wie die Lambda-Funktion befinden.
Wenn erfolgreich, sehen Sie eine Antwort wie diese:
{ "repository": { "repositoryArn": "arn:aws:ecr:us-east-1:111122223333:repository/hello-world", "registryId": "111122223333", "repositoryName": "hello-world", "repositoryUri": "111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world", "createdAt": "2023-03-09T10:39:01+00:00", "imageTagMutability": "MUTABLE", "imageScanningConfiguration": { "scanOnPush": true }, "encryptionConfiguration": { "encryptionType": "AES256" } } }
-
Kopieren Sie das
repositoryUri
aus der Ausgabe im vorherigen Schritt. -
Führen Sie den Befehl docker tag
aus, um Ihr lokales Image als neueste Version in Ihrem ECR Amazon-Repository zu taggen. In diesem Befehl gilt Folgendes: -
docker-image:test
ist der Name und das TagIhres Docker-Images. Dies sind der Imagename und das Tag, die Sie im docker build
Befehl angegeben haben. -
Ersetzen Sie
<ECRrepositoryUri>
durch denrepositoryUri
, den Sie kopiert haben. Stellen Sie sicher, dass Sie:latest
am Ende des angebenURI.
docker tag docker-image:test
<ECRrepositoryUri>
:latestBeispiel:
docker tag
docker-image
:test
111122223333
.dkr.ecr.us-east-1
.amazonaws.com/hello-world
:latest -
-
Führen Sie den Befehl docker push
aus, um Ihr lokales Image im ECR Amazon-Repository bereitzustellen. Stellen Sie sicher, dass Sie es :latest
am Ende des Repositorys URI einschließen.docker push
111122223333
.dkr.ecr.us-east-1
.amazonaws.com/hello-world
:latest -
Erstellen Sie eine Ausführungsrolle für die Funktion, wenn Sie noch keine haben. Im nächsten Schritt benötigen Sie den Amazon-Ressourcennamen (ARN) der Rolle.
-
So erstellen Sie die Lambda-Funktion: Geben Sie für
ImageUri
das Repository URI von früher an. Stellen Sie sicher, dass Sie:latest
am Ende des angebenURI.aws lambda create-function \ --function-name
hello-world
\ --package-type Image \ --code ImageUri=111122223333
.dkr.ecr.us-east-1
.amazonaws.com/hello-world
:latest \ --rolearn:aws:iam::111122223333:role/lambda-ex
Anmerkung
Sie können eine Funktion mit einem Bild in einem anderen AWS Konto erstellen, sofern sich das Bild in derselben Region wie die Lambda-Funktion befindet. Weitere Informationen finden Sie unter ECRKontoübergreifende Amazon-Berechtigungen.
-
Die Funktion aufrufen.
aws lambda invoke --function-name
hello-world
response.jsonDas Ergebnis sollte ungefähr wie folgt aussehen:
{ "ExecutedVersion": "$LATEST", "StatusCode": 200 }
-
Um die Ausgabe der Funktion zu sehen, überprüfen Sie die
response.json
-Datei.
Um den Funktionscode zu aktualisieren, müssen Sie das Image erneut erstellen, das neue Image in das ECR Amazon-Repository hochladen und dann den update-function-code
Lambda löst das Image-Tag in einen bestimmten Image-Digest auf. Das heißt, wenn Sie das Image-Tag, das zur Bereitstellung der Funktion verwendet wurde, auf ein neues Image in Amazon verweisenECR, aktualisiert Lambda die Funktion nicht automatisch, um das neue Image zu verwenden.
Um das neue Image für dieselbe Lambda-Funktion bereitzustellen, müssen Sie den update-function-code--publish
Option eine neue Version der Funktion unter Verwendung des aktualisierten Container-Images.
aws lambda update-function-code \ --function-name
hello-world
\ --image-uri111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
\ --publish
Verwenden eines alternativen Basis-Images mit dem Laufzeitschnittstellen-Client
Wenn Sie ein OS-Basis-Image oder ein alternatives Basis-Image verwenden, müssen Sie den Laufzeitschnittstellen-Client in das Image einbinden. Der Laufzeitschnittstellen-Client erweitert die Verwendung der Lambda-Laufzeit API für benutzerdefinierte Laufzeiten, die die Interaktion zwischen Lambda und Ihrem Funktionscode verwaltet.
Installieren Sie den Laufzeitschnittstellen-Client für Python
pip install awslambdaric
Sie können den Python-Runtime-Interface-Client
Das folgende Beispiel zeigt, wie ein Container-Image für Python mit einem AWS Nicht-Base-Image erstellt wird. Das Beispiel-Dockerfile verwendet ein offizielles Python-Basis-Image. Das Dockerfile enthält den Laufzeitschnittstellen-Client für Python.
Zur Durchführung der Schritte in diesem Abschnitt benötigen Sie Folgendes:
Um ein Container-Image aus einem AWS Nicht-Basis-Image zu erstellen
-
Erstellen Sie ein Verzeichnis für das Projekt und wechseln Sie dann zu diesem Verzeichnis.
mkdir example cd example
-
Erstellen Sie eine neue Datei mit dem Namen
lambda_function.py
. Sie können der Datei zum Testen den folgenden Beispielfunktionscode hinzufügen oder Ihren eigenen verwenden.Beispiel Python-Funktion
import sys def handler(event, context): return 'Hello from AWS Lambda using Python' + sys.version + '!'
-
Erstellen Sie eine neue Datei mit dem Namen
requirements.txt
. Wenn Sie den Beispielfunktionscode aus dem vorherigen Schritt verwenden, können Sie die Datei leer lassen, da es keine Abhängigkeiten gibt. Andernfalls listen Sie jede benötigte Bibliothek auf. So sollte beispielsweise Ihrerequirements.txt
aussehen, wenn Ihre Funktion AWS SDK for Python (Boto3) verwendet:Beispiel requirements.txt
boto3
-
Erstellen Sie eine neue Docker-Datei. Das folgende Dockerfile verwendet ein offizielles Python-Basis-Image anstelle eines AWS -Basis-Images. Das Dockerfile enthält den Laufzeitschnittstellen-Client
, der das Image mit Lambda kompatibel macht. Die folgende Beispiel-Docker-Datei verwendet eine mehrstufige Entwicklung . -
Legen Sie die
FROM
-Eigenschaft auf das Basis-Image fest. -
Legen Sie
ENTRYPOINT
auf das Modul fest, das der Docker-Container beim Start ausführen soll. In diesem Fall ist das Modul der Laufzeitschnittstellen-Client. -
Legen Sie
CMD
auf den Lambda-Funktionshandler fest.
Beachten Sie, dass das Dockerfile-Beispiel keine Anweisung enthält. USER
Wenn Sie ein Container-Image auf Lambda bereitstellen, definiert Lambda automatisch einen Standard-Linux-Benutzer mit den geringsten Rechten. Dies unterscheidet sich vom Standardverhalten von Docker, bei dem standardmäßig der Benutzer verwendet wird, wenn keine Anweisung bereitgestellt wird. root
USER
Beispiel Dockerfile
# Define custom function directory ARG FUNCTION_DIR="/function" FROM
python:3.12
as build-image # Include global arg in this stage of the build ARG FUNCTION_DIR # Copy function code RUN mkdir -p ${FUNCTION_DIR} COPY . ${FUNCTION_DIR} # Install the function's dependencies RUN pip install \ --target ${FUNCTION_DIR} \ awslambdaric # Use a slim version of the base Python image to reduce the final image size FROMpython:3.12-slim
# Include global arg in this stage of the build ARG FUNCTION_DIR # Set working directory to function root directory WORKDIR ${FUNCTION_DIR} # Copy in the built dependencies COPY --from=build-image ${FUNCTION_DIR} ${FUNCTION_DIR} # Set runtime interface client as default command for the container runtime ENTRYPOINT [ "/usr/local/bin/python", "-m", "awslambdaric
" ] # Pass the name of the function handler as an argument to the runtime CMD [ "lambda_function.handler
" ] -
-
Erstellen Sie Ihr Docker-Image mit dem docker build
-Befehl. Das folgende Beispiel benennt das Bild in docker-image
und gibt ihm dentest
Tag. docker build --platform linux/amd64 -t
docker-image
:test
.Anmerkung
Der Befehl gibt die
--platform linux/amd64
-Option an, um sicherzustellen, dass Ihr Container mit der Lambda-Ausführungsumgebung kompatibel ist, unabhängig von der Architektur des Entwicklungsrechners. Wenn Sie beabsichtigen, eine Lambda-Funktion mithilfe der ARM64 Befehlssatzarchitektur zu erstellen, müssen Sie den Befehl so ändern, dass er stattdessen die--platform linux/arm64
Option verwendet.
Verwenden Sie den Laufzeit-Schnittstellen-Emulator
Installieren des Laufzeitschnittstellen-Emulators auf Ihrem lokalen Computer
-
Führen Sie in Ihrem Projektverzeichnis den folgenden Befehl aus, um den Runtime-Interface-Emulator (x86-64-Architektur) herunterzuladen GitHub und auf Ihrem lokalen Computer zu installieren.
-
Starten Sie Ihr Docker-Image mit dem docker run-Befehl. Beachten Sie Folgendes:
-
docker-image
ist der Image-Name undtest
ist das Tag. -
/usr/local/bin/python -m awslambdaric lambda_function.handler
ist derENTRYPOINT
gefolgt von demCMD
aus Ihrem Dockerfile.
Dieser Befehl führt das Image als Container aus und erstellt einen lokalen Endpunkt bei
localhost:9000/2015-03-31/functions/function/invocations
.Anmerkung
Wenn Sie das Docker-Image für die ARM64 Befehlssatzarchitektur erstellt haben, stellen Sie sicher, dass Sie die
--platform linux/
Option anstelle von verwenden.arm64
--platform linux/
amd64
-
-
Veröffentlichen Sie ein Ereignis auf dem lokalen Endpunkt.
-
Die Container-ID erhalten.
docker ps
-
Verwenden Sie den Befehl docker kill
, um den Container zu anzuhalten. Ersetzen Sie in diesem Befehl 3766c4ab331c
durch die Container-ID aus dem vorherigen Schritt.docker kill
3766c4ab331c
Um das Bild auf Amazon hochzuladen ECR und die Lambda-Funktion zu erstellen
-
Führen Sie den get-login-password
Befehl aus, um den Docker bei Ihrer ECR Amazon-Registrierung CLI zu authentifizieren. -
Setzen Sie den
--region
Wert auf den AWS-Region Ort, an dem Sie das ECR Amazon-Repository erstellen möchten. -
111122223333
Ersetzen Sie es durch Ihre AWS-Konto ID.
aws ecr get-login-password --region
us-east-1
| docker login --username AWS --password-stdin111122223333
.dkr.ecr.us-east-1
.amazonaws.com -
-
Erstellen Sie mit dem ECR Befehl create-repository ein Repository
in Amazon. aws ecr create-repository --repository-name
hello-world
--regionus-east-1
--image-scanning-configuration scanOnPush=true --image-tag-mutability MUTABLEAnmerkung
Das ECR Amazon-Repository muss sich im selben Format AWS-Region wie die Lambda-Funktion befinden.
Wenn erfolgreich, sehen Sie eine Antwort wie diese:
{ "repository": { "repositoryArn": "arn:aws:ecr:us-east-1:111122223333:repository/hello-world", "registryId": "111122223333", "repositoryName": "hello-world", "repositoryUri": "111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world", "createdAt": "2023-03-09T10:39:01+00:00", "imageTagMutability": "MUTABLE", "imageScanningConfiguration": { "scanOnPush": true }, "encryptionConfiguration": { "encryptionType": "AES256" } } }
-
Kopieren Sie das
repositoryUri
aus der Ausgabe im vorherigen Schritt. -
Führen Sie den Befehl docker tag
aus, um Ihr lokales Image als neueste Version in Ihrem ECR Amazon-Repository zu taggen. In diesem Befehl gilt Folgendes: -
docker-image:test
ist der Name und das TagIhres Docker-Images. Dies sind der Imagename und das Tag, die Sie im docker build
Befehl angegeben haben. -
Ersetzen Sie
<ECRrepositoryUri>
durch denrepositoryUri
, den Sie kopiert haben. Stellen Sie sicher, dass Sie:latest
am Ende des angebenURI.
docker tag docker-image:test
<ECRrepositoryUri>
:latestBeispiel:
docker tag
docker-image
:test
111122223333
.dkr.ecr.us-east-1
.amazonaws.com/hello-world
:latest -
-
Führen Sie den Befehl docker push
aus, um Ihr lokales Image im ECR Amazon-Repository bereitzustellen. Stellen Sie sicher, dass Sie es :latest
am Ende des Repositorys URI einschließen.docker push
111122223333
.dkr.ecr.us-east-1
.amazonaws.com/hello-world
:latest -
Erstellen Sie eine Ausführungsrolle für die Funktion, wenn Sie noch keine haben. Im nächsten Schritt benötigen Sie den Amazon-Ressourcennamen (ARN) der Rolle.
-
So erstellen Sie die Lambda-Funktion: Geben Sie für
ImageUri
das Repository URI von früher an. Stellen Sie sicher, dass Sie:latest
am Ende des angebenURI.aws lambda create-function \ --function-name
hello-world
\ --package-type Image \ --code ImageUri=111122223333
.dkr.ecr.us-east-1
.amazonaws.com/hello-world
:latest \ --rolearn:aws:iam::111122223333:role/lambda-ex
Anmerkung
Sie können eine Funktion mit einem Bild in einem anderen AWS Konto erstellen, sofern sich das Bild in derselben Region wie die Lambda-Funktion befindet. Weitere Informationen finden Sie unter ECRKontoübergreifende Amazon-Berechtigungen.
-
Die Funktion aufrufen.
aws lambda invoke --function-name
hello-world
response.jsonDas Ergebnis sollte ungefähr wie folgt aussehen:
{ "ExecutedVersion": "$LATEST", "StatusCode": 200 }
-
Um die Ausgabe der Funktion zu sehen, überprüfen Sie die
response.json
-Datei.
Um den Funktionscode zu aktualisieren, müssen Sie das Image erneut erstellen, das neue Image in das ECR Amazon-Repository hochladen und dann den update-function-code
Lambda löst das Image-Tag in einen bestimmten Image-Digest auf. Das heißt, wenn Sie das Image-Tag, das zur Bereitstellung der Funktion verwendet wurde, auf ein neues Image in Amazon verweisenECR, aktualisiert Lambda die Funktion nicht automatisch, um das neue Image zu verwenden.
Um das neue Image für dieselbe Lambda-Funktion bereitzustellen, müssen Sie den update-function-code--publish
Option eine neue Version der Funktion unter Verwendung des aktualisierten Container-Images.
aws lambda update-function-code \ --function-name
hello-world
\ --image-uri111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
\ --publish
Ein Beispiel für das Erstellen eines Python-Images aus einem Alpine-Basis-Image finden Sie unter Unterstützung für Container-Images für Lambda