Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Arbeiten mit Lambda-Container-Images
Der Code Ihrer AWS Lambda-Funktion besteht aus Skripts oder kompilierten Programmen und deren Abhängigkeiten. Sie verwenden ein Bereitstellungspaket, um Ihren Funktionscode in Lambda bereitzustellen. Lambda unterstützt zwei Arten von Bereitstellungspaketen: Container-Images und ZIP-Dateiarchiven.
Es gibt drei Möglichkeiten, ein Container-Image für eine Lambda-Funktion zu erstellen:
-
Ein AWS-Basis-Image für Lambda verwenden
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.
-
Verwenden eines reinen AWS-OS-Basis-Image
AWS-OS-Basis-Images
enthalten eine Amazon-Linux-Distribution und den Laufzeitschnittstellen-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 Ihre Sprache in das Image aufnehmen. -
Verwenden eines Nicht-AWS-Basis-Images
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 Ihre Sprache 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
Um eine Lambda-Funktion aus einem Container-Image zu erstellen, erstellen Sie Ihr Image lokal und laden es in ein Amazon Elastic Container Registry (Amazon ECR)-Repository hoch. Geben Sie dann den Repository-URI an, wenn Sie die Funktion erstellen. Das Amazon ECR-Repository muss sich im selben AWS-Region wie die Lambda-Funktion befinden. 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.
Auf dieser Seite werden die Basis-Image-Typen und Anforderungen für die Erstellung von Lambda-kompatiblen Container-Images erläutert.
Anmerkung
Sie können den Bereitstellungspakettyp (ZIP- oder Container-Image) für eine vorhandene Funktion nicht ändern. Sie können beispielsweise eine Container-Image-Funktion nicht konvertieren, um ein ZIP-Dateiarchiv zu verwenden. Sie müssen eine neue Funktion erstellen.
Themen
Voraussetzungen
Installieren Sie die AWS Command Line Interface(AWS CLI) Version 2 und die Docker-CLI
-
Das Container-Image muss die Lambda-Laufzeiten-API implementieren. Die AWS Open-Source-Laufzeitschnittstellen-Clients implementieren die API. Sie können Ihrem bevorzugten Basis-Image einen Laufzeitschnittstellen-Client hinzufügen, damit es mit Lambda kompatibel ist.
-
Das Container-Image muss auf einem schreibgeschützten Dateisystem laufen können. Ihr Funktionscode kann auf ein beschreibbares
/tmp
-Verzeichnis mit einem Speicherplatz zwischen 512 MB bis 10 240 MB, in 1-MB-Schritten, zugreifen. -
Der Lambda-Standardbenutzer muss in der Lage sein, alle Dateien zu lesen, die zum Ausführen Ihres Funktionscodes erforderlich sind. Lambda folgt den bewährten Methoden für die Sicherheit, indem es einen Standard-Linux-Benutzer mit den geringsten Berechtigungen definiert. Stellen Sie sicher, dass Ihr Anwendungscode nicht auf Dateien angewiesen ist, von denen andere Linux-Benutzer nicht ausgeführt werden können.
-
Lambda unterstützt nur Linux-basierte Container-Images.
-
Lambda bietet Multi-Architektur-Basis-Images. Das Image, das Sie für Ihre Funktion erstellen, muss jedoch nur auf eine der Architekturen abzielen. Lambda unterstützt keine Funktionen, die Container-Images mit mehreren Architekturen verwenden.
Ein AWS-Basis-Image für Lambda verwenden
Sie können eines der AWS-Basis-Images
AWS stellt regelmäßig Aktualisierungen der AWS-Basis-Images für Lambda bereit. Wenn Ihr Dockerfile den Image-Namen in der FROM-Eigenschaft enthält, ruft Ihr Docker-Client die aktuelle Version des Images aus dem Amazon-ECR-Repository
Die Basis-Images Node.js 20, Python 3.12, Java 21, AL2023 und höher basieren auf dem minimalen Container-Image von Amazon Linux 2023. Frühere Basis-Images verwenden Amazon Linux 2. AL2023 bietet mehrere Vorteile gegenüber Amazon Linux 2, darunter einen geringeren Bereitstellungsaufwand und aktualisierte Versionen von Bibliotheken wie glibc
.
AL2023-based Images verwenden microdnf
(symmetrisch verknüpft als dnf
) als Paketmanager anstelle von yum
, was der Standardpaketmanager in Amazon Linux 2 ist. microdnf
ist eine eigenständige Implementierung von dnf
. Eine Liste der Pakete, die in AL2023-based Images enthalten sind, finden Sie in den Spalten Minimal Container unter Vergleich von Paketen, die auf Amazon Linux 2023 Container Images installiert sind. Weitere Informationen zu den Unterschieden zwischen AL2023 und Amazon Linux 2 finden Sie unter Introducing the Amazon Linux 2023 runtime for AWS Lambda
Anmerkung
Um AL2023-based Images lokal auszuführen, einschließlich mit AWS Serverless Application Model (AWS SAM), müssen Sie Docker Version 20.10.10 oder höher verwenden.
Um ein Container-Image mithilfe eines AWS-Basis-Images zu erstellen, wählen Sie die Anweisungen für Ihre bevorzugte Sprache aus:
Verwenden eines reinen AWS-OS-Basis-Image
AWS-OS-Basis-Images
Tags | Laufzeit | Betriebssystem | Dockerfile | Ablehnung |
---|---|---|---|---|
al2023 |
Reine OS-Laufzeit | Amazon Linux 2023 | Dockerfile für reine OS-Laufzeit auf GitHub |
|
al2 |
Reine OS-Laufzeit | Amazon Linux 2 | Dockerfile für reine OS-Laufzeit auf GitHub |
Öffentliche Galerie der Registry von Amazon Elastic Container: gallery.ecr.aws/lambda/provided
Verwenden eines Nicht-AWS-Basis-Images
Lambda unterstützt jedes Image, das einem der folgenden Image-Manifestformate entspricht:
Docker Image Manifest V2 Schema 2 (mit Docker-Version 1.10 und neuer)
Open Container Initiative (OCI)-Spezifikationen (v1.0.0 und höher)
Lambda unterstützt eine maximale unkomprimierte Image-Größe von 10 GB, einschließlich aller Ebenen.
Anmerkung
Um das Image mit Lambda kompatibel zu machen, müssen Sie den Laufzeitschnittstellen-Client für Ihre Sprache in das Image aufnehmen.
Laufzeitschnittstellen-Clients
Wenn Sie ein reines OS-Basis-Image oder ein alternatives Basis-Image verwenden, müssen Sie den Laufzeitschnittstellen-Client in das Image einbinden. Der Laufzeitschnittstellen-Client muss die Lambda-Laufzeiten-API erweitern, die die Interaktion zwischen Lambda und Ihrem Funktionscode verwaltet. AWS stellt Open-Source-basierte Laufzeitschnittstellen-Clients für die folgenden Sprachen zur Verfügung:
Wenn Sie eine Sprache verwenden, die keinen von AWS bereitgestellten Laufzeitschnittstellen-Client hat, müssen Sie Ihren eigenen erstellen.
Amazon-ECR-Berechtigungen
Bevor Sie eine Lambda-Funktion aus einem Container-Image erstellen, müssen Sie das Image lokal erstellen und es in ein Amazon-ECR-Repository hochladen. Geben Sie beim Erstellen der Funktion den URI des Amazon-ECR-Repositorys an.
Stellen Sie sicher, dass die Berechtigungen für den Benutzer oder die Rolle, der bzw. die die Funktion erstellt, die von AWS verwalteten Richtlinien GetRepositoryPolicy
und SetRepositoryPolicy
enthalten.
Verwenden Sie beispielsweise die IAM-Konsole, um eine Rolle mit der folgenden Richtlinie zu erstellen:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "ecr:SetRepositoryPolicy", "ecr:GetRepositoryPolicy" ], "Resource": "arn:aws:ecr:
us-east-1
:111122223333
:repository/hello-world
" } ] }
Richtlinien für das Amazon-ECR-Repository
Für eine Funktion im selben Konto wie das Container-Image in Amazon ECR können Sie Ihrem Amazon-ECR-Repository die Berechtigungen ecr:BatchGetImage
und ecr:GetDownloadUrlForLayer
hinzufügen. Das folgende Beispiel zeigt die Mindestrichtlinie:
{ "Sid": "LambdaECRImageRetrievalPolicy", "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": [ "ecr:BatchGetImage", "ecr:GetDownloadUrlForLayer" ] }
Weitere Informationen zu Amazon-ECR-Repository-Berechtigungen finden Sie unter Private Repository-Richtlinien im Benutzerhandbuch zu Amazon Elastic Container Registry.
Wenn das Amazon ECR-Repository diese Berechtigungen nicht enthält, fügt Lambda ecr:BatchGetImage
und ecr:GetDownloadUrlForLayer
zu den Berechtigungen des Container-Image-Repositorys hinzu. Lambda kann diese Berechtigungen nur hinzufügen, wenn der Lambda aufrufende Prinzipal über ecr:getRepositoryPolicy
- und ecr:setRepositoryPolicy
-Berechtigungen verfügt.
Um Ihre Repository-Berechtigungen für Amazon ECR anzuzeigen oder zu bearbeiten, befolgen Sie die Anweisungen unter Festlegung einer privaten Repository-Richtlinienanweisung im Benutzerhandbuch zu Amazon Elastic Container Registry.
Kontoübergreifende Berechtigungen von Amazon ECR
Ein anderes Konto in derselben Region kann eine Funktion erstellen, die ein Container-Image verwendet, das Ihrem Konto gehört. Im folgenden Beispiel benötigt die Berechtigungsrichtlinie Ihres Amazon-ECR-Repository die folgenden Anweisungen, um den Zugriff auf Kontonummer 123456789012 zu gewähren.
CrossAccountPermission – Ermöglicht Konto 123456789012 das Erstellen und Aktualisieren von Lambda-Funktionen, die Images aus diesem ECR-Repository verwenden.
LambdaECRImageCrossAccountRetrievalPolicy – Lambda setzt den Status einer Funktion schließlich auf inaktiv, wenn sie über einen längeren Zeitraum nicht aufgerufen wird. Diese Anweisung ist erforderlich, damit Lambda das Container-Image zur Optimierung und Zwischenspeicherung im Namen der Funktion abrufen kann, die 123456789012 besitzt.
Beispiel – Ihrem Repository kontoübergreifende Berechtigungen hinzufügen
{ "Version": "2012-10-17", "Statement": [ { "Sid": "CrossAccountPermission", "Effect": "Allow", "Action": [ "ecr:BatchGetImage", "ecr:GetDownloadUrlForLayer" ], "Principal": { "AWS": "arn:aws:iam::
123456789012
:root" } }, { "Sid": "LambdaECRImageCrossAccountRetrievalPolicy", "Effect": "Allow", "Action": [ "ecr:BatchGetImage", "ecr:GetDownloadUrlForLayer" ], "Principal": { "Service": "lambda.amazonaws.com" }, "Condition": { "StringLike": { "aws:sourceARN": "arn:aws:lambda:us-east-1
:123456789012
:function:*" } } } ] }
Um den Zugriff auf mehrere Konten zu gewähren, fügen Sie die Konto-IDs der Liste der Prinzipalen in der CrossAccountPermission
-Richtlinie hinzu sowie zur Bedingungs-Auswertungsliste der Bedingung in LambdaECRImageCrossAccountRetrievalPolicy
.
Wenn Sie mit mehreren Konten in einer AWS-Organisation arbeiten, empfehlen wir Ihnen, jede Konto-ID in der ECR-Berechtigungsrichtlinie aufzuzählen. Dieser Ansatz steht im Einklang mit der bewährten Sicherheitsmethode von AWS zum Festlegen enger Berechtigungen in IAM-Richtlinien.
Container-Image-Einstellungen
Im Folgenden finden Sie allgemeine Container-Image-Einstellungen. Wenn Sie diese Einstellungen in Ihrem Dockerfile verwenden, beachten Sie, wie Lambda diese Einstellungen interpretiert und verarbeitet:
-
ENTRYPOINT – Gibt den absoluten Pfad zum Eintrittspunkt der Anwendung an.
-
CMD – Gibt zusätzliche Parameter an, die Sie mit ENTRYPOINT übergeben sollten.
-
WORKDIR – Gibt den absoluten Pfad zum Arbeitsverzeichnis an.
-
ENV – Gibt eine Umgebungsvariable für die Lambda-Funktion an.
Weitere Informationen darüber, wie Docker die Container-Image-Einstellungen verwendet, finden Sie unter ENTRYPOINT
Sie können die Einstellungen für Container-Images im Dockerfile angeben, wenn Sie Ihr Image erstellen. Sie können diese Konfigurationen auch mit der Lambda-Konsole oder Lambda-API überschreiben. Auf diese Weise können Sie mehrere Funktionen bereitstellen, die dasselbe Container-Image bereitstellen, jedoch mit unterschiedlichen Laufzeitkonfigurationen.
Warnung
Wenn Sie ENTRYPOINT oder CMD im Dockerfile oder als Überschreibung angeben, stellen Sie sicher, dass Sie den absoluten Pfad eingeben. Verwenden Sie auch keine Symlinks als Eintrittspunkt für den Container.
So überschreiben Sie die Konfigurationswerte im Container-Image
Öffnen Sie die Seite Funktionen
der Lambda-Konsole. -
Wählen Sie die zu aktualisierende Funktion aus.
-
Wählen Sie unter Image configuration (Image-Konfiguration) die Option Edit (Bearbeiten) aus.
-
Geben Sie neue Werte für eine der Überschreibungseinstellungen ein und wählen Sie dann Speichern aus.
-
(Optional) Um Umgebungsvariablen hinzuzufügen oder zu überschreiben, wählen Sie unter Umgebungsvariablen die Option Bearbeiten aus.
Weitere Informationen finden Sie unter Verwenden von Lambda-Umgebungsvariablen.