

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.

# CodeDeploy blaue/grüne Bereitstellungen für Amazon ECS
<a name="deployment-type-bluegreen"></a>

Wir empfehlen Ihnen, die Amazon blue/green ECS-Bereitstellung zu verwenden. Weitere Informationen finden Sie unter [Eine Amazon blue/green ECS-Bereitstellung erstellen](deploy-blue-green-service.md).

Der Bereitstellungstyp *Blau/Grün* verwendet das blue/green Bereitstellungsmodell, das von CodeDeploy gesteuert wird. 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](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html) im *AWS CodeDeploy Benutzerhandbuch*. Überprüfen Sie den Status eines Amazon ECS-Service vor der Bereitstellung

Es gibt drei Möglichkeiten, wie sich der Verkehr während einer blue/green Bereitstellung verlagern kann:
+ **Canary** – Der Datenverkehr wird in zwei Schritten verlagert. 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 Schritten mit einer gleichen Anzahl von Minuten zwischen den Schritten verlagert. 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.
+ **A ll-at-once** — Der gesamte Datenverkehr wird auf einmal vom ursprünglichen Task-Set auf das aktualisierte Task-Set umgestellt.

Die folgenden Komponenten werden von Amazon ECS verwendet CodeDeploy , wenn ein Service den blue/green 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
+ Informationen zu Load-Balancer-Zielgruppen- und Listenern
+ Rollback-Strategie für die Bereitstellung
+ Einstellungen zur Umleitung des Datenverkehrs
+ Beendigungseinstellungen der ursprünglichen Version
+ Bereitstellungskonfiguration
+ CloudWatch Alarm-Konfiguration, die so eingerichtet werden kann, dass Bereitstellungen gestoppt werden
+ SNS- oder CloudWatch Events-Einstellungen für Benachrichtigungen
Weitere Informationen finden Sie unter [Arbeiten mit Bereitstellungsgruppen](https://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-groups.html) im *AWS CodeDeploy -Benutzerhandbuch*.

**CodeDeploy Bereitstellungskonfiguration**  
Gibt an, wie CodeDeploy der Produktionsdatenverkehr während einer Bereitstellung an Ihren Ersatz-Tasksatz weitergeleitet wird. 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](https://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-configurations.html) im *AWS CodeDeploy -Benutzerhandbuch*.  
+ **CodeDeployDefault. ECSAllAtOnce**: Verschiebt den gesamten Datenverkehr auf einmal in den aktualisierten Amazon ECS-Container
+ **CodeDeployDefault. ECSLinear10PercentEvery1 Minuten**: Verschiebt jede Minute 10 Prozent des Verkehrs, bis der gesamte Verkehr verlagert ist.
+ **CodeDeployDefault. ECSLinear10PercentEvery3 Minuten**: Verschiebt alle 3 Minuten 10 Prozent des Verkehrs, bis der gesamte Verkehr verlagert ist.
+ **CodeDeployDefault. ECSCanary10Percent5Minutes**: Verschiebt 10 Prozent des Traffics im ersten Schritt. Die restlichen 90 Prozent werden fünf Minuten später bereitgestellt.
+ **CodeDeployDefault. ECSCanary10Percent15Minutes**: Verschiebt 10 Prozent des Traffics im ersten Schritt. Die restlichen 90 Prozent werden 15 Minuten später bereitgestellt.

**Revision**  
Eine Revision ist die CodeDeploy Anwendungsspezifikationsdatei (AppSpec Datei). In der AppSpec Datei geben Sie den vollständigen ARN der Aufgabendefinition sowie den Container und Port Ihres Ersatz-Tasksatzes an, an den der Datenverkehr weitergeleitet werden soll, wenn eine neue Bereitstellung erstellt wird. Der Containername muss einer der Containernamen sein, auf die in Ihrer Aufgabendefinition verwiesen wird. Wenn die Netzwerkkonfiguration oder die Plattformversion in der Dienstdefinition 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 finden Sie unter [AppSpec Dateireferenz](https://docs.aws.amazon.com/codedeploy/latest/userguide/reference-appspec-file.html) im *AWS CodeDeploy Benutzerhandbuch*.

## Überlegungen
<a name="deployment-type-bluegreen-considerations"></a>

Beachten Sie bei der Verwendung des blue/green Bereitstellungstyps Folgendes:
+ Wenn ein Amazon ECS-Service, der den blue/green Bereitstellungstyp verwendet, anfänglich 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. 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, CodeDeploy leitet er Ihren Testdatenverkehr während einer Bereitstellung an den Ersatz-Aufgabensatz weiter.
  + 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 des Auto Scaling des Services und der blau/grüne Bereitstellungstyp konfiguriert sind, wird das Auto Scaling 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 wird und eine Bereitstellung gestartet wird, wird das grüne Task-Set erstellt. Es CodeDeploy wird bis zu einer Stunde gewartet, bis das grüne Task-Set den stabilen Status erreicht hat. Bis dahin wird kein Traffic verlagert.
  + Wenn ein Dienst gerade blue/green bereitgestellt wird und ein Skalierungsereignis eintritt, verschiebt sich der Datenverkehr für weitere 5 Minuten. Wenn der Dienst nicht innerhalb von 5 Minuten den stabilen Status erreicht, CodeDeploy wird die Bereitstellung gestoppt und als fehlgeschlagen markiert.
+ Aufgaben, die die Controller-Typen Fargate oder `CODE_DEPLOY` verwenden, unterstützen die `DAEMON`-Planungsstrategie nicht.
+ Wenn Sie zum ersten Mal eine CodeDeploy Anwendung und eine 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, CodeDeploy wird in der Bereitstellung ein *Ersatzaufgabensatz* (oder ein *grüner Tasksatz*) erstellt. Wenn Sie dem Load Balancer einen Test-Listener hinzugefügt haben, CodeDeploy leitet er 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.

## Erforderliche IAM-Berechtigungen
<a name="deployment-type-bluegreen-IAM"></a>

Blue/green deployments are made possible by a combination of the Amazon ECS and CodeDeploy APIs. Users must have the appropriate permissions for these services before they can use Amazon ECS blue/greenBereitstellungen im AWS-Managementkonsole oder mit dem oder. AWS CLI SDKs 

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\$1 FullAccess](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonECS_FullAccess).
+ `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`

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

CodeDeploy benötigt Berechtigungen, um Amazon ECS aufzurufen APIs, Ihr Elastic Load Balancing zu ändern, Lambda-Funktionen aufzurufen und CloudWatch Alarme zu beschreiben, sowie Berechtigungen, um die von Ihrem Service gewünschte Anzahl in Ihrem Namen zu ändern. Bevor Sie einen Amazon ECS-Service erstellen, der den blue/green Bereitstellungstyp verwendet, müssen Sie eine IAM-Rolle (`ecsCodeDeployRole`) erstellen. Weitere Informationen finden Sie unter [Amazon ECS CodeDeploy IAM-Rolle](codedeploy_IAM_role.md).

# Bereitstellungen migrieren CodeDeploy blue/green deployments to Amazon ECS blue/green
<a name="migrate-codedeploy-to-ecs-bluegreen"></a>

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
<a name="codedeploy-bluegreen-overview"></a>

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.

1. 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` gestellt ist. Die Erstellung eines Services führt zur Erstellung eines (blauen) Aufgabensatzes, der bei der angegebenen Zielgruppe registriert ist.

1. 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 Anwendungsnamens`CreateDeployment()`, 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 diese fehlerfrei wird, steht sie für Tests (optional) und für die Produktion zur Verfügung. In beiden Fällen wird das Routing dadurch erreicht, dass die jeweilige Listener-Regel so geändert wird, dass sie auf die sekundäre Zielgruppe verweist, die dem grünen Aufgabensatz zugeordnet ist. Ein Rollback wird erreicht, indem die Produktions-Listener-Regel wieder auf die primäre Zielgruppe zurückgesetzt wird.

## Überblick über die blue/green Bereitstellung von Amazon ECS
<a name="ecs-bluegreen-overview"></a>

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

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

1. Sie müssen die folgenden Ressourcen angeben oder die Service-Ressourcen aktualisieren: 
   + Der ARN dieser Listener-Regel 
   + Die zwei 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 erstellt, indem Amazon ECS `UpdateService()` aufgerufen und die Details der neuen Revision übergeben werden. Bei der Servicebereitstellung werden neue Aufgaben der (grünen) Service-Revision erstellt und diese bei der sekundären Zielgruppe registriert. Amazon ECS führt Routing- und Rollback-Vorgänge aus, indem es die Gewichtungen der Listener-Regel ändert.

## Wichtige Unterschiede bei der Implementierung
<a name="implementation-differences"></a>

Beide Ansätze führen zwar zur Erstellung eines ersten Aufgabensatzes, die zugrunde liegende Implementierung 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 wird`CreateDeployment()`. Das bedeutet, dass die Hooks von einer Bereitstellung zur nächsten geändert werden können. Bei Amazon-ECS-Blau/Grün-Bereitstellungen werden die Hooks als Teil der Service-Konfiguration 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 der endgültige 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 `SUCCEEDED` oder `FAILED` führt. Weitere Informationen finden Sie unter [Lebenszyklus-Hooks für Amazon-ECS-Servicebereitstellungen](deployment-lifecycle-hooks.md).

## Migrationsansätze
<a name="migration-paths"></a>

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

### Verwenden Sie dieselben Elastic Load Balancing Balancing-Ressourcen wieder, die für CodeDeploy
<a name="inplace-update"></a>

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. Berücksichtigen Sie bei diesem Ansatz Folgendes:
+ Das Migrationsverfahren ist einfacher, da Sie den vorhandenen Servicebereitstellungs-Controller von Amazon ECS 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 parallele 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 CloudFormation unter. [Eine Vorlage migrieren CloudFormation CodeDeploy blue/green deployment template to an Amazon ECS blue/green CloudFormation](migrate-codedeploy-to-ecs-bluegreen-cloudformation-template.md)

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-Bereitstellungen müssen die Load-Balancer-Listener mit einer Regel vorkonfiguriert sein, die die beiden Zielgruppen mit Gewichtungen umfasst. Die primäre Zielgruppe muss mit 1 gewichtet werden und die alternative Zielgruppe muss mit 0 gewichtet werden.

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

1. Stellen Sie sicher, dass der Service wie erwartet funktioniert.

1. 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
<a name="new-service-existing-lb"></a>

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

Berücksichtigen Sie bei diesem Ansatz Folgendes:
+ Es gibt nur minimale Störungen. Störungen treten nur während der Port-Auslagerung für Elastic Load Balancing auf.
+ Ein Rollback erfordert, dass Sie die Port-Auslagerung für Elastic Load Balancing rückgängig machen.
+ Das Risiko ist gering, da es parallele Konfigurationen gibt. Daher können Sie vor der Datenverkehrsverlagerung 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.

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

1. Überprüfen Sie die neue Einrichtung, indem Sie HTTP-Datenverkehr 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 die neue Einrichtung weiterzuleiten.

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

### Neuer Service mit neuem Load Balancer
<a name="new-service-new-lb"></a>

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

Berücksichtigen Sie bei diesem Ansatz Folgendes:
+ Dies erfordert eine Reverse-Proxy-Schicht.
+ Das Migrationsverfahren ist komplizierter, da Sie den vorhandenen Servicebereitstellungs-Controller von Amazon ECS und die Bereitstellungsstrategie aktualisieren müssen.
+ Es gibt nur minimale Störungen. Störungen treten nur während der Port-Auslagerung für Elastic Load Balancing auf.
+ Ein Rollback erfordert, dass Sie die Änderungen an der Proxy-Konfiguration rückgängig machen.
+ Das Risiko ist gering, da es parallele Konfigurationen gibt. Daher können Sie vor der Datenverkehrsverlagerung testen.

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

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

   Konfigurieren Sie die entsprechenden Ressourcen.
   + Application Load Balancer – Weitere Informationen finden Sie unter [Application Load Balancer Balancer-Ressourcen für blaue/grüne, lineare und kanarische Bereitstellungen](alb-resources-for-blue-green.md).
   + Network Load Balancer – Weitere Informationen finden Sie unter [Network Load Balancer Balancer-Ressourcen für Amazon ECS Blue/Green-, Linear- und Canary-Bereitstellungen](nlb-resources-for-blue-green.md).

1. Erstellen Sie einen neuen Service mit `ECS` als Bereitstellungs-Controller und `BLUE_GREEN` als Bereitstellungsstrategie, die auf die neuen Load-Balancer-Ressourcen verweist.

1. Überprüfen Sie die neue Einrichtung, indem Sie sie mit dem neuen Load Balancer testen.

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

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

## Nächste Schritte
<a name="post-migration-considerations"></a>

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.

# Migration von einer Servicebereitstellung CodeDeploy blue/green to an Amazon ECS blue/green
<a name="migrate-code-deploy-to-ecs-blue-green"></a>

 Mithilfe von Amazon blue/green ECS-Bereitstellungen können Sie Serviceänderungen vornehmen und testen, bevor Sie sie in einer Produktionsumgebung implementieren. 

Sie müssen neue Lifecycle-Hooks für Ihre Amazon blue/green ECS-Bereitstellung erstellen.

## Voraussetzungen
<a name="migrate-code-deploy-to-ecs-blue-green-prerequisites"></a>

Führen Sie die folgenden Vorgänge aus, bevor Sie eine blue/green Bereitstellung starten.

1. Ersetzen Sie die Amazon CodeDeploy ECS-IAM-Rolle durch die folgenden Berechtigungen.
   + Weitere Informationen zu den erforderlichen Berechtigungen für Elastic Load Balancing finden Sie unter [Amazon-ECS-IAM-Infrastrukturrolle für Load Balancer](AmazonECSInfrastructureRolePolicyForLoadBalancers.md).
   + Weitere Informationen zu Lambda-Berechtigungen finden Sie unter [Erforderliche Berechtigungen für Lambda-Funktionen in Amazon ECS-Bereitstellungen blue/green](blue-green-permissions.md).

1. Schalten Sie die CodeDeploy Automatisierung aus. Weitere Informationen finden Sie [ CodeDeployim *CodeDeploy Benutzerhandbuch* unter Arbeiten mit Bereitstellungsgruppen](https://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-groups.html). 

1. Stellen Sie sicher, dass Sie über die folgenden Informationen aus Ihrer CodeDeploy blue/green deployment. You can reuse this information for the Amazon ECS blue/green Bereitstellung verfügen:
   + Die Produktionszielgruppe
   + Der Produktions-Listener
   + Die Produktionsregel
   + Die Test-Zielgruppe

     Das ist die Zielgruppe für die grüne Service-Revision.

1. Stellen Sie sicher, dass die Zielgruppen Ihres Application Load Balancer ordnungsgemäß mit den Listener-Regeln verknüpft sind:
   + Wenn Sie keine Test-Listener verwenden, müssen beide Zielgruppen (Produktion und Test) mit Produktions-Listener-Regeln verknüpft werden.
   + Wenn Sie Test-Listener verwenden, muss eine Zielgruppe mit Produktions-Listener-Regeln und die andere Zielgruppe mit Test-Listener-Regeln verknüpft sein.

   Wenn diese Anforderung nicht erfüllt ist, schlägt die Servicebereitstellung mit der folgenden Fehlermeldung fehl: `Service deployment rolled back because of invalid networking configuration. Both targetGroup and alternateTargetGroup must be associated with the productionListenerRule or testListenerRule.`

1. Stellen Sie sicher, dass es keine laufenden Servicebereitstellungen für den Service gibt. Weitere Informationen finden Sie unter [Anzeigen des Service-Verlaufs mithilfe von Service-Bereitstellungen in Amazon ECS](service-deployment.md).

1. Amazon blue/green ECS-Bereitstellungen erfordern, dass Ihr Service eine der folgenden Funktionen verwendet: Konfigurieren Sie die entsprechenden Ressourcen.
   + Application Load Balancer – Weitere Informationen finden Sie unter [Application Load Balancer Balancer-Ressourcen für blaue/grüne, lineare und kanarische Bereitstellungen](alb-resources-for-blue-green.md).
   + Network Load Balancer – Weitere Informationen finden Sie unter [Network Load Balancer Balancer-Ressourcen für Amazon ECS Blue/Green-, Linear- und Canary-Bereitstellungen](nlb-resources-for-blue-green.md).
   + Service Connect – Weitere Informationen finden Sie unter [Service Connect-Ressourcen für blaue/grüne, lineare und kanarische Bereitstellungen von Amazon ECS](service-connect-blue-green.md).

1. Entscheiden Sie, ob Sie Lambda-Funktionen für die Lebenszyklusphasen der Phasen der Amazon blue/green ECS-Bereitstellung ausführen möchten.
   + Vor dem Hochskalieren
   + Nach dem Hochskalieren
   + Verlagerung des Test-Datenverkehrs
   + Nach der Verlagerung des Test-Datenverkehrs
   + Verlagerung des Produktionsdatenverkehrs
   + Nach der Verlagerung des Produktionsdatenverkehrs

   Erstellen Sie Lambda-Funktionen für jede Lebenszyklusphase. Weitere Informationen finden Sie unter [Erstellen einer Lambda-Funktion mit der Konsole](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html#getting-started-create-function) im *Entwicklerhandbuch für AWS Lambda *.

Weitere Informationen zum Aktualisieren des Bereitstellungs-Controllers eines Services finden Sie unter [Aktualisieren der Amazon-ECS-Serviceparameter](update-service-parameters.md).

## Verfahren
<a name="migrate-code-deploy-to-ecs-procedure"></a>

1. Öffnen Sie die Konsole auf [https://console.aws.amazon.com/ecs/Version 2.](https://console.aws.amazon.com/ecs/v2)

1. Wählen Sie auf der **Cluster**-Seite den Cluster aus.

   Die Cluster-Detailseite wird angezeigt.

1. Wählen Sie auf der Registerkarte **Services** den Service aus.

   Die Seite mit den Service-Details wird angezeigt.

1. Wählen Sie im Banner **Typ des Bereitstellungs-Controllers aktualisieren** aus.

   Die Seite **Typ des Bereitstellungs-Controllers migrieren** wird angezeigt.

1. Erweitern Sie **Neu** und geben Sie dann die folgenden Parameter an.

   1. Wählen Sie für **Typ des Bereitstellungs-Controllers** die Option **ECS** aus.

   1. Wählen Sie für **Bereitstellungsstrategie** die Option **Blau/Grün** aus.

   1. Geben Sie für **Bake-Zeit** die Zeit ein, zu der sowohl die blaue als auch die grüne Service-Revision ausgeführt werden.

   1. Um Lambda-Funktionen für eine Lebenszyklusphase auszuführen, gehen Sie unter **Bereitstellungs-Lebenszyklus-Hooks** für jede einzelne Lambda-Funktion wie folgt vor:

      1. Wählen Sie **Hinzufügen** aus.

         Wiederholen Sie den Prozess für jede einzelne Funktion, die Sie ausführen möchten.

      1. Geben Sie für **Lambda-Funktion** den Funktionsnamen ein.

      1. Wählen Sie für **Rolle** die Rolle aus, die Sie in den Voraussetzungen mit den blauen/grünen Berechtigungen erstellt haben.

         Weitere Informationen finden Sie unter [Erforderliche Berechtigungen für Lambda-Funktionen in Amazon ECS-Bereitstellungen blue/green](blue-green-permissions.md).

      1. Wählen Sie für **Lebenszyklusphasen** die Phasen aus, in denen die Lambda-Funktion ausgeführt wird.

      1.  (Optional) Geben Sie für **Hook-Details** ein Schlüssel-Wert-Paar ein, das Informationen über den Hook bereitstellt.

1. Erweitern Sie **Load Balancing** und konfigurieren Sie dann Folgendes:

   1. Wählen Sie **unter Rolle** die Rolle aus, die Sie in den Voraussetzungen mit den blue/green entsprechenden Berechtigungen erstellt haben.

      Weitere Informationen finden Sie unter [Erforderliche Berechtigungen für Lambda-Funktionen in Amazon ECS-Bereitstellungen blue/green](blue-green-permissions.md).

   1. Wählen Sie für **Listener** den Produktions-Listener aus Ihrer CodeDeploy blauen/grünen Bereitstellung aus.

   1. Wählen Sie für **Produktionsregel** die Produktionsregel aus Ihrer CodeDeploy blauen/grünen Bereitstellung aus.

   1. Wählen Sie **unter Testregel** die Testregel aus Ihrer CodeDeploy blauen/grünen Bereitstellung aus.

   1. Wählen Sie **unter Zielgruppe** die Produktionszielgruppe aus Ihrer CodeDeploy blauen/grünen Bereitstellung aus.

   1. Wählen Sie **unter Alternative Zielgruppe** die Testzielgruppe aus Ihrer CodeDeploy blauen/grünen Bereitstellung aus.

1. Wählen Sie **Aktualisieren** aus.

## Nächste Schritte
<a name="migrate-code-deploy-to-ecs-blue-green-next-steps"></a>
+ Aktualisieren Sie den Service, um die Bereitstellung zu starten. Weitere Informationen finden Sie unter [Aktualisierung eines Amazon ECS-Service](update-service-console-v2.md).
+ Überwachen Sie den Bereitstellungsprozess, um sicherzustellen, dass er dem Blau/Grün-Muster folgt:
  + Die grüne Service-Revision wurde erstellt und hochskaliert
  + Der Test-Datenverkehr wird an die grüne Revision weitergeleitet (falls konfiguriert)
  + Der Produktionsdatenverkehr verlagert sich auf die grüne Revision.
  + Nach Ablauf der Bake-Zeit wird die blaue Revision beendet

# Eine Vorlage migrieren CloudFormation CodeDeploy blue/green deployment template to an Amazon ECS blue/green CloudFormation
<a name="migrate-codedeploy-to-ecs-bluegreen-cloudformation-template"></a>

Migrieren Sie eine CloudFormation Vorlage, die eine CodeDeploy blue/green deployments for Amazon ECS services to one that uses the native Amazon ECS blue/green Bereitstellungsstrategie verwendet. Die Migration folgt dem Ansatz „Dieselben Elastic Load Balancing Balancing-Ressourcen wiederverwenden, für die sie verwendet wurden CodeDeploy“. Weitere Informationen finden Sie unter [Bereitstellungen migrieren CodeDeploy blue/green deployments to Amazon ECS blue/green](migrate-codedeploy-to-ecs-bluegreen.md).

## Quellvorlage
<a name="source-template"></a>

Diese Vorlage verwendet `AWS::CodeDeployBlueGreen` Transform und `AWS::CodeDeploy::BlueGreen` Hook, um blue/green Bereitstellungen für einen Amazon ECS-Service zu implementieren.

### Quelle
<a name="code-deploy-source"></a>

Dies ist die vollständige CloudFormation Vorlage, die eine CodeDeploy blaue/grüne Bereitstellung verwendet. Weitere Informationen finden Sie im * AWS CloudFormation Benutzerhandbuch* unter [Beispiel für eine blaue/grüne Bereitstellungsvorlage](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/blue-green-template-example.html#blue-green-template-example.json):

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Parameters": {
    "Vpc": {
      "Type": "AWS::EC2::VPC::Id"
    },
    "Subnet1": {
      "Type": "AWS::EC2::Subnet::Id"
    },
    "Subnet2": {
      "Type": "AWS::EC2::Subnet::Id"
    }
  },
  "Transform": [
    "AWS::CodeDeployBlueGreen"
  ],
  "Hooks": {
    "CodeDeployBlueGreenHook": {
      "Type": "AWS::CodeDeploy::BlueGreen",
      "Properties": {
        "TrafficRoutingConfig": {
          "Type": "TimeBasedCanary",
          "TimeBasedCanary": {
            "StepPercentage": 15,
            "BakeTimeMins": 5
          }
        },
        "Applications": [
          {
            "Target": {
              "Type": "AWS::ECS::Service",
              "LogicalID": "ECSDemoService"
            },
            "ECSAttributes": {
              "TaskDefinitions": [
                "BlueTaskDefinition",
                "GreenTaskDefinition"
              ],
              "TaskSets": [
                "BlueTaskSet",
                "GreenTaskSet"
              ],
              "TrafficRouting": {
                "ProdTrafficRoute": {
                  "Type": "AWS::ElasticLoadBalancingV2::Listener",
                  "LogicalID": "ALBListenerProdTraffic"
                },
                "TargetGroups": [
                  "ALBTargetGroupBlue",
                  "ALBTargetGroupGreen"
                ]
              }
            }
          }
        ]
      }
    }
  },
  "Resources": {
    "ExampleSecurityGroup": {
      "Type": "AWS::EC2::SecurityGroup",
      "Properties": {
        "GroupDescription": "Security group for ec2 access",
        "VpcId": {"Ref": "Vpc"},
        "SecurityGroupIngress": [
          {
            "IpProtocol": "tcp",
            "FromPort": 80,
            "ToPort": 80,
            "CidrIp": "0.0.0.0/0"
          },
          {
            "IpProtocol": "tcp",
            "FromPort": 8080,
            "ToPort": 8080,
            "CidrIp": "0.0.0.0/0"
          },
          {
            "IpProtocol": "tcp",
            "FromPort": 22,
            "ToPort": 22,
            "CidrIp": "0.0.0.0/0"
          }
        ]
      }
    },
    "ALBTargetGroupBlue": {
      "Type": "AWS::ElasticLoadBalancingV2::TargetGroup",
      "Properties": {
        "HealthCheckIntervalSeconds": 5,
        "HealthCheckPath": "/",
        "HealthCheckPort": "80",
        "HealthCheckProtocol": "HTTP",
        "HealthCheckTimeoutSeconds": 2,
        "HealthyThresholdCount": 2,
        "Matcher": {
          "HttpCode": "200"
        },
        "Port": 80,
        "Protocol": "HTTP",
        "Tags": [
          {
            "Key": "Group",
            "Value": "Example"
          }
        ],
        "TargetType": "ip",
        "UnhealthyThresholdCount": 4,
        "VpcId": {"Ref": "Vpc"}
      }
    },
    "ALBTargetGroupGreen": {
      "Type": "AWS::ElasticLoadBalancingV2::TargetGroup",
      "Properties": {
        "HealthCheckIntervalSeconds": 5,
        "HealthCheckPath": "/",
        "HealthCheckPort": "80",
        "HealthCheckProtocol": "HTTP",
        "HealthCheckTimeoutSeconds": 2,
        "HealthyThresholdCount": 2,
        "Matcher": {
          "HttpCode": "200"
        },
        "Port": 80,
        "Protocol": "HTTP",
        "Tags": [
          {
            "Key": "Group",
            "Value": "Example"
          }
        ],
        "TargetType": "ip",
        "UnhealthyThresholdCount": 4,
        "VpcId": {"Ref": "Vpc"}
      }
    },
    "ExampleALB": {
      "Type": "AWS::ElasticLoadBalancingV2::LoadBalancer",
      "Properties": {
        "Scheme": "internet-facing",
        "SecurityGroups": [
          {"Ref": "ExampleSecurityGroup"}
        ],
        "Subnets": [
          {"Ref": "Subnet1"},
          {"Ref": "Subnet2"}
        ],
        "Tags": [
          {
            "Key": "Group",
            "Value": "Example"
          }
        ],
        "Type": "application",
        "IpAddressType": "ipv4"
      }
    },
    "ALBListenerProdTraffic": {
      "Type": "AWS::ElasticLoadBalancingV2::Listener",
      "Properties": {
        "DefaultActions": [
          {
            "Type": "forward",
            "ForwardConfig": {
              "TargetGroups": [
                {
                  "TargetGroupArn": {"Ref": "ALBTargetGroupBlue"},
                  "Weight": 1
                }
              ]
            }
          }
        ],
        "LoadBalancerArn": {"Ref": "ExampleALB"},
        "Port": 80,
        "Protocol": "HTTP"
      }
    },
    "ALBListenerProdRule": {
      "Type": "AWS::ElasticLoadBalancingV2::ListenerRule",
      "Properties": {
        "Actions": [
          {
            "Type": "forward",
            "ForwardConfig": {
              "TargetGroups": [
                {
                  "TargetGroupArn": {"Ref": "ALBTargetGroupBlue"},
                  "Weight": 1
                }
              ]
            }
          }
        ],
        "Conditions": [
          {
            "Field": "http-header",
            "HttpHeaderConfig": {
              "HttpHeaderName": "User-Agent",
              "Values": [
                "Mozilla"
              ]
            }
          }
        ],
        "ListenerArn": {"Ref": "ALBListenerProdTraffic"},
        "Priority": 1
      }
    },
    "ECSTaskExecutionRole": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Version": "2012-10-17",		 	 	 
          "Statement": [
            {
              "Sid": "",
              "Effect": "Allow",
              "Principal": {
                "Service": "ecs-tasks.amazonaws.com"
              },
              "Action": "sts:AssumeRole"
            }
          ]
        },
        "ManagedPolicyArns": [
          "arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy"
        ]
      }
    },
    "BlueTaskDefinition": {
      "Type": "AWS::ECS::TaskDefinition",
      "Properties": {
        "ExecutionRoleArn": {"Fn::GetAtt": ["ECSTaskExecutionRole", "Arn"]},
        "ContainerDefinitions": [
          {
            "Name": "DemoApp",
            "Image": "nginxdemos/hello:latest",
            "Essential": true,
            "PortMappings": [
              {
                "HostPort": 80,
                "Protocol": "tcp",
                "ContainerPort": 80
              }
            ]
          }
        ],
        "RequiresCompatibilities": [
          "FARGATE"
        ],
        "NetworkMode": "awsvpc",
        "Cpu": "256",
        "Memory": "512",
        "Family": "ecs-demo"
      }
    },
    "ECSDemoCluster": {
      "Type": "AWS::ECS::Cluster",
      "Properties": {}
    },
    "ECSDemoService": {
      "Type": "AWS::ECS::Service",
      "Properties": {
        "Cluster": {"Ref": "ECSDemoCluster"},
        "DesiredCount": 1,
        "DeploymentController": {
          "Type": "EXTERNAL"
        }
      }
    },
    "BlueTaskSet": {
      "Type": "AWS::ECS::TaskSet",
      "Properties": {
        "Cluster": {"Ref": "ECSDemoCluster"},
        "LaunchType": "FARGATE",
        "NetworkConfiguration": {
          "AwsVpcConfiguration": {
            "AssignPublicIp": "ENABLED",
            "SecurityGroups": [
              {"Ref": "ExampleSecurityGroup"}
            ],
            "Subnets": [
              {"Ref": "Subnet1"},
              {"Ref": "Subnet2"}
            ]
          }
        },
        "PlatformVersion": "1.4.0",
        "Scale": {
          "Unit": "PERCENT",
          "Value": 100
        },
        "Service": {"Ref": "ECSDemoService"},
        "TaskDefinition": {"Ref": "BlueTaskDefinition"},
        "LoadBalancers": [
          {
            "ContainerName": "DemoApp",
            "ContainerPort": 80,
            "TargetGroupArn": {"Ref": "ALBTargetGroupBlue"}
          }
        ]
      }
    },
    "PrimaryTaskSet": {
      "Type": "AWS::ECS::PrimaryTaskSet",
      "Properties": {
        "Cluster": {"Ref": "ECSDemoCluster"},
        "Service": {"Ref": "ECSDemoService"},
        "TaskSetId": {"Fn::GetAtt": ["BlueTaskSet", "Id"]}
      }
    }
  }
}
```

## Schritte zur Migration
<a name="migration-steps"></a>

### CodeDeploy-spezifische Ressourcen entfernen
<a name="remove-codedeploy-resources"></a>

Sie benötigen die folgenden Eigenschaften nicht mehr:
+ `AWS::CodeDeployBlueGreen`-Transformation
+ `CodeDeployBlueGreenHook`-Hook
+ `GreenTaskDefinition`- und `GreenTaskSet`-Ressourcen (diese werden von Amazon ECS verwaltet)
+ `PrimaryTaskSet`-Ressource (Amazon ECS verwaltet Aufgabensätze intern)

### Neukonfiguration des Load Balancer-Listener
<a name="reconfigure-load-balancer"></a>

Ändern Sie die `ALBListenerProdTraffic`-Ressource so, dass sie eine Weiterleitungsaktion mit zwei Zielgruppen verwendet:

```
{
  "DefaultActions": [
    {
      "Type": "forward",
      "ForwardConfig": {
        "TargetGroups": [
          {
            "TargetGroupArn": {"Ref": "ALBTargetGroupBlue"},
            "Weight": 1
          },
          {
            "TargetGroupArn": {"Ref": "ALBTargetGroupGreen"},
            "Weight": 0
          }
        ]
      }
    }
  ]
}
```

### Bereitstellungseigenschaften aktualisieren
<a name="update-ecs-service"></a>

Folgendes aktualisieren und hinzufügen:
+ Ändern Sie die Eigenschaft `DeploymentController` von `EXTERNAL` auf `ECS`.
+ Fügen Sie die `Strategy`-Eigenschaft hinzu und setzen Sie sie auf BLUE\$1GREEN.
+ Fügen Sie die `BakeTimeInMinutes`-Eigenschaft hinzu.

  ```
  {
    "DeploymentConfiguration": {
      "MaximumPercent": 200,
      "MinimumHealthyPercent": 100,
      "DeploymentCircuitBreaker": {
        "Enable": true,
        "Rollback": true
      },
      "BakeTimeInMinutes": 5,
      "Strategy": "BLUE_GREEN"
    }
  }
  ```
+ Fügen Sie dem Service die Load-Balancer-Konfiguration hinzu:

  ```
  {
    "LoadBalancers": [
      {
        "ContainerName": "DemoApp",
        "ContainerPort": 80,
        "TargetGroupArn": {"Ref": "ALBTargetGroupBlue"},
        "AdvancedConfiguration": {
          "AlternateTargetGroupArn": {"Ref": "ALBTargetGroupGreen"},
          "ProductionListenerRule": {"Ref": "ALBListenerProdRule"},
          "RoleArn": {"Fn::GetAtt": ["ECSInfrastructureRoleForLoadBalancers", "Arn"]}
        }
      }
    ]
  }
  ```
+ Fügen Sie dem Service die Referenz zur Aufgabendefinition hinzu:

  ```
  {
    "TaskDefinition": {"Ref": "BlueTaskDefinition"}
  }
  ```

### Erstellen Sie die ECSInfrastructure RolePolicyForLoadBalancers Amazon-Rolle
<a name="create-ecs-service-role"></a>

Fügen Sie eine neue IAM-Rolle hinzu, die es Amazon ECS ermöglicht, Load Balancer-Ressourcen zu verwalten. Weitere Informationen finden Sie unter [Amazon-ECS-IAM-Infrastrukturrolle für Load Balancer](AmazonECSInfrastructureRolePolicyForLoadBalancers.md).

## Testen von Empfehlungen
<a name="testing-recommendations"></a>

1. Stellen Sie die migrierte Vorlage in einer Nicht-Produktionsumgebung bereit.

1. Stellen Sie sicher, dass der Service mit der Erstkonfiguration korrekt bereitgestellt wird.

1. Testen Sie eine Bereitstellung, indem Sie die Aufgabendefinition aktualisieren und den Blau/Grün-Bereitstellungsprozess beobachten.

1. Stellen Sie sicher, dass der Datenverkehr korrekt zwischen den blauen und grünen Bereitstellungen wechselt.

1. Testen Sie die Rollback-Funktion, indem Sie einen Bereitstellungsfehler erzwingen.

## Vorlage nach der Migration
<a name="migrated-template"></a>

### Endgültige Vorlage
<a name="ecs-bluegreen-template"></a>

Dies ist die vollständige CloudFormation Vorlage, die eine Amazon blue/green ECS-Bereitstellung verwendet:

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Parameters": {
    "Vpc": {
      "Type": "AWS::EC2::VPC::Id"
    },
    "Subnet1": {
      "Type": "AWS::EC2::Subnet::Id"
    },
    "Subnet2": {
      "Type": "AWS::EC2::Subnet::Id"
    }
  },
  "Resources": {
    "ExampleSecurityGroup": {
      "Type": "AWS::EC2::SecurityGroup",
      "Properties": {
        "GroupDescription": "Security group for ec2 access",
        "VpcId": {"Ref": "Vpc"},
        "SecurityGroupIngress": [
          {
            "IpProtocol": "tcp",
            "FromPort": 80,
            "ToPort": 80,
            "CidrIp": "0.0.0.0/0"
          },
          {
            "IpProtocol": "tcp",
            "FromPort": 8080,
            "ToPort": 8080,
            "CidrIp": "0.0.0.0/0"
          },
          {
            "IpProtocol": "tcp",
            "FromPort": 22,
            "ToPort": 22,
            "CidrIp": "0.0.0.0/0"
          }
        ]
      }
    },
    "ALBTargetGroupBlue": {
      "Type": "AWS::ElasticLoadBalancingV2::TargetGroup",
      "Properties": {
        "HealthCheckIntervalSeconds": 5,
        "HealthCheckPath": "/",
        "HealthCheckPort": "80",
        "HealthCheckProtocol": "HTTP",
        "HealthCheckTimeoutSeconds": 2,
        "HealthyThresholdCount": 2,
        "Matcher": {
          "HttpCode": "200"
        },
        "Port": 80,
        "Protocol": "HTTP",
        "Tags": [
          {
            "Key": "Group",
            "Value": "Example"
          }
        ],
        "TargetType": "ip",
        "UnhealthyThresholdCount": 4,
        "VpcId": {"Ref": "Vpc"}
      }
    },
    "ALBTargetGroupGreen": {
      "Type": "AWS::ElasticLoadBalancingV2::TargetGroup",
      "Properties": {
        "HealthCheckIntervalSeconds": 5,
        "HealthCheckPath": "/",
        "HealthCheckPort": "80",
        "HealthCheckProtocol": "HTTP",
        "HealthCheckTimeoutSeconds": 2,
        "HealthyThresholdCount": 2,
        "Matcher": {
          "HttpCode": "200"
        },
        "Port": 80,
        "Protocol": "HTTP",
        "Tags": [
          {
            "Key": "Group",
            "Value": "Example"
          }
        ],
        "TargetType": "ip",
        "UnhealthyThresholdCount": 4,
        "VpcId": {"Ref": "Vpc"}
      }
    },
    "ExampleALB": {
      "Type": "AWS::ElasticLoadBalancingV2::LoadBalancer",
      "Properties": {
        "Scheme": "internet-facing",
        "SecurityGroups": [
          {"Ref": "ExampleSecurityGroup"}
        ],
        "Subnets": [
          {"Ref": "Subnet1"},
          {"Ref": "Subnet2"}
        ],
        "Tags": [
          {
            "Key": "Group",
            "Value": "Example"
          }
        ],
        "Type": "application",
        "IpAddressType": "ipv4"
      }
    },
    "ALBListenerProdTraffic": {
      "Type": "AWS::ElasticLoadBalancingV2::Listener",
      "Properties": {
        "DefaultActions": [
          {
            "Type": "forward",
            "ForwardConfig": {
              "TargetGroups": [
                {
                  "TargetGroupArn": {"Ref": "ALBTargetGroupBlue"},
                  "Weight": 1
                },
                {
                  "TargetGroupArn": {"Ref": "ALBTargetGroupGreen"},
                  "Weight": 0
                }
              ]
            }
          }
        ],
        "LoadBalancerArn": {"Ref": "ExampleALB"},
        "Port": 80,
        "Protocol": "HTTP"
      }
    },
    "ALBListenerProdRule": {
      "Type": "AWS::ElasticLoadBalancingV2::ListenerRule",
      "Properties": {
        "Actions": [
          {
            "Type": "forward",
            "ForwardConfig": {
              "TargetGroups": [
                {
                  "TargetGroupArn": {"Ref": "ALBTargetGroupBlue"},
                  "Weight": 1
                },
                {
                  "TargetGroupArn": {"Ref": "ALBTargetGroupGreen"},
                  "Weight": 0
                }
              ]
            }
          }
        ],
        "Conditions": [
          {
            "Field": "http-header",
            "HttpHeaderConfig": {
              "HttpHeaderName": "User-Agent",
              "Values": [
                "Mozilla"
              ]
            }
          }
        ],
        "ListenerArn": {"Ref": "ALBListenerProdTraffic"},
        "Priority": 1
      }
    },
    "ECSTaskExecutionRole": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Version": "2012-10-17",		 	 	 
          "Statement": [
            {
              "Sid": "",
              "Effect": "Allow",
              "Principal": {
                "Service": "ecs-tasks.amazonaws.com"
              },
              "Action": "sts:AssumeRole"
            }
          ]
        },
        "ManagedPolicyArns": [
          "arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy"
        ]
      }
    },
    "ECSInfrastructureRoleForLoadBalancers": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Version": "2012-10-17",		 	 	 
          "Statement": [
            {
              "Sid": "AllowAccessToECSForInfrastructureManagement",
              "Effect": "Allow",
              "Principal": {
                "Service": "ecs.amazonaws.com"
              },
              "Action": "sts:AssumeRole"
            }
          ]
        },
        "ManagedPolicyArns": [
          "arn:aws:iam::aws:policy/AmazonECSInfrastructureRolePolicyForLoadBalancers"
        ]
      }
    },
    "BlueTaskDefinition": {
      "Type": "AWS::ECS::TaskDefinition",
      "Properties": {
        "ExecutionRoleArn": {"Fn::GetAtt": ["ECSTaskExecutionRole", "Arn"]},
        "ContainerDefinitions": [
          {
            "Name": "DemoApp",
            "Image": "nginxdemos/hello:latest",
            "Essential": true,
            "PortMappings": [
              {
                "HostPort": 80,
                "Protocol": "tcp",
                "ContainerPort": 80
              }
            ]
          }
        ],
        "RequiresCompatibilities": [
          "FARGATE"
        ],
        "NetworkMode": "awsvpc",
        "Cpu": "256",
        "Memory": "512",
        "Family": "ecs-demo"
      }
    },
    "ECSDemoCluster": {
      "Type": "AWS::ECS::Cluster",
      "Properties": {}
    },
    "ECSDemoService": {
      "Type": "AWS::ECS::Service",
      "Properties": {
        "Cluster": {"Ref": "ECSDemoCluster"},
        "DesiredCount": 1,
        "DeploymentController": {
          "Type": "ECS"
        },
        "DeploymentConfiguration": {
          "MaximumPercent": 200,
          "MinimumHealthyPercent": 100,
          "DeploymentCircuitBreaker": {
            "Enable": true,
            "Rollback": true
          },
          "BakeTimeInMinutes": 5,
          "Strategy": "BLUE_GREEN"
        },
        "NetworkConfiguration": {
          "AwsvpcConfiguration": {
            "AssignPublicIp": "ENABLED",
            "SecurityGroups": [
              {"Ref": "ExampleSecurityGroup"}
            ],
            "Subnets": [
              {"Ref": "Subnet1"},
              {"Ref": "Subnet2"}
            ]
          }
        },
        "LaunchType": "FARGATE",
        "PlatformVersion": "1.4.0",
        "TaskDefinition": {"Ref": "BlueTaskDefinition"},
        "LoadBalancers": [
          {
            "ContainerName": "DemoApp",
            "ContainerPort": 80,
            "TargetGroupArn": {"Ref": "ALBTargetGroupBlue"},
            "AdvancedConfiguration": {
              "AlternateTargetGroupArn": {"Ref": "ALBTargetGroupGreen"},
              "ProductionListenerRule": {"Ref": "ALBListenerProdRule"},
              "RoleArn": {"Fn::GetAtt": ["ECSInfrastructureRoleForLoadBalancers", "Arn"]}
            }
          }
        ]
      }
    }
  }
}
```

# Migration von einer Bereitstellung des fortlaufenden Aktualisierungsservices von CodeDeploy Blau/Grün zu Amazon ECS
<a name="migrate-code-deploy-to-ecs-rolling"></a>

 Sie können Ihre Servicebereitstellungen von einer CodeDeploy blauen/grünen Bereitstellung zu einer Bereitstellung fortlaufender Updates von Amazon ECS migrieren. Auf diese Weise können Sie nicht mehr abhängig sein CodeDeploy , sondern eine integrierte Bereitstellung verwenden.

Der Amazon ECS Service Scheduler ersetzt die aktuell laufenden Aufgaben durch neue Aufgaben. Die Anzahl der Aufgaben, die Amazon ECS während einer fortlaufenden Aktualisierung für den Service hinzufügt oder entfernt, wird durch die Service-Bereitstellungskonfiguration gesteuert.

## Voraussetzungen
<a name="migrate-code-deploy-to-ecs-rolling-prerequisites"></a>

Führen Sie die folgenden Vorgänge aus, bevor Sie eine blue/green Bereitstellung starten. 

1. Sie benötigen die Amazon ECS CodeDeploy IAM-Rolle nicht mehr.

1. Schalten Sie die CodeDeploy Automatisierung aus. Weitere Informationen finden Sie [ CodeDeployim *CodeDeploy Benutzerhandbuch* unter Arbeiten mit Bereitstellungsgruppen](https://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-groups.html).

1. Stellen Sie sicher, dass es keine laufenden Servicebereitstellungen für den Service gibt. Weitere Informationen finden Sie unter [Anzeigen des Service-Verlaufs mithilfe von Service-Bereitstellungen in Amazon ECS](service-deployment.md).

Weitere Informationen zum Aktualisieren des Bereitstellungs-Controllers eines Services finden Sie unter [Aktualisieren der Amazon-ECS-Serviceparameter](update-service-parameters.md).

## Verfahren
<a name="migrate-code-deploy-to-ecs-rolling-procedure"></a>

1. Öffnen Sie die Konsole auf [https://console.aws.amazon.com/ecs/Version](https://console.aws.amazon.com/ecs/v2) 2.

1. Wählen Sie auf der **Cluster**-Seite den Cluster aus.

   Die Cluster-Detailseite wird angezeigt.

1. Wählen Sie auf der Registerkarte **Services** den Service aus.

   Die Seite mit den Service-Details wird angezeigt.

1. Wählen Sie im Banner **Migrieren** aus.

   Die Seite **Bereitstellungskonfiguration aktualisieren** wird angezeigt.

1. Erweitern Sie **Bereitstellungsoptionen** und geben Sie dann die folgenden Parameter an

   1. Wählen Sie für **Typ des Bereitstellungs-Controllers** die Option **ECS** aus.

   1. Wählen Sie für **Bereitstellungsstrategie** die Option **Fortlaufende Aktualisierung** aus.

   1. Für **Min running tasks** (Min. laufende Aufgaben) geben Sie die untere Grenze für die Anzahl der Aufgaben im Service an, die während eines Einsatzes in diesem `RUNNING`-Zustand verbleiben müssen, und zwar als Prozentsatz der gewünschten Anzahl von Aufgaben (aufgerundet auf die nächste ganze Zahl). Weitere Informationen finden Sie unter [Bereitstellungs-Konfiguration](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service_definition_parameters.html#sd-deploymentconfiguration).

   1. Geben Sie für **Max running tasks** (Max. laufende Aufgaben) die Obergrenze für die Anzahl der Aufgaben im Service ein, die sich während einer Bereitstellung im Status `RUNNING` oder `PENDING` befinden dürfen, und zwar als Prozentsatz der gewünschten Anzahl von Aufgaben (abgerundet auf die nächste Ganzzahl).

1. Erweitern Sie **Load Balancing** und konfigurieren Sie dann Folgendes:

   1. Wählen Sie **unter Rolle** die Rolle aus, die Sie in den Voraussetzungen mit den blue/green entsprechenden Berechtigungen erstellt haben.

      Weitere Informationen finden Sie unter [Erforderliche Berechtigungen für Lambda-Funktionen in Amazon ECS-Bereitstellungen blue/green](blue-green-permissions.md).

   1. Wählen Sie für **Listener** den Produktions-Listener aus Ihrer CodeDeploy blauen/grünen Bereitstellung aus.

   1. Wählen Sie **unter Zielgruppe** die Produktionszielgruppe aus Ihrer CodeDeploy blauen/grünen Bereitstellung aus.

1. Wählen Sie **Aktualisieren** aus.

## Nächste Schritte
<a name="migrate-code-deploy-to-ecs-rolling-next-steps"></a>

Sie müssen den Service aktualisieren, damit die Änderungen wirksam werden. Weitere Informationen finden Sie unter [Aktualisierung eines Amazon ECS-Service](update-service-console-v2.md).