Blau/Grün-Bereitstellung mit CodeDeploy - Amazon ECS

Blau/Grün-Bereitstellung mit CodeDeploy

Der Bereitstellungstyp Blau/Grün verwendet das von CodeDeploy gesteuerte Blau/Grün-Bereitstellungsmodell. Mit diesem Bereitstellungstyp können Sie eine neue Bereitstellung eines Service überprüfen, bevor Sie den Produktionsverkehr an ihn senden. Weitere Informationen finden Sie unter Was ist CodeDeploy? im AWS CodeDeploy-Benutzerhandbuch.

Für die Verschiebung des Datenverkehrs während einer Blau/Grün-Bereitstellung gibt es drei Möglichkeiten:

  • Canary: Der Datenverkehr wird in zwei Inkrementen verschoben. Sie können aus vordefinierten Canary-Optionen auswählen, die den Prozentsatz des Datenverkehrs, der im ersten Inkrementschritt zu Ihrem aktualisierten Aufgabensatz verschoben wird, sowie das Zeitintervall (in Minuten) angeben, das verstreichen soll, bevor der restliche Datenverkehr im zweiten Inkrementschritt verschoben wird.

  • Linear: Der Datenverkehr wird in gleich großen Inkrementen mit einer gleichen Anzahl von Minuten zwischen den Inkrementen verschoben. Sie können aus vordefinierten linearen Optionen auswählen, die den Prozentsatz des Datenverkehrs, der in den einzelnen Inkrementschritten verschoben wird, sowie das Zeitintervall (in Minuten) zwischen den einzelnen Inkrementschritten angeben.

  • Alles auf einmal: Der gesamte Datenverkehr wird in einem einzigen Schritt aus dem ursprünglichen Aufgabensatz zum aktualisierten Aufgabensatz verschoben.

Nachfolgend finden Sie Komponenten von CodeDeploy, die Amazon ECS verwendet, wenn ein Service den Blau/Grün-Bereitstellungstyp verwendet:

CodeDeploy-Anwendung

Eine Sammlung von CodeDeploy-Ressourcen. Sie besteht aus einer oder mehreren Bereitstellungsgruppen.

CodeDeploy-Bereitstellungsgruppe

Die Bereitstellungseinstellungen. Diese bestehen aus:

  • Amazon ECS-Cluster und -Service

  • Load Balancer Zielgruppen- und Listener-Informationen

  • Rollback-Strategie für die Bereitstellung

  • Einstellungen zur Verkehrsumlenkung

  • Beendigungseinstellungen der ursprünglichen Revision

  • Bereitstellungskonfiguration

  • CloudWatch-Alarmkonfiguration, die so eingerichtet werden kann, dass sie Bereitstellungen beendet

  • SNS- oder CloudWatch Events-Einstellungen für Benachrichtigungen

Weitere Informationen finden Sie unter Arbeiten mit Bereitstellungsgruppen im AWS CodeDeploy-Benutzerhandbuch.

Bereitstellungskonfiguration von CodeDeploy

Gibt an, wie CodeDeploy den Produktionsverkehr an Ihre Ersatzaufgabe weiterleitet, die während einer Bereitstellung festgelegt wurde. Die folgenden vordefinierten linearen und Canary-Bereitstellungskonfigurationen sind verfügbar. Sie können auch benutzerdefinierte lineare und Canary-Bereitstellungen erstellen. Weitere Informationen finden Sie unter Arbeiten mit Bereitstellungskonfigurationen im AWS CodeDeploy-Benutzerhandbuch.

Bereitstellungskonfiguration

Beschreibung

CodeDeployDefault.ECSLinear10PercentEvery1Minutes

Verschiebt jede Minute 10 Prozent des Datenverkehrs, bis der gesamte Datenverkehr verschoben wurde.

CodeDeployDefault.ECSLinear10PercentEvery3Minutes

Verschiebt alle drei Minuten 10 Prozent des Datenverkehrs, bis der gesamte Datenverkehr verschoben wurde.

CodeDeployDefault.ECSCanary10percent5Minutes

Verschiebt im ersten Inkrementschritt 10 Prozent des Datenverkehrs. Die restlichen 90 Prozent werden fünf Minuten später bereitgestellt.

CodeDeployDefault.ECSCanary10percent15Minutes

Verschiebt im ersten Inkrementschritt 10 Prozent des Datenverkehrs. Die restlichen 90 Prozent werden 15 Minuten später bereitgestellt.

CodeDeployDefault.ECSAllAtOnce

Verschiebt den gesamten Datenverkehr in einem einzigen Schritt zum aktualisierten Amazon ECS-Container.

Revision

Eine Revision ist die CodeDeploy-Anwendungsspezifikationsdatei (AppSpec-Datei). In der AppSpec-Datei geben Sie den vollständigen ARN der Aufgabendefinition und den Container und Port Ihres Ersatz-Aufgabensets an, an den der Datenverkehr bei der Erstellung einer neuen Bereitstellung weitergeleitet werden soll. Der Containername muss einer der Containernamen sein, auf die in Ihrer Aufgabendefinition verwiesen wird. Wenn die Netzwerkkonfiguration oder Plattformversion in der Servicedefinition aktualisiert wurde, müssen Sie diese Details auch in der AppSpec-Datei angeben. Sie können auch die Lambda-Funktionen angeben, die während des Bereitstellungs-Lebenszyklus ausgeführt werden sollen. Mit den Lambda-Funktionen können Sie während der Bereitstellung Tests durchführen und Metriken zurückgeben. Weitere Informationen zu AppSpec-Dateireferenz finden Sie im AWS CodeDeploy-Benutzerhandbuch.

Überlegungen zur Blau/Grün-Bereitstellung

Beachten Sie Folgendes, wenn Sie den Blau/Grün-Bereitstellungstyp verwenden:

  • Wenn ein Amazon-ECS-Service mit dem Blau/Grün-Bereitstellungstyp erstmals erstellt wird, wird ein Amazon-ECS-Aufgabensatz erstellt.

  • Sie müssen den Service für die Verwendung von entweder einem Application Load Balancer oder Network Load Balancer konfigurieren. Classic Load Balancer werden nicht unterstützt. Nachfolgend sind die Anforderungen an den Load Balancer aufgeführt:

    • Sie müssen dem Load Balancer, der zur Weiterleitung des Produktionsverkehrs verwendet wird, einen Produktions-Listener hinzufügen.

    • Dem Load Balancer, der zur Weiterleitung des Testverkehrs verwendet wird, kann ein optionaler Test-Listener hinzugefügt werden. Wenn Sie einen Test-Listener angeben, leitet CodeDeploy Ihren Testverkehr an die Ersatzaufgabe weiter, die während einer Bereitstellung eingerichtet wurde.

    • Sowohl der Produktions- als auch der Test-Listener müssen demselben Load Balancer angehören.

    • Sie müssen für den Load Balancer eine Zielgruppe definieren. Die Zielgruppe leitet den Datenverkehr über den Produktions-Listener an die ursprüngliche Aufgabe weiter, die in einem Service festgelegt wurde.

    • Bei Verwendung eines Network Load Balancer wird nur die CodeDeployDefault.ECSAllAtOnce-Bereitstellungskonfiguration unterstützt.

  • Bei Services, die für die Verwendung der Service Auto Scaling und der blau/grüne Bereitstellungstyp konfiguriert sind, wird die automatische Skalierung während einer Bereitstellung nicht blockiert, die Bereitstellung kann jedoch unter Umständen fehlschlagen. Im Folgenden wird dieses Verhalten ausführlich beschrieben.

    • Wenn ein Service skaliert und eine Bereitstellung gestartet wird, wird der grüne Aufgabensatz erstellt, und CodeDeploy wartet bis zu einer Stunde, bis der grüne Aufgabensatz den steady-Status erreicht, und verschiebt keinen Datenverkehr, bis er dies tut.

    • Wenn sich ein Service gerade in einer blau/grünen Bereitstellung befindet und ein Skalierungsereignis auftritt, wird der Datenverkehr für 5 Minuten weiter verschoben. Wenn der Service innerhalb von 5 Minuten den steady-Status nicht erreicht, stoppt CodeDeploy die Bereitstellung und markiert sie als fehlgeschlagen.

    • Wenn sich ein Service gerade in einer blau/grünen Bereitstellung befindet und ein Skalierungsereignis auftritt, wird die gewünschte Aufgabenzahl möglicherweise auf einen unerwarteten Wert festgelegt. Dies wird durch die automatische Skalierung verursacht, die die Anzahl der laufenden Aufgaben als aktuelle Kapazität berücksichtigt, was der doppelten Anzahl von Aufgaben entspricht, die in der Berechnung der gewünschten Aufgabenzahl verwendet werden.

  • Aufgaben, die den Starttyp Fargate oder die Controller-Typen CODE_DEPLOY verwenden, unterstützen die DAEMON-Scheduling-Strategie nicht.

  • Wenn Sie zunächst eine CodeDeploy-Anwendung und -Bereitstellungsgruppe erstellen, müssen Sie Folgendes angeben:

    • Sie müssen zwei Zielgruppen für den Load Balancer definieren. Eine Zielgruppe ist die ursprüngliche Zielgruppe, die für den Load Balancer beim Anlegen des Amazon-ECS-Service definiert wurde. Die einzige Anforderung der zweiten Zielgruppe besteht darin, dass sie nicht mit einem anderen Load Balancer als dem, den der Service verwendet, verknüpft werden darf.

  • Wenn Sie eine CodeDeploy-Bereitstellung für einen Amazon-ECS-Service erstellen, erstellt CodeDeploy einen Ersatzaufgabensatz (oder grünen Aufgabensatz) in der Bereitstellung. Wenn Sie dem Load Balancer einen Test-Listener hinzugefügt haben, leitet CodeDeploy Ihren Testdatenverkehr an den Ersatz-Aufgabensatz weiter. Dies ist der Zeitpunkt, an dem Sie Validierungstests durchführen können. CodeDeploy leitet den Produktionsdatenverkehr dann vom ursprünglichen Aufgabensatz zum Ersatz-Aufgabensatz um. Dabei gelten die Einstellungen für die Datenverkehrsumleitung der Bereitstellungsgruppe.

Amazon ECS-Konsolenerfahrung

Die Workflows zum Erstellen und Aktualisieren von Services in der Amazon ECS-Konsole unterstützen Blau/Grün-Bereitstellungen.

Informationen zum Erstellen eines neuen Amazon-ECS-Service, der den Blau/Grün-Bereitstellungstyp verwendet, finden Sie unter Erstellen eines Amazon-ECS-Services.

Um einen bestehenden Amazon-ECS-Service zu aktualisieren, der den Blau/Grün-Bereitstellungstyp verwendet, siehe Aktualisierung eines Service.

Wenn Sie mithilfe der Amazon ECS-Konsole einen Amazon-ECS-Service mit dem Blau/Grün-Bereitstellungstyp erstellen, werden ein Amazon-ECS-Aufgabensatz und die folgenden CodeDeploy-Ressourcen automatisch mit den folgenden Standardeinstellungen erstellt.

Ressource

Standardeinstellung

Anwendungsname

AppECS-<cluster[:47]>-<service[:47]>

Name einer Bereitstellungsgruppe

DgpECS-<cluster[:47]>-<service[:47]>

Informationen zum Load Balancer der Bereitstellungsgruppe

Der Load Balancer Produktions-Listener, der optionale Test-Listener und die Zielgruppen werden zur Gruppenkonfiguration der Bereitstellung hinzugefügt.

Einstellungen zur Verkehrsumlenkung

Verkehrsumleitung: Die Standardeinstellung ist Reroute traffic immediately (Verkehr sofort umleiten). Sie können sie in der CodeDeploy-Konsole oder durch Aktualisieren von TrafficRoutingConfig ändern. Weitere Informationen finden Sie unter CreateDeploymentConfig in der AWS CodeDeploy-API-Referenz.

Beendigungseinstellungen der ursprünglichen Revision

Die ursprünglichen Einstellungen für das Beenden der Revision sind so konfiguriert, dass nach dem Umleiten des Datenverkehrs 1 Stunde lang gewartet wird, bevor der blaue Aufgabensatz beendet wird.

Bereitstellungskonfiguration

Die Bereitstellungskonfiguration ist standardmäßig auf CodeDeployDefault.ECSAllAtOnce festgelegt. Das bedeutet, dass der gesamte Datenverkehr in einem einzigen Schritt vom blauen zum grünen Aufgabensatz umgeleitet wird. Die Bereitstellungskonfiguration kann nach der Erstellung des Service über die AWS CodeDeploy-Konsole geändert werden.

Automatische Rollback-Konfiguration

Wenn eine Bereitstellung fehlschlägt, sind die automatischen Rollback-Einstellungen so konfiguriert, dass die Bereitstellung zurückgesetzt wird.

Um Details zu einem Amazon-ECS-Service mit dem Blau/Grün-Bereitstellungstyp anzuzeigen, verwenden Sie die Registerkarte Deployments (Bereitstellungen) in der Amazon ECS-Konsole.

Informationen zum Anzeigen der Details einer CodeDeploy-Bereitstellungsgruppe in der CodeDeploy-Konsole finden Sie unter Anzeigen von Bereitstellungsgruppendetails mit CodeDeploy im AWS CodeDeploy-Benutzerhandbuch.

Informationen zum Ändern der Einstellungen für eine CodeDeploy-Bereitstellungsgruppe in der CodeDeploy-Konsole finden Sie unter Ändern der Bereitstellungsgruppeneinstellungen mit CodeDeploy im AWS CodeDeploy-Benutzerhandbuch.

Für AWS CloudFormation wurde Unterstützung für die Durchführung einer blau/grünen Bereitstellung hinzugefügt. Weitere Informationen finden Sie unter Ausführen von Amazon ECS-Blau/Grün-Bereitstellungen über CodeDeploy mithilfe von AWS CloudFormation im AWS CloudFormation-Benutzerhandbuch.

Erforderliche IAM-Berechtigungen für die Blau/Grün-Bereitstellung

Blau/Grün-Bereitstellungen von Amazon ECS werden durch eine Kombination der Amazon ECS- und CodeDeploy-APIs ermöglicht. IAM-Benutzer müssen über die entsprechenden Berechtigungen für diese Services verfügen, bevor sie Amazon ECS-Blau/Grün-Bereitstellungen in AWS Management Console oder mit AWS CLI oder SDKs verwenden können.

Zusätzlich zu den IAM-Standardberechtigungen für das Erstellen und Aktualisieren von Services erfordert Amazon ECS folgende Berechtigungen. Diese Berechtigungen wurden der AmazonECS_FullAccess-IAM-Richtlinie hinzugefügt. Weitere Informationen finden Sie unter AmazonECS_FullAccess.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codedeploy:CreateApplication", "codedeploy:CreateDeployment", "codedeploy:CreateDeploymentGroup", "codedeploy:GetApplication", "codedeploy:GetDeployment", "codedeploy:GetDeploymentGroup", "codedeploy:ListApplications", "codedeploy:ListDeploymentGroups", "codedeploy:ListDeployments", "codedeploy:StopDeployment", "codedeploy:GetDeploymentTarget", "codedeploy:ListDeploymentTargets", "codedeploy:GetDeploymentConfig", "codedeploy:GetApplicationRevision", "codedeploy:RegisterApplicationRevision", "codedeploy:BatchGetApplicationRevisions", "codedeploy:BatchGetDeploymentGroups", "codedeploy:BatchGetDeployments", "codedeploy:BatchGetApplications", "codedeploy:ListApplicationRevisions", "codedeploy:ListDeploymentConfigs", "codedeploy:ContinueDeployment", "sns:ListTopics", "cloudwatch:DescribeAlarms", "lambda:ListFunctions" ], "Resource": [ "*" ] } ] }
Anmerkung

Zusätzlich zu den standardmäßigen Amazon ECS-Berechtigungen, die zum Ausführen von Aufgaben und Services erforderlich sind, benötigen IAM-Benutzer auch iam:PassRole-Berechtigungen, um IAM-Rollen für Aufgaben verwenden zu können.

CodeDeploy benötigt Berechtigungen zum Aufrufen von Amazon ECS-APIs, Ändern Ihres Elastic Load Balancing, Aufrufen von Lambda-Funktionen und Beschreiben von CloudWatch-Alarmen sowie Berechtigungen zum Ändern der gewünschten Anzahl Ihrer Services in Ihrem Namen. Bevor Sie einen Amazon-ECS-Service erstellen, der den Blau/Grün-Bereitstellungstyp verwendet, müssen Sie eine IAM-Rolle erstellen (ecsCodeDeployRole). Weitere Informationen finden Sie unter Amazon ECS CodeDeploy IAM-Rolle.

Die Beispiele für die IAM-Richtlinien Beispiel für die Service-Erstellung und Beispiel für die Service-Aktualisierung zeigen die Berechtigungen, die erforderlich sind, damit IAM-Benutzer Amazon ECS-Blau/Grün-Bereitstellungen in AWS Management Console verwenden können.