View a markdown version of this page

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

Bereitstellungsmuster

Um eine neue Version Ihrer AWS Lambda Web Function-Anwendung zu veröffentlichen, erstellen Sie eine neue Revision. Endgeräte, die so autoDeploymentMode eingestellt sind, dass sie den gesamten LatestRevisionDatenverkehr dorthin weiterleiten, sobald sie aktiv werden. Endgeräte, für die die Option Deaktiviert aktiviert ist, autoDeploymentMode stellen weiterhin ihre aktuellen Versionen bereit, bis Sie die Gewichtung der Versionen aktualisieren. Mithilfe des automatischen Bereitstellungsmodus und der Revisionsgewichte des Endpunkts steuern Sie, wie der Datenverkehr von der aktuellen zur neuen Version übertragen wird. In den folgenden Abschnitten werden beide Modi für die automatische Bereitstellung, gängige Bereitstellungsmuster (Canary, Blue-Green und Rollback) und die Regeln für die Gewichtung von Revisionen erläutert.

Änderungen an autoDeploymentMode und revisionWeights sind asynchrone Endpunkt-Updates. Warten SieupdateStatus, bis das Datum erreicht ist, Successful bevor Sie die Bereitstellung evaluieren oder ein weiteres Endpunkt-Update einreichen. Falls ein Update fehlschlägt, updateStatusReason wird die Ursache beschrieben.

Das folgende Diagramm zeigt eine Canary-Bereitstellung auf einem Endpunkt, dessen automatischer Bereitstellungsmodus Deaktiviert ist. Jede Gewichtsänderung ist ein asynchrones Endpunkt-Update.

  1. Revision 1 beginnt mit 100 Prozent des Datenverkehrs.

  2. Sie leiten 10 Prozent des Datenverkehrs an Version 2 weiter und überwachen ihn.

  3. Wenn Revision 2 Ihre Prüfungen bestanden hat, leiten Sie den gesamten Datenverkehr an sie weiter.

  4. Wenn Revision 2 fehlschlägt, setzen Sie die Gewichtung auf 100 Prozent zurück auf Version 1.

Bereitstellung auf Canary, bei der der Datenverkehr von Revision 1 auf Revision 2 verlagert wird, mit einem Rollback-Pfad auf Revision 1.

Auto-deployment Modi

Die autoDeploymentMode Einstellung auf einem Endpunkt steuert, ob Lambda den Datenverkehr bei der Bereitstellung automatisch an neue Versionen weiterleitet. Sie legen dies fest, wenn Sie den Endpunkt erstellen, und Sie können es auf einem vorhandenen Endpunkt ändern.

Wenn Sie es weglassenautoDeploymentMode, ist es standardmäßig. Disabled LatestRevisionwird nur für HomeRegion Endgeräte unterstützt, daher verwenden PerRegion Endpunkte MultiRegion immer. Disabled Bei der Verwendung Disabled legen Sie revisionWeights den Endpunkt fest, wie unter beschrieben. Revisionsgewichte

LatestRevision

Jedes Mal, wenn eine neue Revision aktiv wird, leitet Lambda 100% des Datenverkehrs des Endpunkts an sie weiter. Sie müssen die Revisionsgewichte nicht aktualisieren, und Sie können keine Revisionsgewichte festlegen, solange sich der Endpunkt in diesem Modus befindet. Verwenden Sie diesen Modus für Entwicklungs- und Staging-Umgebungen, in denen Sie eine automatische Bereitstellung ohne manuelles Eingreifen wünschen.

Deaktiviert

Lambda ändert das Traffic-Routing nicht, wenn Sie eine neue Revision erstellen. Sie steuern die Weiterleitung des Datenverkehrs manuell, indem Sie die Gewichtung der Revisionen festlegen. Verwenden Sie diesen Modus für Produktionsumgebungen, in denen Sie die Einführung neuer Versionen mit kanarischen oder blaugrünen Bereitstellungsmustern steuern möchten.

Um den Modus für die automatische Bereitstellung zu ändern (AWS CLI)
  1. Verwenden Sie AWS Command Line Interface (AWS CLI), um den Endpunkt zu aktualisieren und die automatische Bereitstellung zu deaktivieren.

    aws lambda-web update-web-function-endpoint \ --function-name my-web-app \ --endpoint-name my-endpoint \ --auto-deployment-mode Disabled
  2. Warten Sie, bis das Endpunkt-Update abgeschlossen ist.

    aws lambda-web wait web-function-endpoint-updated \ --function-name my-web-app \ --endpoint-name my-endpoint

Wechseln zwischen den Modi

Wenn Sie ohne Angabe von Versionsgewichten von Deaktiviert LatestRevisionzu wechseln, bleibt das aktuelle Datenverkehrsrouting nach erfolgreicher Aktualisierung unverändert. Die Version, an die der Endpunkt den Verkehr vor dem Update weitergeleitet hat, empfängt weiterhin 100% des Datenverkehrs, auch wenn Sie neuere Versionen erstellt haben. Dieser Datenverkehr wird beibehalten, bis Sie die Revisionsgewichte aktualisieren. Sie können in derselben UpdateWebFunctionEndpoint Anfrage auch den Modus wechseln und die Revisionsgewichte festlegen.

Wenn Sie von Deaktiviert zu wechseln LatestRevision, aktualisiert Lambda den Endpunkt so, dass 100% des Datenverkehrs auf die neueste Version weitergeleitet werden. Die neueste Version muss aktiv sein. Wenn sie „Ausstehend“ oder „Fehlgeschlagen“ lautet, schlägt die Anforderung mit einem Konfliktfehler fehl. Nach erfolgreicher Aktualisierung gelten die zuvor konfigurierten Revisionsgewichte nicht mehr.

Revisionsgewichte

Wenn der automatische Bereitstellungsmodus deaktiviert ist, steuern Sie die Verkehrsweiterleitung, indem Sie Revisionen Gewichte zuweisen. Lambda verteilt den Traffic zwischen den Revisionen proportional zu ihren Gewichten.

Bei der Gewichtung von Revisionen handelt es sich um eine Einstellung am Endpunkt (die revisionWeights Eigenschaft), mit der Sie Änderungen vornehmen. UpdateWebFunctionEndpoint Sie sind keine Einstellung für die Revision.

Für die Gewichte der Revisionen gelten die folgenden Regeln:

  • Jedes Gewicht ist eine Ganzzahl von 1 bis 100.

  • Die Gewichte in einer Anfrage müssen sich auf genau 100 summieren.

  • Jede Revision kann in den Gewichtungen nur einmal vorkommen.

  • Jede Version der Gewichtungen muss sich beim Einstellen der Gewichtungen im Status Aktiv befinden. Andernfalls lehnt die API die Anfrage ab.

  • Ein Endpunkt leitet den Datenverkehr gleichzeitig an maximal zwei Revisionen weiter.

  • Keine Gewichtung hat einen Standardwert. Um den gesamten Datenverkehr an eine Revision weiterzuleiten, geben Sie nur die Revision mit einer Gewichtung von 100 an. Eine Revision, die nicht in den Gewichtungen enthalten ist, empfängt keinen Verkehr von diesem Endpunkt.

Revisionsbezeichner werden von Lambda generiert, wenn Sie eine Revision erstellen. Verwenden Sie den folgenden Befehl, um Revisionsbezeichner für Ihre Web-Funktion zu finden:

aws lambda-web list-web-function-revisions \ --function-name my-web-app

In der Antwort werden die Revisionen in der Reihenfolge von der neuesten zur ältesten Version aufgeführt, einschließlich ihrer Kennungen, Erstellungszeitstempel und des aktuellen Status.

Bereitstellungsmuster

Die folgenden Bereitstellungsmuster verwenden Revisionsgewichte, um zu steuern, wie der Datenverkehr von Ihrer aktuellen Revision zu einer neuen Revision fließt. Für diese Muster muss der automatische Bereitstellungsmodus des Endpunkts (die autoDeploymentMode Endpunkteinstellung) deaktiviert sein. Der Endpunkt, den der aws lambda-web deploy Befehl erstellt, verwendet LatestRevision. Um diese Muster auf diesem Endpunkt zu verwenden, schalten Sie ihn zunächst auf Deaktiviert um, wie unter gezeigtAuto-deployment Modi.

Bereitstellung auf Canary

Bei einer Bereitstellung auf Canary wird ein kleiner Teil des Datenverkehrs an die neue Version weitergeleitet, sodass Sie zunächst nach Fehlern suchen können, bevor Sie den gesamten Datenverkehr weiterleiten. Wenn bei der neuen Version Probleme auftreten, ist nur ein kleiner Teil der Anfragen betroffen.

Um eine Canary-Bereitstellung durchzuführen (AWS CLI)
  1. Erstellen Sie eine neue Version mit Ihrem aktualisierten Code.

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

    Notieren Sie sich die Revisions-ID in der Antwort.

    Eine neue Revision kopiert keine Einstellungen aus der aktuellen Revision. Jede serviceConfig Einstellung, die Sie auslassen, erhält ihren Standardwert, z. B. einen Wert timeoutSeconds von 30 und keine Umgebungsvariablen. Schließen Sie alle Einstellungen ein, die die aktuelle Version verwendet, z. B.environmentVariables, timeoutSecondsmaxConcurrencyPerEnvironment, undtelemetryConfig. Um die Konfiguration der aktuellen Revision zu sehen, führen Sie den Befehl ausaws lambda-web get-web-function-revision.

  2. Warten Sie, bis die neue Revision aktiv ist. Die API lehnt Revisionsgewichte ab, die auf eine Revision verweisen, die nicht aktiv ist.

    aws lambda-web wait web-function-revision-active \ --function-name my-web-app \ --revision-id rev-def45
  3. Leitet 10% des Datenverkehrs an die neue Revision und 90% an die aktuelle Revision weiter.

    aws lambda-web update-web-function-endpoint \ --function-name my-web-app \ --endpoint-name my-endpoint \ --revision-weights '[{"revisionId": "rev-abc12", "weight": 90}, {"revisionId": "rev-def45", "weight": 10}]'
  4. Warten Sie, bis das Endpunkt-Update abgeschlossen ist.

    aws lambda-web wait web-function-endpoint-updated \ --function-name my-web-app \ --endpoint-name my-endpoint
  5. Überwachen Sie die neue Version anhand von Anwendungsprotokollen oder benutzerdefinierten Metriken. Fügen Sie eine Build- oder Revisions-ID hinzu, die Sie kontrollieren. Metriken für Webfunktionen enthalten keine Revisionsdimension. Daher können sie Canary-Fehler nicht von Fehlern in der aktuellen Version trennen. Details hierzu finden Sie unter Verwenden von CloudWatch Metriken mit Lambda-Webfunktionen. Wenn der Canary die Fehler- und Latenzschwellenwerte erfüllt, die Sie vor dem Rollout definiert haben, erhöhen Sie seine Gewichtung.

    aws lambda-web update-web-function-endpoint \ --function-name my-web-app \ --endpoint-name my-endpoint \ --revision-weights '[{"revisionId": "rev-abc12", "weight": 50}, {"revisionId": "rev-def45", "weight": 50}]'
  6. Warten Sie, bis das Endpunkt-Update abgeschlossen ist.

    aws lambda-web wait web-function-endpoint-updated \ --function-name my-web-app \ --endpoint-name my-endpoint
  7. Wenn Sie sicher sind, dass die neue Version fehlerfrei ist, leiten Sie den gesamten Datenverkehr an sie weiter.

    aws lambda-web update-web-function-endpoint \ --function-name my-web-app \ --endpoint-name my-endpoint \ --revision-weights '[{"revisionId": "rev-def45", "weight": 100}]'
  8. Warten Sie, bis das Endpunkt-Update abgeschlossen ist.

    aws lambda-web wait web-function-endpoint-updated \ --function-name my-web-app \ --endpoint-name my-endpoint

Blue-green Bereitstellung

Bei einer blaugrünen Bereitstellung wird der Datenverkehr weiterhin von der aktuellen Version bereitgestellt, während Sie die neue Version validieren. Anschließend wird der gesamte Datenverkehr in einem Endpunkt-Update auf die neue Version umgestellt. Das folgende Verfahren validiert mit einer gleichmäßigen Verteilung des Datenverkehrs. Verwenden Sie zur Validierung ohne Produktionsdatenverkehr einen separaten Testendpunkt, wie unter beschriebenÜberlegungen zur Bereitstellung.

Um eine blaugrüne Bereitstellung durchzuführen (AWS CLI)
  1. Erstellen Sie eine neue Version mit Ihrem aktualisierten Code und warten Sie, bis sie aktiv ist. Verwenden Sie dieselben Befehle wie im vorherigen Canary-Bereitstellungsverfahren.

  2. Teilen Sie den Verkehr gleichmäßig auf die beiden Revisionen auf.

    aws lambda-web update-web-function-endpoint \ --function-name my-web-app \ --endpoint-name my-endpoint \ --revision-weights '[{"revisionId": "rev-abc12", "weight": 50}, {"revisionId": "rev-def45", "weight": 50}]'
  3. Warten Sie, bis das Endpunkt-Update abgeschlossen ist.

    aws lambda-web wait web-function-endpoint-updated \ --function-name my-web-app \ --endpoint-name my-endpoint
  4. Überwachen Sie beide Versionen anhand von Anwendungsprotokollen oder benutzerdefinierten Metriken. Fügen Sie eine Build- oder Revisions-ID hinzu, die Sie kontrollieren. Wenn die neue Version die Integritätskriterien erfüllt, die Sie vor dem Rollout definiert haben, leiten Sie den gesamten Datenverkehr an sie weiter.

    aws lambda-web update-web-function-endpoint \ --function-name my-web-app \ --endpoint-name my-endpoint \ --revision-weights '[{"revisionId": "rev-def45", "weight": 100}]'
  5. Warten Sie, bis das Endpunkt-Update abgeschlossen ist.

    aws lambda-web wait web-function-endpoint-updated \ --function-name my-web-app \ --endpoint-name my-endpoint

Wird zurückgesetzt

Wenn Sie Probleme mit einer neuen Version feststellen (hohe Fehlerraten, erhöhte Latenz), können Sie ein Rollback mit einem einzigen Endpunkt-Update durchführen, das den gesamten Datenverkehr an die vorherige, zweifelsfrei funktionierende Version weiterleitet.

Rollback im Modus LatestRevision

Der automatische Bereitstellungsmodus eines Endpunkts ist zwar aktiviert, aber eine Anfrage LatestRevision, die nur Revisionsgewichte festlegt, schlägt fehl. Mit dem folgenden Verfahren wird der automatische Bereitstellungsmodus auf Deaktiviert gesetzt und die Revision wird in derselben Anfrage gewichtet, sodass er in beiden Modi funktioniert.

Der Endpunkt bleibt dann im deaktivierten Modus, bis Sie ihn ändern.

Um zu einer früheren Version zurückzukehren (AWS CLI)
  1. Aktualisieren Sie den Endpunkt so, dass er 100% des Datenverkehrs an die zweifelsfrei funktionierende Version weiterleitet, und setzen Sie den Modus für die automatische Bereitstellung auf Deaktiviert.

    aws lambda-web update-web-function-endpoint \ --function-name my-web-app \ --endpoint-name my-endpoint \ --auto-deployment-mode Disabled \ --revision-weights '[{"revisionId": "rev-abc12", "weight": 100}]'
  2. Warten Sie, bis das Endpunkt-Update abgeschlossen ist.

    aws lambda-web wait web-function-endpoint-updated \ --function-name my-web-app \ --endpoint-name my-endpoint

Nachdem das Update erfolgreich war, beendet Lambda die Weiterleitung neuer Anfragen an die problematische Revision. In-flight Anfragen zu dieser Revision werden normal abgeschlossen. Weitere Hinweise zum Aktualisierungsstatus von Endpunkten finden Sie unterEndpunktzustände.

Wenn für die Revision, auf die Sie ein Rollback durchführen, nur wenige oder gar keine Ausführungsumgebungen laufen, skaliert Lambda sie, wenn der Verkehr dorthin verlagert wird. Anfragen können warten, bis die Ausführungsumgebungen initialisiert werden, was die Latenz erhöht. Anfragen können aufgrund von Startfehlern, der Ratenbeschränkung oder maximalen Umgebungen des Endpunkts oder des vCPU-Kontingents des Kontos immer noch fehlschlagen. Bei einigen dieser Fehler werden HTTP 429-Antworten zurückgegeben.

Überlegungen zur Bereitstellung

Was löst eine neue Revision aus?

Lambda erstellt eine neue Revision, wenn Sie aufrufenCreateWebFunctionRevision. Dazu gehören die Bereitstellung von neuem Anwendungscode und das Ändern von Konfigurationseinstellungen wie Timeout, Parallelität oder Umgebungsvariablen. Jede Änderung führt zu einer unveränderlichen Revision.

Kann ich eine neue Version testen, bevor ich den Produktionsdatenverkehr an sie weiterleite?

Ja. Sie können eine Revision nur über einen Endpunkt aufrufen, es gibt also zwei Ansätze:

  • Dedizierter Testendpunkt — Erstellen Sie einen separaten Endpunkt für Tests. Leiten Sie den Datenverkehr zuerst an die neue Version auf dem Testendpunkt weiter (indem Sie die Revisionsgewichte des Testendpunkts festlegen), validieren Sie sie und aktualisieren Sie dann die Gewichte des Produktionsendpunkts, sodass sie die neue Version enthalten.

  • Minimale Gewichtung — Weisen Sie der neuen Revision eine Gewichtung von 1% auf dem Produktionsendpunkt zu. Dadurch wird ein kleiner Teil des Produktionsverkehrs an die neue Version weitergeleitet, sodass Sie Fehler mit minimaler Auswirkung auf den Kunden überwachen können.

Was passiert mit Revisionen, die nicht in den Gewichten der Revisionen enthalten sind?

Eine Revision, die nicht in den Revisionsgewichten eines Endpunkts enthalten ist, empfängt keinen Datenverkehr von diesem Endpunkt. Ein anderer Endpunkt derselben Webfunktion kann immer noch zu ihm weiterleiten. Die Revision bleibt aktiv, bis Sie sie löschen oder bis sie bei der automatischen Bereinigung entfernt wird. Es wechselt zu Fehlgeschlagen, wenn Lambda den Zugriff auf sein Amazon S3 S3-Objekt verliert. Informationen zur automatischen Bereinigung finden Sie unter. Revisionsgrenzen und automatische Bereinigung

Wie finde ich heraus, welche Version die neueste ist?

Rufen Sie die Seite ListWebFunctionRevisions auf. In der Antwort werden die Versionen in absteigender Reihenfolge von aufgeführtcreatedAt, sodass die erste Revision in der Liste die neueste ist.

Kann ich einen Endpunkt löschen, während er Datenverkehr weiterleitet?

Ja. Wenn Sie einen Endpunkt löschen, beendet Lambda die Weiterleitung neuer Anfragen an diesen Endpunkt, und Anfragen an den Domainnamen des Endpunkts werden zurückgewiesen, nachdem der Löschvorgang wirksam wird. Die Revisionen selbst sind davon nicht betroffen und können weiterhin von anderen Endpunkten verwendet werden.

Kann ich eine Revision löschen, während sie Traffic empfängt?

Nein. Wenn ein Endpunkt Traffic an die Revision weiterleitet, auch wenn die regionalEndpoints Eigenschaft eines MultiRegion oder PerRegion -Endpunkts auf die Revision verweist, schlägt die DeleteWebFunctionRevision Anfrage mit einem Konfliktfehler fehl. Um die Revision zu löschen, aktualisieren Sie zunächst die Revisionsgewichte des Endpunkts, um ihn aus dem Datenverkehrsrouting auf allen Endpunkten zu entfernen, und löschen Sie ihn dann. Da Lambda das Löschen blockiert, solange einer Revision eine Gewichtung zugewiesen wurde, ändert das Löschen einer Revision niemals die Verkehrsverteilung eines Endpunkts.