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.
Erstellen Sie eine Lambda-Funktion mit einem Container-Image
Der Code Ihrer AWS Lambda Funktion besteht aus Skripten 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:
-
Verwenden eines AWS Basis-Images für Lambda
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 Ihre Sprache in das Image aufnehmen. -
Es wird ein Image verwendet, das nicht AWS zur Basisversion gehört
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 Sie es in ein Amazon Elastic Container Registry (AmazonECR) -Repository hoch. Geben Sie dann das Repository an, URI wenn Sie die Funktion erstellen. Das ECR Amazon-Repository muss sich im selben Format 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 ECRKontoübergreifende Amazon-Berechtigungen.
Anmerkung
Lambda unterstützt keine ECR FIPS Amazon-Endpunkte für Container-Images. Wenn Ihr Repository URI Folgendes umfasstecr-fips
, verwenden Sie einen FIPS Endpunkt. Beispiel: 111122223333.dkr.ecr-fips.us-east-1.amazonaws.com
.
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 bestehende Funktion nicht ändern. Sie können beispielsweise eine Container-Image-Funktion nicht so konvertieren, dass sie ein ZIP-Dateiarchiv verwendet. Sie müssen eine neue Funktion erstellen.
Themen
Voraussetzungen
Installieren Sie die AWS Command Line Interface (AWS CLI) Version 2 und den CLIDocker
-
Das Container-Image muss die Verwendung der Lambda-Laufzeit API für benutzerdefinierte Laufzeiten implementieren. Die AWS Open-Source-Runtime-Interface-Clients implementieren das. 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. Das bedeutet, dass Sie USER
in Ihrem Dockerfile kein a angeben müssen. 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.
Verwenden eines AWS Basis-Images für Lambda
Sie können eines der AWS -Basis-Images
AWS stellt regelmäßig Updates für die AWS Basis-Images für Lambda bereit. Wenn Ihr Dockerfile den Image-Namen in der FROM Eigenschaft enthält, ruft Ihr Docker-Client die neueste Version des Images aus dem Amazon-Repository ab. ECR
Die Datei Node.js 20, Python 3.12, Java 21,. NETDie Basis-Images 8, Ruby 3.3 und höher basieren auf dem Minimal-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 wieglibc
.
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.
Um ein Container-Image mit einem AWS Basis-Image zu erstellen, wählen Sie die Anweisungen für Ihre bevorzugte Sprache aus:
Es wird ein AWS reines Betriebssystem-Basis-Image verwendet
AWS Basis-Images nur für Betriebssysteme
Tags | Laufzeit | Betriebssystem | Dockerfile | Ablehnung |
---|---|---|---|---|
al2023 |
Reine OS-Laufzeit | Amazon Linux 2023 | Dockerfile für reine Betriebssystem-Runtime on GitHub |
Nicht geplant |
al2 |
Reine OS-Laufzeit | Amazon Linux 2 | Dockerfile für reine Betriebssystem-Runtime aktiviert GitHub |
Nicht geplant |
Öffentliche Galerie der Registry von Amazon Elastic Container: gallery.ecr.aws/lambda/provided
Es wird ein Image verwendet, das nicht AWS zur Basisversion gehört
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)
Spezifikationen der Open Container Initiative (OCI) (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 Runtime-Schnittstellenclient muss den erweiternVerwendung der Lambda-Laufzeit API für benutzerdefinierte Laufzeiten, der die Interaktion zwischen Lambda und Ihrem Funktionscode verwaltet. AWS stellt Open-Source-Runtime-Interface-Clients für die folgenden Sprachen bereit:
Wenn Sie eine Sprache verwenden, für die kein AWS Runtime-Interface-Client zur Verfügung steht, müssen Sie Ihren eigenen erstellen.
ECRAmazon-Berechtigungen
Bevor Sie eine Lambda-Funktion aus einem Container-Image erstellen, müssen Sie das Image lokal erstellen und in ein ECR Amazon-Repository hochladen. Wenn Sie die Funktion erstellen, geben Sie das ECR Amazon-Repository anURI.
Stellen Sie sicher, dass die Berechtigungen für den Benutzer oder die Rolle, die die Funktion erstellt, GetRepositoryPolicy
und enthaltenSetRepositoryPolicy
.
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
" } ] }
ECRAmazon-Repository-Richtlinien
Für eine Funktion in demselben Konto wie das Container-Image in Amazon ECR können Sie Ihrer ECR Amazon-Repository-Richtlinie ecr:GetDownloadUrlForLayer
Berechtigungen hinzufügenecr:BatchGetImage
. Das folgende Beispiel zeigt die Mindestrichtlinie:
{ "Sid": "LambdaECRImageRetrievalPolicy", "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": [ "ecr:BatchGetImage", "ecr:GetDownloadUrlForLayer" ] }
Weitere Informationen zu ECR Amazon-Repository-Berechtigungen finden Sie unter Private Repository-Richtlinien im Amazon Elastic Container Registry-Benutzerhandbuch.
Wenn das ECR Amazon-Repository diese Berechtigungen nicht enthält, fügt ecr:BatchGetImage
Lambda dem Container-Image-Repository Berechtigungen hinzu. ecr:GetDownloadUrlForLayer
Lambda kann diese Berechtigungen nur hinzufügen, wenn der Lambda aufrufende Prinzipal über ecr:getRepositoryPolicy
- und ecr:setRepositoryPolicy
-Berechtigungen verfügt.
Um Ihre ECR Amazon-Repository-Berechtigungen einzusehen oder zu bearbeiten, folgen Sie den Anweisungen unter Einrichten einer privaten Repository-Richtlinienerklärung im Amazon Elastic Container Registry-Benutzerhandbuch.
ECRKontoübergreifende Amazon-Berechtigungen
Ein anderes Konto in derselben Region kann eine Funktion erstellen, die ein Container-Image verwendet, das Ihrem Konto gehört. Im folgenden Beispiel erfordert Ihre ECRAmazon-Repository-Berechtigungsrichtlinie die folgenden Anweisungen, um Zugriff auf die Kontonummer 123456789012 zu gewähren.
CrossAccountPermission— Ermöglicht dem Konto 123456789012 das Erstellen und Aktualisieren von Lambda-Funktionen, die Bilder aus diesem Repository verwenden. ECR
L ambdaECRImage CrossAccountRetrievalPolicy — Lambda setzt den Status einer Funktion irgendwann 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 Zugriff auf mehrere Konten zu gewähren, fügen Sie das Konto IDs der Principal-Liste in der CrossAccountPermission
Policy und der Condition-Bewertungsliste in der hinzu. LambdaECRImageCrossAccountRetrievalPolicy
Wenn Sie mit mehreren Konten in einer AWS Organisation arbeiten, empfehlen wir, dass Sie jede Konto-ID in der ECR Berechtigungsrichtlinie auflisten. Dieser Ansatz entspricht der bewährten AWS Sicherheitspraxis, in Richtlinien enge Berechtigungen festzulegen. IAM
Zusätzlich zu den Lambda-Berechtigungen muss der Benutzer oder die Rolle, die die Funktion erstellt, auch über GetDownloadUrlForLayer
Berechtigungen verfügenBatchGetImage
.
Lebenszyklus der Funktion
Nachdem Sie ein neues oder aktualisiertes Container-Image hochgeladen haben, optimiert Lambda das Image, bevor die Funktion Aufrufe verarbeiten kann. Der Optimierungsprozess kann einige Sekunden dauern. Die Funktion bleibt bis zum Abschluss des Vorgangs im Pending
-Zustand. Die Funktion wechselt dann in den Active
-Zustand. Während der Zustand Pending
ist, können Sie die Funktion zwar aufrufen, allerdings schlagen andere Operationen für die Funktion fehl. Aufrufe, die auftreten, während eine Image-Aktualisierung läuft, führen den Code aus dem vorherigen Image aus.
Wenn eine Funktion mehrere Wochen lang nicht aufgerufen wird, gewinnt Lambda seine optimierte Version zurück und die Funktion wechselt in den Inactive
-Zustand. Um die Funktion wieder zu aktivieren, müssen Sie sie aufrufen. Lambda lehnt den ersten Aufruf ab und die Funktion tritt in den Pending
-Zustand, bis Lambda das Image neu optimiert. Die Funktion kehrt dann zum Active
-Zustand zurück.
Lambda ruft regelmäßig das zugehörige Container-Image aus dem ECR Amazon-Repository ab. Wenn das entsprechende Container-Image bei Amazon nicht mehr existiert ECR oder Berechtigungen widerrufen werden, wechselt die Funktion in den Failed
Status und Lambda gibt bei allen Funktionsaufrufen einen Fehler zurück.
Sie können Lambda verwendenAPI, um Informationen über den Status einer Funktion abzurufen. Weitere Informationen finden Sie unter Lambda-Funktionszustände.