View a markdown version of this page

Bereitstellen von Web-Funktionscode aus Amazon S3 - 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.

Bereitstellen von Web-Funktionscode aus Amazon S3

Sie stellen Lambda Web Function Code als .zip-Bereitstellungspaket in einem Amazon S3 S3-Bucket bereit. Dies ist die einzige Möglichkeit, Code für eine Webfunktion bereitzustellen. Wenn Sie eine Webfunktion oder Revision erstellen, geben Sie das Objekt in dem s3Object Feld an, unter dem codeConfig sich die Anforderung befindet. buildConfig Geben s3Object Sie den Bucket, den Schlüssel und eine optionale versionId ein. Lambda verweist direkt aus Ihrem Bucket auf Ihren Code. Da Lambda jede Revision einer bestimmten Objektversion zuordnet, sind Ihre Bereitstellungen reproduzierbar. Sie können ein einzelnes Bereitstellungspaket für mehrere Konten und Regionen wiederverwenden. AWS

Voraussetzungen

Bevor Sie Web Function-Code von Amazon S3 bereitstellen, stellen Sie sicher, dass Ihr Bucket und Ihr Bereitstellungspaket die folgenden Anforderungen erfüllen:

S3-Versionierung

Für den Bucket muss die S3-Versionierung aktiviert sein. Lambda verwendet Objektversionen, um zu verfolgen, welche Version Ihres Codes eine Revision verwendet.

Versions-ID

Der versionId Parameter ist in der Anfrage optional. Wenn Sie es weglassen, verwendet Lambda die neueste Version des Objekts zum Zeitpunkt der Erstellung. In jedem Fall bindet Lambda die Revision an eine bestimmte Objektversion.

Maximale Größe des Bereitstellungspakets

512 MB (entpackt).

Eintragsdatei

Das Bereitstellungspaket muss die Eintragsdatei Ihrer Anwendung enthalten. Standardmäßig wird die Runtime index.js im Stammverzeichnis des Pakets geladen. Um eine andere Eintragsdatei zu verwenden, setzen Sie die AWS_LAMBDA_NODEJS_ENTRYPOINT Umgebungsvariable in der Revision auf den Pfad der Datei relativ zum Paketstamm. Nach dem Laden der Eintragsdatei wartet die Runtime darauf, dass Ihr HTTP-Server anfängt, den Host und den Port der AWS_LAMBDA_HTTP_ENDPOINT Umgebungsvariablen abzuhören. Wenn die Laufzeitumgebung die Eintragsdatei nicht auflösen kann oder der Server nie mit der Überwachung beginnt, schlägt die Initialisierung fehl und Anfragen an den Endpunkt schlagen fehl.

Lambda überprüft nicht, ob Ihr Server mit der Überwachung beginnt, wenn er einen Endpunkt erstellt oder aktualisiert, um die Revision zu verwenden. Die Revision und der Endpunkt können Active in diesen Fällen immer noch angezeigt werden. Senden Sie nach jeder Bereitstellung eine Testanfrage und überprüfen Sie Ihre Anwendungsprotokolle.

Standort des Buckets

Der Bucket kann sich in einem anderen AWS Konto und in einer anderen AWS Region als in der Webfunktion befinden. Der Bucket muss sich in derselben AWS Partition wie die Webfunktion befinden. Der Bucket darf sich nicht in einer Opt-in-Region befinden (einer Region, die standardmäßig nicht aktiviert ist). Wenn eine der Bedingungen nicht erfüllt ist, lehnt Lambda die Anfrage ab. Cross-Region Beim Abrufen von Objekten fallen zusätzliche Amazon S3 S3-Datenübertragungskosten an. Weitere Informationen zu Preisen finden Sie unter Amazon-S3-Preise.

Erforderliche Berechtigungen

Um Webfunktionscode von Amazon S3 aus bereitzustellen, müssen Sie Berechtigungen sowohl für die aufrufende Identität als auch für den Lambda-Serviceprinzipal konfigurieren.

Berechtigungen des Anrufers

Um die Webfunktion oder Revision zu erstellen, benötigt Ihre IAM-Identität die folgenden Berechtigungen für das S3-Objekt:

  • s3:GetObject

  • s3:GetObjectVersion

Bei kontoübergreifenden Buckets muss die Bucket-Richtlinie auch der aufrufenden Identität Zugriff auf das Objekt gewähren.

Bucket-Richtlinie für Lambda

Die Bucket-Richtlinie muss dem Lambda-Service Principal (lambda.amazonaws.com) s3:GetObject und s3:GetObjectVersion Berechtigungen gewähren. Definieren Sie für die Richtlinie eine aws:SourceArn Bedingung, die dem ARN-Muster der Revision entspricht. Verwenden Sie es ArnLike mit einem Platzhalter für die Revisions-ID, da Lambda die Revisions-ID generiert, wenn Sie die Revision erstellen.

Wenn das Objekt mit einem AWS KMS Schlüssel (SSE-KMS) verschlüsselt ist, muss die Schlüsselrichtlinie auch den Aufruf kms:Decrypt dieses Schlüssels lambda.amazonaws.com ermöglichen. Lambda überprüft den Zugriff des Service Principal, wenn Sie die Revision erstellen, und lehnt die Anfrage ab, wenn der Zugriff fehlt.

Die folgende Beispiel-Bucket-Richtlinie gewährt Lambda Zugriff zum Lesen Ihrer Bereitstellungspakete für jede Version der angegebenen Webfunktion.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowLambdaWebFunctionCodeAccess", "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": "arn:aws:s3:::my-bucket/*", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:lambda:us-east-1:111122223333:web-function/my-function/revision/*" } } } ] }

Um den Zugriff auf das key prefix zu beschränken, das Ihre Bereitstellungspakete enthält, ändern Sie den Resource my-bucket Wert inarn:aws:s3:::my-bucket/my-prefix/*, wobei Ihr Bucket-Name und my-prefix das key prefix sind. Behalten Sie das /* Ende des Präfixes bei. Ändern Sie den revision/* Platzhalter nicht inaws:SourceArn.

Erstellen einer Webfunktion mit Code aus Amazon S3

Sie geben Ihr S3-Bereitstellungspaket im codeConfig Abschnitt von anbuildConfig. Die folgenden Verfahren zeigen, wie Sie eine Webfunktion erstellen und wie Sie mit dem eine neue Revision erstellen AWS CLI.

Um eine Webfunktion mit Code aus Amazon S3 zu erstellen (AWS CLI)
  • Führen Sie den folgenden Befehl aus, um eine Webfunktion zu erstellen, die auf Ihr ZIP-Bereitstellungspaket in Amazon S3 verweist.

    aws lambda-web create-web-function \ --function-name my-web-app \ --revision-config '{ "buildConfig": { "codeConfig": { "s3Object": { "bucket": "my-bucket", "key": "my-app.zip" } }, "runtimeConfig": { "runtime": "nodejs24.x" } }, "serviceConfig": { "executionRoleArn": "arn:aws:iam::111122223333:role/my-web-function-role" } }' \ --endpoint-config '{ "endpointName": "my-endpoint", "endpointType": "HomeRegion", "authType": "ApplicationManaged" }'

    Wenn Sie es weglassenversionId, verwendet Lambda die neueste Version des Objekts zum Zeitpunkt der Erstellung.

Um eine neue Revision mit einer bestimmten Objektversion zu erstellen (AWS CLI)
  • Führen Sie den folgenden Befehl aus, um eine neue Revision zu erstellen, die eine bestimmte Version Ihres Bereitstellungspakets verwendet.

    aws lambda-web create-web-function-revision \ --function-name my-web-app \ --build-config '{ "codeConfig": { "s3Object": { "bucket": "my-bucket", "key": "my-app.zip", "versionId": "abc123def456" } }, "runtimeConfig": { "runtime": "nodejs24.x" } }' \ --service-config '{ "executionRoleArn": "arn:aws:iam::111122223333:role/my-web-function-role" }'

    Durch die Angabe versionId binden Sie die Revision an eine exakte Version des Objekts und nicht an die neueste Version.

Lebenszyklus eines Objekts

Löschen Sie keine S3-Objekte und entfernen Sie den Lambda-Zugriff für aktive Revisionen nicht

Lambda verweist auf Ihren Code aus Ihrem Amazon S3 S3-Bucket. Wenn Sie das S3-Objekt löschen, das eine Revision verwendet, oder die spezifische Objektversion, die die Revision verwendet, wechselt die Revision in den Failed Zustand, in dem Lambda das nächste Mal den Zugriff auf das Objekt überprüft, und kann dann keinen Datenverkehr mehr bereitstellen. Behalten Sie die Objektversionen für alle Revisionen bei, die Sie noch verwenden.

Das Entfernen des Zugriffs des Lambda-Serviceprinzipals auf den Bucket hat den gleichen Effekt. Wenn Sie die Bucket-Richtlinie so ändern, dass sie die s3:GetObjectVersion Berechtigungen verweigert oder entfernt s3:GetObjectlambda.amazonaws.com, werden bestehende Revisionen, die auf Objekte in diesem Bucket verweisen, in den Failed Status versetzt. Behalten Sie sowohl die Objekte als auch den Lesezugriff des Lambda-Serviceprinzipals bei, solange eine Revision auf diese Objekte verweist.

Der Failed Zustand ist dauerhaft. Durch das Wiederherstellen des gelöschten Objekts oder der Bucket-Berechtigungen wird der Active Status einer Version nicht wiederhergestellt. Erstellen Sie zur Wiederherstellung eine neue Revision, die auf eine verfügbare Objektversion verweist, und aktualisieren Sie dann die Revisionsgewichte Ihrer Endpunkte, um den Datenverkehr dorthin weiterzuleiten. Informationen zu Bereitstellungsmustern finden Sie unter. Bereitstellungsmuster

Lambda verlagert den Verkehr nicht automatisch von einer Failed Revision weg. Anfragen, die ein Endpunkt an eine Failed Revision weiterleitet, werden mit dem HTTP-Statuscode 409 und dem lambda-web-error-type Antwortheader von Platform.RevisionNotActive abgelehnt. Wenn der Endpunkt den Datenverkehr auf mehrere Revisionen verteilt, ist nur der Anteil der Anfragen betroffen, die an die Failed Revision weitergeleitet wurden. Anfragen, die an fehlerfreie Versionen weitergeleitet werden, werden normal bearbeitet. Um die Ausfälle zu verhindern, aktualisieren Sie die Revisionsgewichte des Endpunkts, um die Revision zu entfernen. Failed

Wenn Sie das Objekt mit einem neuen Upload überschreiben, wird eine neue S3-Version erstellt. Dies wirkt sich nicht auf bestehende Revisionen aus: Wenn Sie eine Revision erstellen, löst Lambda die genaue Objektversion auf und pinnt sie an, auch wenn Sie sie weglassen. versionId Wenn Sie jedoch eine alte Objektversion löschen, auf die eine Revision verweist, wechselt diese Revision in den Status. Failed Das Hochladen eines Ersatzobjekts hilft nicht, da es sich bei dem Ersatz um eine neue Version mit einer anderen Versions-ID handelt.

Multi-Region Bereitstellungen

Für Webfunktionen mit MultiRegion oder PerRegion Endpunkten liest Lambda Ihr Quellobjekt aus dem von Ihnen angegebenen Bucket, unabhängig davon, in welcher Region sich der Bucket befindet. Lambda repliziert dann das vorbereitete Codeartefakt, das es von diesem Objekt ableitet, in die anderen Regionen. Sie müssen Ihr Bereitstellungspaket nicht in Buckets in anderen Regionen kopieren. Weitere Informationen darüber, was Lambda repliziert, finden Sie unter. Was Lambda repliziert