View a markdown version of this page

Lambda-Hooks für Amazon ECS-Servicebereitstellungen - Amazon Elastic Container Service

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.

Lambda-Hooks für Amazon ECS-Servicebereitstellungen

Lambda-Hooks sind Lambda-Funktionen, die Amazon ECS in bestimmten Phasen einer Bereitstellung aufruft. Sie können Hooks verwenden, um Validierungstests durchzuführen, Governance-Richtlinien durchzusetzen oder benutzerdefinierte Logik zu implementieren, bevor die Bereitstellung fortgesetzt wird.

Wenn Amazon ECS Ihren Hook aufruft, muss Ihre Funktion ein JSON-Objekt zurückgeben, das ein hookStatus Feld enthält. Sie können dies optional einbeziehencallBackDelay, um das Timing von Wiederholungsversuchen zu steuern und Daten zwischen Aufrufen hookDetails zu übergeben. Wenn Ihre Funktion kein hookStatus gültiges Ergebnis zurückgibt oder wenn sie fehlschlägt, macht Amazon ECS die Bereitstellung rückgängig.

HookStatus-Werte

Die folgenden hookStatus Werte sind gültig:

  • SUCCEEDED- Die Bereitstellung wird bis zur nächsten Lebenszyklusphase fortgesetzt.

  • FAILED- Amazon ECS setzt die Bereitstellung auf die letzte erfolgreiche Service-Revision zurück.

  • IN_PROGRESS- Amazon ECS ruft die Funktion nach einer Verzögerung erneut auf. Standardmäßig beträgt die Verzögerung 30 Sekunden. Sie können diesen Wert anpassen, indem Sie callBackDelay neben dem ein zurückgebenhookStatus.

Das folgende Beispiel zeigt, wie ein hookStatus mit einer benutzerdefinierten Callback-Verzögerung zurückgegeben wird. In diesem Beispiel wiederholt Amazon ECS den Hook nach 60 Sekunden statt nach den standardmäßigen 30 Sekunden:

{ "hookStatus": "IN_PROGRESS", "callBackDelay": 60 }

Status wird mit HookDetails übergeben

Das hookDetails Feld ist ein Wörterbuch, mit dem Sie Daten an Ihre Lifecycle-Hook-Funktion übergeben können. Es gibt zwei Möglichkeiten zum AuffüllenhookDetails:

  • Bei der Erstellung oder Aktualisierung des Dienstes — Definieren Sie hookDetails in der Lifecycle-Hook-Konfiguration in Ihrer Service-Definition. Amazon ECS leitet diese Daten bei jedem Aufruf an Ihre Funktion weiter. Verwenden Sie dies, um Ihre Hooks für mehrere Dienste wiederverwendbar zu machen, indem Sie eine dienstspezifische Konfiguration übergeben.

  • Zur Laufzeit über IN_PROGRESS-Antworten — Rückgabe hookDetails zusammen mit dem IN_PROGRESS Hook-Status. Amazon ECS gibt diese Daten beim nächsten Aufruf an Ihre Funktion zurück. Verwenden Sie dies, um den Status zwischen Aufrufen ohne externen Speicher aufrechtzuerhalten.

Das folgende Beispiel zeigt eine Lifecycle-Hook-Konfiguration in einer Servicedefinition, die der Funktion einen S3-Bucket-Namen übergibt:

{ "hookTargetArn": "arn:aws:lambda:us-west-2:123456789012:function:my-approval-hook", "roleArn": "arn:aws:iam::123456789012:role/ecs-lambda-invoke-role", "lifecycleStages": [ "POST_TEST_TRAFFIC_SHIFT" ], "hookDetails": { "S3_BUCKET_NAME": "my-approval-bucket" } }

Wenn Ihre Funktion zurückkehrtIN_PROGRESS, können Sie sie auch hookDetails in die Antwort einbeziehen. Amazon ECS führt diese Daten zusammen und gibt sie beim nächsten Aufruf zurück. Zu den häufigsten Anwendungsfällen gehört die Weitergabe von Metrikzählern oder ARNs externer Ressourcen zwischen Aufrufen.

{ "hookStatus": "IN_PROGRESS", "callBackDelay": 30, "hookDetails": { "approvalChecked": true, "S3_BUCKET_NAME": "my-approval-bucket" } }

Beim nächsten Aufruf schließt Amazon ECS die hookDetails Nutzlast für das Ereignis zusammen mit: executionDetails

{ "executionId": "e8d5a28f-eb01-4f3c-9454-a30ba6dc54bc", "lifecycleStage": "POST_TEST_TRAFFIC_SHIFT", "resourceArn": "arn:aws:ecs:us-west-2:123456789012:service-deployment/my-cluster/my-service/EZe5RNVLH6PPzHXINuP28", "executionDetails": { "serviceArn": "arn:aws:ecs:us-west-2:123456789012:service/my-cluster/my-service", "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900", "testTrafficWeights": {}, "productionTrafficWeights": {} }, "hookDetails": { "approvalChecked": true, "S3_BUCKET_NAME": "my-approval-bucket" } }

Ihre Funktion kann lesenevent["hookDetails"], um auf die Konfiguration und den Status früherer Aufrufe zuzugreifen.

Anmerkung

Daten, die zur hookDetails Laufzeit hinzugefügt wurden, bleiben nur zwischen Aufrufen desselben Hooks innerhalb einer einzelnen Bereitstellung erhalten. Daten werden nicht zwischen verschiedenen Hooks innerhalb derselben Bereitstellung oder demselben Hook in verschiedenen Bereitstellungen übertragen.

Timeout-Konfiguration

Sie können ein Timeout für Lambda-Hooks mit konfigurieren. timeoutConfiguration Wenn die Lambda-Funktion nicht zurückkehrt SUCCEEDED oder FAILED bevor das Timeout abläuft, ergreift Amazon ECS die konfigurierte Timeout-Aktion.

Feld Description
timeoutConfiguration.timeoutInMinutes Wie lange muss man warten? Gültiger Bereich: 1 bis 1.440 (24 Stunden). Standard: 1.440 Minuten.
timeoutConfiguration.action Die Aktion, die ausgeführt werden soll, wenn das Timeout abläuft. Zulässige Werte: ROLLBACK, CONTINUE. Standard: ROLLBACK.

Unterstützte Lebenszyklusphasen

Sie können Lambda-Hooks in den folgenden Lebenszyklusphasen konfigurieren:

  • RECONCILE_SERVICE

  • PRE_SCALE_UP

  • POST_SCALE_UP

  • TEST_TRAFFIC_SHIFT

  • POST_TEST_TRAFFIC_SHIFT

  • PRE_PRODUCTION_TRAFFIC_SHIFT

  • PRODUCTION_TRAFFIC_SHIFT

  • POST_PRODUCTION_TRAFFIC_SHIFT

Bei linearen und kanarischen Bereitstellungen werden Lambda-Hooks bei jedem PRE_PRODUCTION_TRAFFIC_SHIFT Traffic-Shift-Schritt konfiguriert PRODUCTION_TRAFFIC_SHIFT oder aufgerufen.

Weitere Informationen zu Kategorien in Lebenszyklusphasen finden Sie unter. Lebenszyklus-Hooks für Amazon-ECS-Servicebereitstellungen

Lebenszyklus-Nutzdaten

Gängige Nutzdatenstruktur

Wenn Amazon ECS Ihre Lifecycle-Hook-Lambda-Funktion aufruft, enthält die Ereignisnutzlast die folgenden Felder der obersten Ebene:

  • executionId— Die eindeutige Kennung für diese Hook-Ausführung.

  • lifecycleStage— Die aktuelle Lebenszyklusphase (zum BeispielPRODUCTION_TRAFFIC_SHIFT).

  • resourceArn— Der ARN der Ressource, die mit der Bereitstellung verknüpft ist.

  • executionDetails— Ein Objekt, das die in der folgenden Liste beschriebenen bereitstellungsspezifischen Informationen enthält.

Das executionDetails-Objekt enthält die folgenden Felder:

  • serviceArn – Der Amazon-Ressourcenname (ARN) des Service.

  • targetServiceRevisionArn – Der ARN der Ziel-Service-Revision, die bereitgestellt wird.

  • testTrafficWeights – Eine Zuordnung der ARNs der Service-Revision zu den entsprechenden prozentualen Gewichtsanteilen für den Test-Datenverkehr.

  • productionTrafficWeights – Eine Zuordnung der ARNs der Service-Revision zu den entsprechenden prozentualen Gewichtsanteilen für den Produktionsdatenverkehr.

Das folgende Beispiel zeigt die vollständige Ereignisstruktur, die Ihre Lambda-Funktion empfängt:

{ "executionId": "f4fcae0f-9bec-41c6-ba87-0eaa0cef8af5", "lifecycleStage": "PRODUCTION_TRAFFIC_SHIFT", "resourceArn": "arn:aws:ecs:us-west-2:123456789012:service-deployment/my-cluster/my-service/EZe5RNVLH6PPzHXINuP28", "executionDetails": { "serviceArn": "arn:aws:ecs:us-west-2:123456789012:service/my-cluster/my-service", "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900", "testTrafficWeights": {}, "productionTrafficWeights": { "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900": 100, "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/1920498462936580504": 0 } } }

Lebenszyklusphasen-Nutzdaten

Die folgenden Abschnitte zeigen Beispiel-Payloads für jede Lebenszyklusphase. In diesen Beispielen ist die grüne Service-Revision (9313423515462893900) die neue Revision, die bereitgestellt wird, und die blaue Service-Revision (1920498462936580504) ist die bestehende Produktionsrevision.

PRE_SCALE_UP

Diese Phase findet statt, bevor Amazon ECS die Revisionsaufgaben für den Green Service startet. Die Green Service-Revision wurde noch nicht gestartet, und es wird kein Datenverkehr dorthin weitergeleitet.

{ "executionId": "e8d5a28f-eb01-4f3c-9454-a30ba6dc54bc", "lifecycleStage": "PRE_SCALE_UP", "resourceArn": "arn:aws:ecs:us-west-2:123456789012:service-deployment/my-cluster/my-service/EZe5RNVLH6PPzHXINuP28", "executionDetails": { "serviceArn": "arn:aws:ecs:us-west-2:123456789012:service/my-cluster/my-service", "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900", "testTrafficWeights": {}, "productionTrafficWeights": {} } }

POST_SCALE_UP

Diese Phase tritt ein, nachdem Amazon ECS die Revisionsaufgaben für den Green Service gestartet hat und sie fehlerfrei sind. Die grünen Aufgaben werden ausgeführt, empfangen aber noch keinen Datenverkehr.

{ "executionId": "8b095b05-7bb0-4c56-a223-a3f61f4f9295", "lifecycleStage": "POST_SCALE_UP", "resourceArn": "arn:aws:ecs:us-west-2:123456789012:service-deployment/my-cluster/my-service/EZe5RNVLH6PPzHXINuP28", "executionDetails": { "serviceArn": "arn:aws:ecs:us-west-2:123456789012:service/my-cluster/my-service", "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900", "testTrafficWeights": {}, "productionTrafficWeights": {} } }

TEST_TRAFFIC_SHIFT

Diese Phase tritt ein, wenn Amazon ECS den Testdatenverkehr auf die Green Service-Version umstellt. Sie testTrafficWeights zeigen, dass die grüne Version 100% des Testverkehrs erhält, während die blaue Version 0% erhält. Der Produktionsdatenverkehr fließt weiterhin zur blauen Version.

{ "executionId": "779085de-ab47-42bc-84ad-41f9914a8643", "lifecycleStage": "TEST_TRAFFIC_SHIFT", "resourceArn": "arn:aws:ecs:us-west-2:123456789012:service-deployment/my-cluster/my-service/EZe5RNVLH6PPzHXINuP28", "executionDetails": { "serviceArn": "arn:aws:ecs:us-west-2:123456789012:service/my-cluster/my-service", "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900", "testTrafficWeights": { "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900": 100, "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/1920498462936580504": 0 }, "productionTrafficWeights": {} } }

POST_TEST_TRAFFIC_SHIFT

Diese Phase tritt ein, nachdem Amazon ECS die Testverkehrsverlagerung abgeschlossen hat. Die Green Service-Revision verarbeitet 100% des Testverkehrs.

{ "executionId": "3a0345ba-b029-404b-890d-7da2a4b266aa", "lifecycleStage": "POST_TEST_TRAFFIC_SHIFT", "resourceArn": "arn:aws:ecs:us-west-2:123456789012:service-deployment/my-cluster/my-service/EZe5RNVLH6PPzHXINuP28", "executionDetails": { "serviceArn": "arn:aws:ecs:us-west-2:123456789012:service/my-cluster/my-service", "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900", "testTrafficWeights": {}, "productionTrafficWeights": {} } }

PRE_PRODUCTION_TRAFFIC_SHIFT

Diese Phase findet statt, bevor Amazon ECS den Produktionsverkehr auf die Green Service-Version umstellt. Bei linearen und kanarischen Bereitstellungen wird diese Phase vor jedem Schritt zur Verkehrsverlagerung aufgerufen.

{ "executionId": "a2b3c4d5-e6f7-8901-abcd-ef1234567890", "lifecycleStage": "PRE_PRODUCTION_TRAFFIC_SHIFT", "resourceArn": "arn:aws:ecs:us-west-2:123456789012:service-deployment/my-cluster/my-service/EZe5RNVLH6PPzHXINuP28", "executionDetails": { "serviceArn": "arn:aws:ecs:us-west-2:123456789012:service/my-cluster/my-service", "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900", "testTrafficWeights": {}, "productionTrafficWeights": { "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900": 0, "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/1920498462936580504": 100 } } }

PRODUCTION_TRAFFIC_SHIFT

Diese Phase tritt ein, wenn Amazon ECS den Produktionsverkehr auf die Green Service-Version umstellt. Sie productionTrafficWeights zeigen, dass die grüne Version 100% des Produktionsverkehrs erhält, während die blaue Version 0% erhält.

{ "executionId": "f4fcae0f-9bec-41c6-ba87-0eaa0cef8af5", "lifecycleStage": "PRODUCTION_TRAFFIC_SHIFT", "resourceArn": "arn:aws:ecs:us-west-2:123456789012:service-deployment/my-cluster/my-service/EZe5RNVLH6PPzHXINuP28", "executionDetails": { "serviceArn": "arn:aws:ecs:us-west-2:123456789012:service/my-cluster/my-service", "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900", "testTrafficWeights": {}, "productionTrafficWeights": { "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900": 100, "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/1920498462936580504": 0 } } }

POST_PRODUCTION_TRAFFIC_SHIFT

Diese Phase tritt ein, nachdem Amazon ECS die Verlagerung des Produktionsverkehrs abgeschlossen hat. Die Green Service-Revision kümmert sich jetzt um den gesamten Produktionsdatenverkehr.

{ "executionId": "5f40ed04-7e54-437d-b95d-98bc872fec49", "lifecycleStage": "POST_PRODUCTION_TRAFFIC_SHIFT", "resourceArn": "arn:aws:ecs:us-west-2:123456789012:service-deployment/my-cluster/my-service/EZe5RNVLH6PPzHXINuP28", "executionDetails": { "serviceArn": "arn:aws:ecs:us-west-2:123456789012:service/my-cluster/my-service", "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900", "testTrafficWeights": {}, "productionTrafficWeights": {} } }

Der Lebenszyklus wird beim Rollback unterbrochen

Es gibt keine spezielle ROLLBACK Lebenszyklusphase. Wenn ein Rollback stattfindet, ruft Amazon ECS Hooks erneut auf, die in den TEST_TRAFFIC_SHIFT Phasen PRODUCTION_TRAFFIC_SHIFT und (den Phasen des wiederkehrenden Aufrufs) registriert wurden. Während eines Rollbacks zeigen die Daten productionTrafficWeights in der Payload, dass der Verkehr wieder auf die blaue Version umgestellt wird.

Es targetServiceRevisionArn bleibt die grüne Version des ARN, weil sie immer noch das Ziel der ursprünglichen Bereitstellung ist, obwohl sich der Verkehr davon wegverlagert.

Das folgende Beispiel zeigt eine PRODUCTION_TRAFFIC_SHIFT Payload während eines Rollbacks. Beachten Sie, dass die blaue Version (1920498462936580504) jetzt 100% des Produktionsverkehrs erhält, während die grüne Version (9313423515462893900) 0% erhält:

{ "executionId": "70073435-cb99-457f-b900-6ee1dcad05ec", "lifecycleStage": "PRODUCTION_TRAFFIC_SHIFT", "resourceArn": "arn:aws:ecs:us-west-2:123456789012:service-deployment/my-cluster/my-service/EZe5RNVLH6PPzHXINuP28", "executionDetails": { "serviceArn": "arn:aws:ecs:us-west-2:123456789012:service/my-cluster/my-service", "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900", "testTrafficWeights": {}, "productionTrafficWeights": { "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900": 0, "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/1920498462936580504": 100 } } }

Um festzustellen, ob Ihr Hook während eines Rollbacks aufgerufen wird, aktivieren Sie das. productionTrafficWeights Wenn die targetServiceRevisionArn (grüne Revision) eine Gewichtung von 0% und die andere Revision eine Gewichtung von 100% hat, wird die Bereitstellung zurückgesetzt.