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

Bereitstellen von Python-Lambda-Funktionen mit Container-Images

Fokusmodus
Bereitstellen von Python-Lambda-Funktionen mit Container-Images - 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.

Es gibt drei Möglichkeiten, ein Container-Image für eine Python-Lambda-Funktion zu erstellen:

Tipp

Um die Zeit zu reduzieren, die benötigt wird, bis Lambda-Container-Funktionen aktiv werden, siehe die Docker-Dokumentation unter Verwenden mehrstufiger Builds. Um effiziente Container-Images zu erstellen, folgen Sie den Bewährte Methoden für das Schreiben von Dockerfiles.

Auf dieser Seite wird erklärt, wie Sie Container-Images für Lambda erstellen, testen und bereitstellen.

AWS Basisbilder für Python

AWS stellt die folgenden Basis-Images für Python bereit:

Tags Laufzeit Betriebssystem Dockerfile Ablehnung

3.13

Python 3.13 Amazon Linux 2023 Dockerfile für Python 3.13 auf GitHub

30. Juni 2029

3,12

Python 3.12 Amazon Linux 2023 Dockerfile für Python 3.12 auf GitHub

31. Oktober 2028

3.11

Python 3.11 Amazon Linux 2 Dockerfile für Python 3.11 auf GitHub

30. Juni 2026

3,10

Python 3.10 Amazon Linux 2 Dockerfile für Python 3.10 auf GitHub

30. Juni 2026

3.9

Python 3.9 Amazon Linux 2 Dockerfile für Python 3.9 auf GitHub

3. November 2025

Amazon ECR-Repository: gallery.ecr. aws/lambda/python

Die Basis-Images für Python 3.12 und höher basieren auf dem Amazon Linux 2023 Minimal Container Image. 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. microdnfist 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 im AWS Compute-Blog.

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 SDK außer Kraft setzen, indem Sie pip verwenden, um eine neuere Version zu installieren. Sie können mithilfe von pip überprüfen, ob das in der Laufzeit enthaltene SDK und seine Abhängigkeiten mit allen Paketen kompatibel sind, die Sie installieren.

  • 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:

Zur Durchführung der Schritte in diesem Abschnitt benötigen Sie Folgendes:

So erstellen Sie ein Container-Image aus einem AWS Basis-Image für Python
  1. Erstellen Sie ein Verzeichnis für das Projekt und wechseln Sie dann zu diesem Verzeichnis.

    mkdir example cd example
  2. 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 + '!'
  3. 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 Ihre requirements.txt aussehen, wenn Ihre Funktion AWS SDK for Python (Boto3) verwendet:

    Beispiel requirements.txt
    boto3
  4. Erstellen Sie eine neue Docker-Datei mit der folgenden Konfiguration:

    • Setzen Sie die FROM-Eigenschaft auf den URI des Basis-Images.

    • Verwenden Sie den Befehl COPY, um den Funktionscode und die Laufzeitabhängigkeiten in {LAMBDA_TASK_ROOT}, eine von Lambda definierte Umgebungsvariable zu kopieren.

    • Legen Sie das CMD-Argument auf den Lambda-Funktionshandler fest.

    Beachten Sie, dass das Dockerfile-Beispiel keine USER-Anweisung enthält. Wenn Sie ein Container-Image für Lambda bereitstellen, definiert Lambda automatisch einen Standard-Linux-Benutzer mit Berechtigungen mit geringsten Rechten. Dies unterscheidet sich vom Standardverhalten von Docker, bei dem standardmäßig der root-Benutzer verwendet wird, wenn keine USER-Anweisung bereitgestellt wird.

    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" ]
  5. Erstellen Sie Ihr Docker-Image mit dem docker build-Befehl. Das folgende Beispiel benennt das Bild in docker-image und gibt ihm den test Tag. Um Ihr Image mit Lambda kompatibel zu machen, müssen Sie die --provenance=false Option verwenden.

    docker buildx build --platform linux/amd64 --provenance=false -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.

So erstellen Sie ein Container-Image aus einem AWS Basis-Image für Python
  1. Erstellen Sie ein Verzeichnis für das Projekt und wechseln Sie dann zu diesem Verzeichnis.

    mkdir example cd example
  2. 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 + '!'
  3. 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 Ihre requirements.txt aussehen, wenn Ihre Funktion AWS SDK for Python (Boto3) verwendet:

    Beispiel requirements.txt
    boto3
  4. Erstellen Sie eine neue Docker-Datei mit der folgenden Konfiguration:

    • Setzen Sie die FROM-Eigenschaft auf den URI des Basis-Images.

    • Verwenden Sie den Befehl COPY, um den Funktionscode und die Laufzeitabhängigkeiten in {LAMBDA_TASK_ROOT}, eine von Lambda definierte Umgebungsvariable zu kopieren.

    • Legen Sie das CMD-Argument auf den Lambda-Funktionshandler fest.

    Beachten Sie, dass das Dockerfile-Beispiel keine USER-Anweisung enthält. Wenn Sie ein Container-Image für Lambda bereitstellen, definiert Lambda automatisch einen Standard-Linux-Benutzer mit Berechtigungen mit geringsten Rechten. Dies unterscheidet sich vom Standardverhalten von Docker, bei dem standardmäßig der root-Benutzer verwendet wird, wenn keine USER-Anweisung bereitgestellt wird.

    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" ]
  5. Erstellen Sie Ihr Docker-Image mit dem docker build-Befehl. Das folgende Beispiel benennt das Bild in docker-image und gibt ihm den test Tag. Um Ihr Image mit Lambda kompatibel zu machen, müssen Sie die --provenance=false Option verwenden.

    docker buildx build --platform linux/amd64 --provenance=false -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.

  1. Starten Sie Ihr Docker-Image mit dem docker run-Befehl. In diesem Beispiel ist docker-image der Image-Name und test der Tag.

    docker run --platform linux/amd64 -p 9000:8080 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/arm64 Option verwenden. --platform linux/amd64

  2. Veröffentlichen Sie in einem neuen Terminalfenster ein Ereignis an den lokalen Endpunkt.

    Linux/macOS

    Führen Sie unter Linux oder macOS den folgenden curl-Befehl aus:

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'

    Dieser Befehl ruft die Funktion mit einem leeren Ereignis auf und gibt eine Antwort zurück. Wenn Sie Ihren eigenen Funktionscode anstelle des Beispielfunktionscodes verwenden, wird empfohlen, die Funktion mit einer JSON-Nutzlast aufzurufen. Beispiel:

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{"payload":"hello world!"}'
    PowerShell

    Führen Sie in PowerShell den folgenden Invoke-WebRequest Befehl aus:

    Invoke-WebRequest -Uri "http://localhost:9000/2015-03-31/functions/function/invocations" -Method Post -Body '{}' -ContentType "application/json"

    Dieser Befehl ruft die Funktion mit einem leeren Ereignis auf und gibt eine Antwort zurück. Wenn Sie Ihren eigenen Funktionscode anstelle des Beispielfunktionscodes verwenden, wird empfohlen, die Funktion mit einer JSON-Nutzlast aufzurufen. Beispiel:

    Invoke-WebRequest -Uri "http://localhost:9000/2015-03-31/functions/function/invocations" -Method Post -Body '{"payload":"hello world!"}' -ContentType "application/json"
  3. Die Container-ID erhalten.

    docker ps
  4. 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

  1. Starten Sie Ihr Docker-Image mit dem docker run-Befehl. In diesem Beispiel ist docker-image der Image-Name und test der Tag.

    docker run --platform linux/amd64 -p 9000:8080 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/arm64 Option verwenden. --platform linux/amd64

  2. Veröffentlichen Sie in einem neuen Terminalfenster ein Ereignis an den lokalen Endpunkt.

    Linux/macOS

    Führen Sie unter Linux oder macOS den folgenden curl-Befehl aus:

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'

    Dieser Befehl ruft die Funktion mit einem leeren Ereignis auf und gibt eine Antwort zurück. Wenn Sie Ihren eigenen Funktionscode anstelle des Beispielfunktionscodes verwenden, wird empfohlen, die Funktion mit einer JSON-Nutzlast aufzurufen. Beispiel:

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{"payload":"hello world!"}'
    PowerShell

    Führen Sie in PowerShell den folgenden Invoke-WebRequest Befehl aus:

    Invoke-WebRequest -Uri "http://localhost:9000/2015-03-31/functions/function/invocations" -Method Post -Body '{}' -ContentType "application/json"

    Dieser Befehl ruft die Funktion mit einem leeren Ereignis auf und gibt eine Antwort zurück. Wenn Sie Ihren eigenen Funktionscode anstelle des Beispielfunktionscodes verwenden, wird empfohlen, die Funktion mit einer JSON-Nutzlast aufzurufen. Beispiel:

    Invoke-WebRequest -Uri "http://localhost:9000/2015-03-31/functions/function/invocations" -Method Post -Body '{"payload":"hello world!"}' -ContentType "application/json"

    Führen Sie unter Linux oder macOS den folgenden curl-Befehl aus:

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'

    Dieser Befehl ruft die Funktion mit einem leeren Ereignis auf und gibt eine Antwort zurück. Wenn Sie Ihren eigenen Funktionscode anstelle des Beispielfunktionscodes verwenden, wird empfohlen, die Funktion mit einer JSON-Nutzlast aufzurufen. Beispiel:

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{"payload":"hello world!"}'
  3. Die Container-ID erhalten.

    docker ps
  4. 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 Image in Amazon ECR hochzuladen und die Lambda-Funktion zu erstellen
  1. Führen Sie den get-login-passwordBefehl aus, um die Docker-CLI bei Ihrer Amazon ECR-Registrierung zu authentifizieren.

    • Setzen Sie den --region Wert auf den AWS-Region Ort, an dem Sie das Amazon ECR-Repository erstellen möchten.

    • Ersetzen Sie es 111122223333 durch Ihre AWS-Konto ID.

    aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 111122223333.dkr.ecr.us-east-1.amazonaws.com
  2. Erstellen Sie ein Repository in Amazon ECR mithilfe des Befehls create-repository.

    aws ecr create-repository --repository-name hello-world --region us-east-1 --image-scanning-configuration scanOnPush=true --image-tag-mutability MUTABLE
    Anmerkung

    Das Amazon ECR-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" } } }
  3. Kopieren Sie das repositoryUri aus der Ausgabe im vorherigen Schritt.

  4. Führen Sie den Befehl docker tag aus, um Ihr lokales Image als neueste Version in Ihrem Amazon-ECR-Repository zu markieren. In diesem Befehl gilt Folgendes:

    • docker-image:test ist der Name und das Tag Ihres Docker-Images. Dies sind der Imagename und das Tag, die Sie im docker build-Befehl angegeben haben.

    • Ersetzen Sie <ECRrepositoryUri> durch den repositoryUri, den Sie kopiert haben. Stellen Sie sicher, dass Sie :latest am Ende der URI angeben.

    docker tag docker-image:test <ECRrepositoryUri>:latest

    Beispiel:

    docker tag docker-image:test 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
  5. Führen Sie den Befehl docker push aus, um Ihr lokales Image im Amazon-ECR-Repository bereitzustellen. Stellen Sie sicher, dass Sie :latest am Ende der Repository-URI angeben.

    docker push 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
  6. Erstellen Sie eine Ausführungsrolle für die Funktion, wenn Sie noch keine haben. Sie benötigen den Amazon-Ressourcennamen (ARN) der Rolle im nächsten Schritt.

  7. So erstellen Sie die Lambda-Funktion: Geben Sie für ImageUri die Repository-URI von zuvor an. Stellen Sie sicher, dass Sie :latest am Ende der URI angeben.

    aws lambda create-function \ --function-name hello-world \ --package-type Image \ --code ImageUri=111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest \ --role arn: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 Kontoübergreifende Berechtigungen von Amazon ECR.

  8. Die Funktion aufrufen.

    aws lambda invoke --function-name hello-world response.json

    Das Ergebnis sollte ungefähr wie folgt aussehen:

    { "ExecutedVersion": "$LATEST", "StatusCode": 200 }
  9. 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 Amazon ECR-Repository hochladen und dann den update-function-codeBefehl verwenden, um das Image für die Lambda-Funktion bereitzustellen.

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 ECR verweisen, 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-codeBefehl verwenden, auch wenn das Image-Tag in Amazon ECR gleich bleibt. Im folgenden Beispiel erstellt die --publish-Option eine neue Version der Funktion unter Verwendung des aktualisierten Container-Images.

aws lambda update-function-code \ --function-name hello-world \ --image-uri 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest \ --publish

Um das Image in Amazon ECR hochzuladen und die Lambda-Funktion zu erstellen
  1. Führen Sie den get-login-passwordBefehl aus, um die Docker-CLI bei Ihrer Amazon ECR-Registrierung zu authentifizieren.

    • Setzen Sie den --region Wert auf den AWS-Region Ort, an dem Sie das Amazon ECR-Repository erstellen möchten.

    • Ersetzen Sie es 111122223333 durch Ihre AWS-Konto ID.

    aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 111122223333.dkr.ecr.us-east-1.amazonaws.com
  2. Erstellen Sie ein Repository in Amazon ECR mithilfe des Befehls create-repository.

    aws ecr create-repository --repository-name hello-world --region us-east-1 --image-scanning-configuration scanOnPush=true --image-tag-mutability MUTABLE
    Anmerkung

    Das Amazon ECR-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" } } }
  3. Kopieren Sie das repositoryUri aus der Ausgabe im vorherigen Schritt.

  4. Führen Sie den Befehl docker tag aus, um Ihr lokales Image als neueste Version in Ihrem Amazon-ECR-Repository zu markieren. In diesem Befehl gilt Folgendes:

    • docker-image:test ist der Name und das Tag Ihres Docker-Images. Dies sind der Imagename und das Tag, die Sie im docker build-Befehl angegeben haben.

    • Ersetzen Sie <ECRrepositoryUri> durch den repositoryUri, den Sie kopiert haben. Stellen Sie sicher, dass Sie :latest am Ende der URI angeben.

    docker tag docker-image:test <ECRrepositoryUri>:latest

    Beispiel:

    docker tag docker-image:test 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
  5. Führen Sie den Befehl docker push aus, um Ihr lokales Image im Amazon-ECR-Repository bereitzustellen. Stellen Sie sicher, dass Sie :latest am Ende der Repository-URI angeben.

    docker push 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
  6. Erstellen Sie eine Ausführungsrolle für die Funktion, wenn Sie noch keine haben. Sie benötigen den Amazon-Ressourcennamen (ARN) der Rolle im nächsten Schritt.

  7. So erstellen Sie die Lambda-Funktion: Geben Sie für ImageUri die Repository-URI von zuvor an. Stellen Sie sicher, dass Sie :latest am Ende der URI angeben.

    aws lambda create-function \ --function-name hello-world \ --package-type Image \ --code ImageUri=111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest \ --role arn: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 Kontoübergreifende Berechtigungen von Amazon ECR.

  8. Die Funktion aufrufen.

    aws lambda invoke --function-name hello-world response.json

    Das Ergebnis sollte ungefähr wie folgt aussehen:

    { "ExecutedVersion": "$LATEST", "StatusCode": 200 }
  9. 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 Amazon ECR-Repository hochladen und dann den update-function-codeBefehl verwenden, um das Image für die Lambda-Funktion bereitzustellen.

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 ECR verweisen, 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-codeBefehl verwenden, auch wenn das Image-Tag in Amazon ECR gleich bleibt. Im folgenden Beispiel erstellt die --publish-Option eine neue Version der Funktion unter Verwendung des aktualisierten Container-Images.

aws lambda update-function-code \ --function-name hello-world \ --image-uri 111122223333.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 Verwenden 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 mit dem pip-Paketmanager:

pip install awslambdaric

Sie können den Python-Runtime-Interface-Client auch von herunterladen GitHub.

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:

Zur Durchführung der Schritte in diesem Abschnitt benötigen Sie Folgendes:

Um ein Container-Image aus einem AWS Nicht-Basis-Image zu erstellen
  1. Erstellen Sie ein Verzeichnis für das Projekt und wechseln Sie dann zu diesem Verzeichnis.

    mkdir example cd example
  2. 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 + '!'
  3. 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 Ihre requirements.txt aussehen, wenn Ihre Funktion AWS SDK for Python (Boto3) verwendet:

    Beispiel requirements.txt
    boto3
  4. 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 USER-Anweisung enthält. Wenn Sie ein Container-Image für Lambda bereitstellen, definiert Lambda automatisch einen Standard-Linux-Benutzer mit Berechtigungen mit geringsten Rechten. Dies unterscheidet sich vom Standardverhalten von Docker, bei dem standardmäßig der root-Benutzer verwendet wird, wenn keine USER-Anweisung bereitgestellt wird.

    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 FROM python: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" ]
  5. Erstellen Sie Ihr Docker-Image mit dem docker build-Befehl. Das folgende Beispiel benennt das Bild in docker-image und gibt ihm den test Tag. Um Ihr Image mit Lambda kompatibel zu machen, müssen Sie die --provenance=false Option verwenden.

    docker buildx build --platform linux/amd64 --provenance=false -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.

Um ein Container-Image aus einem AWS Nicht-Basis-Image zu erstellen
  1. Erstellen Sie ein Verzeichnis für das Projekt und wechseln Sie dann zu diesem Verzeichnis.

    mkdir example cd example
  2. 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 + '!'
  3. 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 Ihre requirements.txt aussehen, wenn Ihre Funktion AWS SDK for Python (Boto3) verwendet:

    Beispiel requirements.txt
    boto3
  4. 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 USER-Anweisung enthält. Wenn Sie ein Container-Image für Lambda bereitstellen, definiert Lambda automatisch einen Standard-Linux-Benutzer mit Berechtigungen mit geringsten Rechten. Dies unterscheidet sich vom Standardverhalten von Docker, bei dem standardmäßig der root-Benutzer verwendet wird, wenn keine USER-Anweisung bereitgestellt wird.

    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 FROM python: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" ]
  5. Erstellen Sie Ihr Docker-Image mit dem docker build-Befehl. Das folgende Beispiel benennt das Bild in docker-image und gibt ihm den test Tag. Um Ihr Image mit Lambda kompatibel zu machen, müssen Sie die --provenance=false Option verwenden.

    docker buildx build --platform linux/amd64 --provenance=false -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, um das Image lokal zu testen. Sie können den Emulator in Ihr Image integrieren oder ihn mit dem folgenden Verfahren auf Ihrem lokalen Computer installieren.

Installieren des Laufzeitschnittstellen-Emulators auf Ihrem lokalen Computer
  1. 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.

    Linux/macOS
    mkdir -p ~/.aws-lambda-rie && \ curl -Lo ~/.aws-lambda-rie/aws-lambda-rie https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie && \ chmod +x ~/.aws-lambda-rie/aws-lambda-rie

    Um den arm64-Emulator zu installieren, ersetzen Sie die GitHub Repository-URL im vorherigen Befehl durch Folgendes:

    https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie-arm64
    PowerShell
    $dirPath = "$HOME\.aws-lambda-rie" if (-not (Test-Path $dirPath)) { New-Item -Path $dirPath -ItemType Directory } $downloadLink = "https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie" $destinationPath = "$HOME\.aws-lambda-rie\aws-lambda-rie" Invoke-WebRequest -Uri $downloadLink -OutFile $destinationPath

    Um den arm64-Emulator zu installieren, ersetzen Sie das $downloadLink durch Folgendes:

    https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie-arm64
  2. Starten Sie Ihr Docker-Image mit dem docker run-Befehl. Beachten Sie Folgendes:

    • docker-image ist der Image-Name und test ist das Tag.

    • /usr/local/bin/python -m awslambdaric lambda_function.handler ist der ENTRYPOINT gefolgt von dem CMD aus Ihrem Dockerfile.

    Linux/macOS
    docker run --platform linux/amd64 -d -v ~/.aws-lambda-rie:/aws-lambda -p 9000:8080 \ --entrypoint /aws-lambda/aws-lambda-rie \ docker-image:test \ /usr/local/bin/python -m awslambdaric lambda_function.handler
    PowerShell
    docker run --platform linux/amd64 -d -v "$HOME\.aws-lambda-rie:/aws-lambda" -p 9000:8080 ` --entrypoint /aws-lambda/aws-lambda-rie ` docker-image:test ` /usr/local/bin/python -m awslambdaric lambda_function.handler

    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/arm64 Option anstelle von verwenden. --platform linux/amd64

  3. Veröffentlichen Sie ein Ereignis auf dem lokalen Endpunkt.

    Linux/macOS

    Führen Sie unter Linux oder macOS den folgenden curl-Befehl aus:

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'

    Dieser Befehl ruft die Funktion mit einem leeren Ereignis auf und gibt eine Antwort zurück. Wenn Sie Ihren eigenen Funktionscode anstelle des Beispielfunktionscodes verwenden, wird empfohlen, die Funktion mit einer JSON-Nutzlast aufzurufen. Beispiel:

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{"payload":"hello world!"}'
    PowerShell

    Führen Sie in PowerShell den folgenden Invoke-WebRequest Befehl aus:

    Invoke-WebRequest -Uri "http://localhost:9000/2015-03-31/functions/function/invocations" -Method Post -Body '{}' -ContentType "application/json"

    Dieser Befehl ruft die Funktion mit einem leeren Ereignis auf und gibt eine Antwort zurück. Wenn Sie Ihren eigenen Funktionscode anstelle des Beispielfunktionscodes verwenden, wird empfohlen, die Funktion mit einer JSON-Nutzlast aufzurufen. Beispiel:

    Invoke-WebRequest -Uri "http://localhost:9000/2015-03-31/functions/function/invocations" -Method Post -Body '{"payload":"hello world!"}' -ContentType "application/json"
  4. Die Container-ID erhalten.

    docker ps
  5. 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

Verwenden Sie den Laufzeit-Schnittstellen-Emulator, um das Image lokal zu testen. Sie können den Emulator in Ihr Image integrieren oder ihn mit dem folgenden Verfahren auf Ihrem lokalen Computer installieren.

Installieren des Laufzeitschnittstellen-Emulators auf Ihrem lokalen Computer
  1. 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.

    Linux/macOS
    mkdir -p ~/.aws-lambda-rie && \ curl -Lo ~/.aws-lambda-rie/aws-lambda-rie https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie && \ chmod +x ~/.aws-lambda-rie/aws-lambda-rie

    Um den arm64-Emulator zu installieren, ersetzen Sie die GitHub Repository-URL im vorherigen Befehl durch Folgendes:

    https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie-arm64
    PowerShell
    $dirPath = "$HOME\.aws-lambda-rie" if (-not (Test-Path $dirPath)) { New-Item -Path $dirPath -ItemType Directory } $downloadLink = "https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie" $destinationPath = "$HOME\.aws-lambda-rie\aws-lambda-rie" Invoke-WebRequest -Uri $downloadLink -OutFile $destinationPath

    Um den arm64-Emulator zu installieren, ersetzen Sie das $downloadLink durch Folgendes:

    https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie-arm64
    mkdir -p ~/.aws-lambda-rie && \ curl -Lo ~/.aws-lambda-rie/aws-lambda-rie https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie && \ chmod +x ~/.aws-lambda-rie/aws-lambda-rie

    Um den arm64-Emulator zu installieren, ersetzen Sie die GitHub Repository-URL im vorherigen Befehl durch Folgendes:

    https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie-arm64
  2. Starten Sie Ihr Docker-Image mit dem docker run-Befehl. Beachten Sie Folgendes:

    • docker-image ist der Image-Name und test ist das Tag.

    • /usr/local/bin/python -m awslambdaric lambda_function.handler ist der ENTRYPOINT gefolgt von dem CMD aus Ihrem Dockerfile.

    Linux/macOS
    docker run --platform linux/amd64 -d -v ~/.aws-lambda-rie:/aws-lambda -p 9000:8080 \ --entrypoint /aws-lambda/aws-lambda-rie \ docker-image:test \ /usr/local/bin/python -m awslambdaric lambda_function.handler
    PowerShell
    docker run --platform linux/amd64 -d -v "$HOME\.aws-lambda-rie:/aws-lambda" -p 9000:8080 ` --entrypoint /aws-lambda/aws-lambda-rie ` docker-image:test ` /usr/local/bin/python -m awslambdaric lambda_function.handler
    docker run --platform linux/amd64 -d -v ~/.aws-lambda-rie:/aws-lambda -p 9000:8080 \ --entrypoint /aws-lambda/aws-lambda-rie \ docker-image:test \ /usr/local/bin/python -m awslambdaric lambda_function.handler

    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/arm64 Option anstelle von verwenden. --platform linux/amd64

  3. Veröffentlichen Sie ein Ereignis auf dem lokalen Endpunkt.

    Linux/macOS

    Führen Sie unter Linux oder macOS den folgenden curl-Befehl aus:

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'

    Dieser Befehl ruft die Funktion mit einem leeren Ereignis auf und gibt eine Antwort zurück. Wenn Sie Ihren eigenen Funktionscode anstelle des Beispielfunktionscodes verwenden, wird empfohlen, die Funktion mit einer JSON-Nutzlast aufzurufen. Beispiel:

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{"payload":"hello world!"}'
    PowerShell

    Führen Sie in PowerShell den folgenden Invoke-WebRequest Befehl aus:

    Invoke-WebRequest -Uri "http://localhost:9000/2015-03-31/functions/function/invocations" -Method Post -Body '{}' -ContentType "application/json"

    Dieser Befehl ruft die Funktion mit einem leeren Ereignis auf und gibt eine Antwort zurück. Wenn Sie Ihren eigenen Funktionscode anstelle des Beispielfunktionscodes verwenden, wird empfohlen, die Funktion mit einer JSON-Nutzlast aufzurufen. Beispiel:

    Invoke-WebRequest -Uri "http://localhost:9000/2015-03-31/functions/function/invocations" -Method Post -Body '{"payload":"hello world!"}' -ContentType "application/json"

    Führen Sie unter Linux oder macOS den folgenden curl-Befehl aus:

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'

    Dieser Befehl ruft die Funktion mit einem leeren Ereignis auf und gibt eine Antwort zurück. Wenn Sie Ihren eigenen Funktionscode anstelle des Beispielfunktionscodes verwenden, wird empfohlen, die Funktion mit einer JSON-Nutzlast aufzurufen. Beispiel:

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{"payload":"hello world!"}'
  4. Die Container-ID erhalten.

    docker ps
  5. 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 Image in Amazon ECR hochzuladen und die Lambda-Funktion zu erstellen
  1. Führen Sie den get-login-passwordBefehl aus, um die Docker-CLI bei Ihrer Amazon ECR-Registrierung zu authentifizieren.

    • Setzen Sie den --region Wert auf den AWS-Region Ort, an dem Sie das Amazon ECR-Repository erstellen möchten.

    • Ersetzen Sie es 111122223333 durch Ihre AWS-Konto ID.

    aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 111122223333.dkr.ecr.us-east-1.amazonaws.com
  2. Erstellen Sie ein Repository in Amazon ECR mithilfe des Befehls create-repository.

    aws ecr create-repository --repository-name hello-world --region us-east-1 --image-scanning-configuration scanOnPush=true --image-tag-mutability MUTABLE
    Anmerkung

    Das Amazon ECR-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" } } }
  3. Kopieren Sie das repositoryUri aus der Ausgabe im vorherigen Schritt.

  4. Führen Sie den Befehl docker tag aus, um Ihr lokales Image als neueste Version in Ihrem Amazon-ECR-Repository zu markieren. In diesem Befehl gilt Folgendes:

    • docker-image:test ist der Name und das Tag Ihres Docker-Images. Dies sind der Imagename und das Tag, die Sie im docker build-Befehl angegeben haben.

    • Ersetzen Sie <ECRrepositoryUri> durch den repositoryUri, den Sie kopiert haben. Stellen Sie sicher, dass Sie :latest am Ende der URI angeben.

    docker tag docker-image:test <ECRrepositoryUri>:latest

    Beispiel:

    docker tag docker-image:test 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
  5. Führen Sie den Befehl docker push aus, um Ihr lokales Image im Amazon-ECR-Repository bereitzustellen. Stellen Sie sicher, dass Sie :latest am Ende der Repository-URI angeben.

    docker push 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
  6. Erstellen Sie eine Ausführungsrolle für die Funktion, wenn Sie noch keine haben. Sie benötigen den Amazon-Ressourcennamen (ARN) der Rolle im nächsten Schritt.

  7. So erstellen Sie die Lambda-Funktion: Geben Sie für ImageUri die Repository-URI von zuvor an. Stellen Sie sicher, dass Sie :latest am Ende der URI angeben.

    aws lambda create-function \ --function-name hello-world \ --package-type Image \ --code ImageUri=111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest \ --role arn: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 Kontoübergreifende Berechtigungen von Amazon ECR.

  8. Die Funktion aufrufen.

    aws lambda invoke --function-name hello-world response.json

    Das Ergebnis sollte ungefähr wie folgt aussehen:

    { "ExecutedVersion": "$LATEST", "StatusCode": 200 }
  9. 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 Amazon ECR-Repository hochladen und dann den update-function-codeBefehl verwenden, um das Image für die Lambda-Funktion bereitzustellen.

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 ECR verweisen, 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-codeBefehl verwenden, auch wenn das Image-Tag in Amazon ECR gleich bleibt. Im folgenden Beispiel erstellt die --publish-Option eine neue Version der Funktion unter Verwendung des aktualisierten Container-Images.

aws lambda update-function-code \ --function-name hello-world \ --image-uri 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest \ --publish

Um das Image in Amazon ECR hochzuladen und die Lambda-Funktion zu erstellen
  1. Führen Sie den get-login-passwordBefehl aus, um die Docker-CLI bei Ihrer Amazon ECR-Registrierung zu authentifizieren.

    • Setzen Sie den --region Wert auf den AWS-Region Ort, an dem Sie das Amazon ECR-Repository erstellen möchten.

    • Ersetzen Sie es 111122223333 durch Ihre AWS-Konto ID.

    aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 111122223333.dkr.ecr.us-east-1.amazonaws.com
  2. Erstellen Sie ein Repository in Amazon ECR mithilfe des Befehls create-repository.

    aws ecr create-repository --repository-name hello-world --region us-east-1 --image-scanning-configuration scanOnPush=true --image-tag-mutability MUTABLE
    Anmerkung

    Das Amazon ECR-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" } } }
  3. Kopieren Sie das repositoryUri aus der Ausgabe im vorherigen Schritt.

  4. Führen Sie den Befehl docker tag aus, um Ihr lokales Image als neueste Version in Ihrem Amazon-ECR-Repository zu markieren. In diesem Befehl gilt Folgendes:

    • docker-image:test ist der Name und das Tag Ihres Docker-Images. Dies sind der Imagename und das Tag, die Sie im docker build-Befehl angegeben haben.

    • Ersetzen Sie <ECRrepositoryUri> durch den repositoryUri, den Sie kopiert haben. Stellen Sie sicher, dass Sie :latest am Ende der URI angeben.

    docker tag docker-image:test <ECRrepositoryUri>:latest

    Beispiel:

    docker tag docker-image:test 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
  5. Führen Sie den Befehl docker push aus, um Ihr lokales Image im Amazon-ECR-Repository bereitzustellen. Stellen Sie sicher, dass Sie :latest am Ende der Repository-URI angeben.

    docker push 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
  6. Erstellen Sie eine Ausführungsrolle für die Funktion, wenn Sie noch keine haben. Sie benötigen den Amazon-Ressourcennamen (ARN) der Rolle im nächsten Schritt.

  7. So erstellen Sie die Lambda-Funktion: Geben Sie für ImageUri die Repository-URI von zuvor an. Stellen Sie sicher, dass Sie :latest am Ende der URI angeben.

    aws lambda create-function \ --function-name hello-world \ --package-type Image \ --code ImageUri=111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest \ --role arn: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 Kontoübergreifende Berechtigungen von Amazon ECR.

  8. Die Funktion aufrufen.

    aws lambda invoke --function-name hello-world response.json

    Das Ergebnis sollte ungefähr wie folgt aussehen:

    { "ExecutedVersion": "$LATEST", "StatusCode": 200 }
  9. 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 Amazon ECR-Repository hochladen und dann den update-function-codeBefehl verwenden, um das Image für die Lambda-Funktion bereitzustellen.

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 ECR verweisen, 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-codeBefehl verwenden, auch wenn das Image-Tag in Amazon ECR gleich bleibt. Im folgenden Beispiel erstellt die --publish-Option eine neue Version der Funktion unter Verwendung des aktualisierten Container-Images.

aws lambda update-function-code \ --function-name hello-world \ --image-uri 111122223333.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 im AWS Blog.

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