Bereitstellungen migrieren CodeDeploy blue/green deployments to Amazon ECS blue/green - 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.

Bereitstellungen migrieren CodeDeploy blue/green deployments to Amazon ECS blue/green

CodeDeploy blue/green and Amazon ECS blue/greenBereitstellungen bieten ähnliche Funktionen, unterscheiden sich jedoch darin, wie Sie sie konfigurieren und verwalten.

CodeDeploy Übersicht über die Bereitstellung in Blau/Grün

Wenn Sie einen Amazon ECS-Service mit erstellen CodeDeploy, gehen Sie wie folgt vor:

  1. Erstellen Sie einen Load Balancer mit einem Produktions-Listener und (optional) einem Test-Listener. Jeder Listener ist mit einer einzigen (Standard-) Regel konfiguriert, die den gesamten Datenverkehr an eine einzige Zielgruppe (die primäre Zielgruppe) weiterleitet.

  2. Erstellen Sie einen Amazon ECS-Service, der für die Verwendung des Listeners und der Zielgruppe konfiguriert ist und dessen deploymentController Typ auf CODE_DEPLOY gesetzt ist. Die Erstellung eines Dienstes führt zur Erstellung eines (blauen) Aufgabensatzes, der für die angegebene Zielgruppe registriert ist.

  3. Erstellen Sie eine CodeDeploy Bereitstellungsgruppe (als Teil einer CodeDeploy Anwendung) und konfigurieren Sie sie mit Details zum Amazon ECS-Cluster, dem Servicenamen, den Load Balancer-Listenern, zwei Zielgruppen (die primäre Zielgruppe, die in der Produktions-Listener-Regel verwendet wird, und einer sekundären Zielgruppe, die für Ersatzaufgaben verwendet wird), einer Servicerolle (zur Erteilung von CodeDeploy Berechtigungen zur Bearbeitung von Amazon ECS- und Elastic Load Balancing Balancing-Ressourcen) und verschiedenen Parametern, die das Bereitstellungsverhalten steuern.

Mit CodeDeploy werden neue Versionen eines Dienstes unter Angabe des CodeDeploy AnwendungsnamensCreateDeployment(), des Namens der Bereitstellungsgruppe und einer AppSpec Datei bereitgestellt, die Details zur neuen Version und optionale Lifecycle-Hooks enthält. Bei der CodeDeploy Bereitstellung wird ein Ersatzaufgabensatz (grün) erstellt und dessen Aufgaben bei der sekundären Zielgruppe registriert. Sobald der Fehler behoben ist, steht er für Tests (optional) und für die Produktion zur Verfügung. In beiden Fällen wird das Re-Routing dadurch erreicht, dass die jeweilige Listener-Regel so geändert wird, dass sie auf die sekundäre Zielgruppe verweist, die dem grünen Task-Set zugeordnet ist. Ein Rollback wird erreicht, indem die Listener-Regel für die Produktion wieder auf die primäre Zielgruppe zurückgesetzt wird.

Überblick über die blue/green Bereitstellung von Amazon ECS

Bei Amazon blue/green ECS-Bereitstellungen ist die Bereitstellungskonfiguration Teil des Amazon ECS-Service selbst:

  1. Sie müssen den Load Balancer-Produktions-Listener mit einer Regel vorkonfigurieren, die zwei Zielgruppen mit den Gewichtungen 1 und 0 umfasst.

  2. Sie müssen die folgenden Ressourcen angeben oder die Dienstressourcen aktualisieren:

    • Der ARN dieser Listener-Regel

    • Die beiden Zielgruppen

    • Eine IAM-Rolle, um Amazon ECS die Erlaubnis zu erteilen, Elastic Load Balancing aufzurufen APIs

    • Eine optionale IAM-Rolle zur Ausführung von Lambda-Funktionen

    • Setzen Sie den deploymentController Typ auf ECS und deploymentConfiguration.strategy auf. BLUE_GREEN Dadurch entsteht eine (blaue) Servicebereitstellung, deren Aufgaben bei der primären Zielgruppe registriert sind.

Wenn Amazon ECS blau/grün ist, wird eine neue Service-Revision erstelltUpdateService(), indem Amazon ECS aufgerufen und die Details der neuen Version übergeben werden. Bei der Servicebereitstellung werden neue (grüne) Aufgaben zur Service-Revision erstellt und diese bei der sekundären Zielgruppe registriert. Amazon ECS wickelt Umleitungs- und Rollback-Operationen ab, indem es die Gewichtungen der Listener-Regel ändert.

Die wichtigsten Unterschiede bei der Implementierung

Beide Ansätze führen zwar zur Schaffung eines ersten Aufgabenkatalogs, die zugrunde liegende Umsetzung unterscheidet sich jedoch:

  • CodeDeploy verwendet einen Tasksatz, während Amazon ECS eine Service-Revision verwendet. Amazon ECS-Aufgabensätze sind ein älteres Konstrukt, das durch Revisionen und Bereitstellungen von Amazon ECS-Services ersetzt wurde. Letztere bieten einen besseren Einblick in den Bereitstellungsprozess sowie in die Servicebereitstellung und den Verlauf der Service-Revisionen.

  • Mit CodeDeploy werden Lifecycle-Hooks als Teil der AppSpec Datei angegeben, an die geliefert wirdCreateDeployment(). Das bedeutet, dass die Hooks von einer Bereitstellung zur nächsten geändert werden können. Bei Amazon ECS blau/grün werden die Hooks als Teil der Servicekonfiguration angegeben, und für alle Aktualisierungen wäre ein UpdateService() Aufruf erforderlich.

  • CodeDeploy Sowohl Amazon ECS als auch Amazon ECS blue/green verwenden Lambda für die Hook-Implementierung, aber die erwarteten Eingaben und Ausgaben unterscheiden sich.

    Bei muss die Funktion aufgerufen werden CodeDeploy, PutLifecycleEventHookExecutionStatus() um den Hook-Status zurückzugeben, der entweder SUCCEEDED oder FAILED sein kann. Bei Amazon ECS wird die Lambda-Antwort verwendet, um den Hook-Status anzuzeigen.

  • CodeDeploy ruft jeden Hook als einmaligen Aufruf auf und erwartet, dass innerhalb einer Stunde ein endgültiger Ausführungsstatus zurückgegeben wird. Amazon ECS-Hooks sind insofern flexibler, als sie einen IN_PROGRESS Indikator zurückgeben können, der signalisiert, dass der Hook wiederholt erneut aufgerufen werden muss, bis er zu oder führt. SUCCEEDED FAILED Weitere Informationen finden Sie unter Lifecycle-Hooks für Amazon ECS-Servicebereitstellungen.

Migrationsansätze

Es gibt drei Hauptansätze für die Migration von CodeDeploy blue/green to Amazon ECS blue/green Bereitstellungen. Jeder Ansatz weist unterschiedliche Merkmale in Bezug auf Komplexität, Risiko, Rollback-Fähigkeit und potenzielle Ausfallzeiten auf.

Wiederverwendung derselben Elastic Load Balancing Balancing-Ressourcen, die für verwendet wurden CodeDeploy

Sie aktualisieren den vorhandenen Amazon ECS-Service, sodass er den Amazon ECS Deployment Controller mit blue/green Deployment Strategy anstelle des CodeDeploy Deployment Controllers verwendet. Beachten Sie bei der Verwendung dieses Ansatzes Folgendes:

  • Das Migrationsverfahren ist einfacher, da Sie den vorhandenen Amazon ECS Service Deployment Controller und die Bereitstellungsstrategie aktualisieren.

  • Bei korrekter Konfiguration und Migration treten keine Ausfallzeiten auf.

  • Ein Rollback erfordert, dass Sie die Service-Revision rückgängig machen.

  • Das Risiko ist hoch, da es keine parallel Blau/Grün-Konfiguration gibt.

Sie verwenden denselben Load Balancer-Listener und dieselben Zielgruppen, für die auch verwendet werden. CodeDeploy Wenn Sie es verwenden, finden Sie weitere Informationen AWS CloudFormation unter. Eine AWS CloudFormation CodeDeploy blue/green deployment template to an Amazon ECS blue/green AWS CloudFormation Vorlage migrieren

  1. Ändern Sie die Standardregel der production/test Zuhörer so, dass sie die alternative Zielgruppe einbezieht, und legen Sie die Gewichtung der primären Zielgruppe auf 1 und der alternativen Zielgruppe auf 0 fest.

    Denn CodeDeploy die Listener des an den Service angeschlossenen Load Balancers sind mit einer einzigen (Standard-) Regel konfiguriert, die den gesamten Datenverkehr an eine einzige Zielgruppe weiterleitet. Für Amazon ECS blau/grün müssen die Load Balancer-Listener mit einer Regel vorkonfiguriert sein, die die beiden Zielgruppen mit Gewichtungen umfasst.

  2. Aktualisieren Sie den vorhandenen Amazon ECS-Service, indem Sie die UpdateService API aufrufen und den Parameter deploymentController auf ECS und den Parameter deploymentStrategy auf setzenBLUE_GREEN. Geben Sie ARNs die Zielgruppe, die alternative Zielgruppe, den Produktions-Listener und einen optionalen Test-Listener an.

  3. Stellen Sie sicher, dass der Dienst wie erwartet funktioniert.

  4. Löschen Sie das CodeDeploy Setup für diesen Amazon ECS-Service, da Sie jetzt Amazon ECS blau/grün verwenden.

Neuer Service mit vorhandenem Load Balancer

Bei diesem Ansatz wird die blue/green Strategie für die Migration verwendet.

Beachten Sie bei der Verwendung dieses Ansatzes Folgendes:

  • Es gibt nur minimale Störungen. Es tritt nur während des Elastic Load Balancing Balancing-Port-Swaps auf.

  • Ein Rollback erfordert, dass Sie den Elastic Load Balancing Balancing-Port-Swap rückgängig machen.

  • Das Risiko ist gering, da es parallel Konfigurationen gibt. Daher können Sie vor der Verkehrsverlagerung testen.

  1. Lassen Sie die Zuhörer, die Zielgruppen und den Amazon ECS-Service für das CodeDeploy Setup intakt, sodass Sie bei Bedarf problemlos zu diesem Setup zurückkehren können.

  2. Erstellen Sie neue Zielgruppen und neue Listener (mit anderen Ports als die ursprünglichen Listener) unter dem vorhandenen Load Balancer. Erstellen Sie dann einen neuen Amazon ECS-Service, der dem bestehenden Amazon ECS-Service entspricht, außer dass Sie ihn ECS als Deployment Controller, BLUE_GREEN als Bereitstellungsstrategie verwenden, und übergeben Sie die Regeln ARNs für die neuen Zielgruppen und die neuen Zuhörer.

  3. Überprüfen Sie das neue Setup, indem Sie HTTP-Verkehr manuell an den Service senden. Wenn alles gut geht, tauschen Sie die Ports der ursprünglichen Listener und der neuen Listener aus, um den Datenverkehr an das neue Setup weiterzuleiten.

  4. Überprüfen Sie das neue Setup, und wenn alles weiterhin wie erwartet funktioniert, löschen Sie das CodeDeploy Setup.

Neuer Dienst mit einem neuen Load Balancer

Wie der vorherige Ansatz verwendet auch dieser Ansatz die blue/green Strategie für die Migration. Der Hauptunterschied besteht darin, dass der Wechsel vom CodeDeploy Setup zum Amazon blue/green ECS-Setup auf einer Reverse-Proxy-Ebene über dem Load Balancer erfolgt. Beispielimplementierungen für die Reverse-Proxy-Schicht sind Route 53 und. CloudFront

Dieser Ansatz eignet sich für Kunden, die bereits über diese Reverse-Proxyschicht verfügen und wenn die gesamte Kommunikation mit dem Service über sie erfolgt (z. B. keine direkte Kommunikation auf Load Balancer-Ebene).

Beachten Sie bei der Verwendung dieses Ansatzes Folgendes:

  • Dies erfordert eine Reverse-Proxyschicht.

  • Das Migrationsverfahren ist komplexer, da Sie den vorhandenen Amazon ECS-Service Deployment Controller und die Bereitstellungsstrategie aktualisieren müssen.

  • Es gibt nur minimale Unterbrechungen. Es tritt nur während des Elastic Load Balancing Balancing-Port-Swaps auf.

  • Ein Rollback erfordert, dass Sie die Änderungen an der Proxykonfiguration rückgängig machen.

  • Das Risiko ist gering, da es parallel Konfigurationen gibt. Daher können Sie vor der Verkehrsverlagerung testen.

  1. Ändern Sie das bestehende CodeDeploy Setup nicht intakt (Load Balancer, Listener, Zielgruppen, Amazon ECS-Service und CodeDeploy Bereitstellungsgruppe).

  2. Erstellen Sie einen neuen Load Balancer, Zielgruppen und Listener, die für Amazon blue/green ECS-Bereitstellungen konfiguriert sind.

    Konfigurieren Sie die entsprechenden Ressourcen.

  3. Erstellen Sie einen neuen Dienst mit ECS einem Bereitstellungscontroller und BLUE_GREEN einer Bereitstellungsstrategie, der auf die neuen Load Balancer-Ressourcen verweist.

  4. Überprüfen Sie das neue Setup, indem Sie es mit dem neuen Load Balancer testen.

  5. Aktualisieren Sie die Reverse-Proxy-Konfiguration, um den Datenverkehr an den neuen Load Balancer weiterzuleiten.

  6. Beachten Sie die neue Service-Revision. Wenn alles weiterhin wie erwartet funktioniert, löschen Sie das CodeDeploy Setup.

Nächste Schritte

Nach der Migration zu Amazon blue/green ECS-Bereitstellungen:

  • Aktualisieren Sie Ihre Bereitstellungsskripte und CI/CD Pipelines, um die Amazon UpdateService ECS-API anstelle der CodeDeploy CreateDeployment API zu verwenden.

  • Aktualisieren Sie Ihre Überwachungs- und Warnmeldungen, um Amazon ECS-Servicebereitstellungen anstelle von CodeDeploy Bereitstellungen zu verfolgen.

  • Erwägen Sie die Implementierung automatisierter Tests Ihres neuen Bereitstellungsprozesses, um sicherzustellen, dass er wie erwartet funktioniert.