Blau/Grün-Bereitstellungen mit Amazon ECS - Amazon Elastic Container Service

Blau/Grün-Bereitstellungen mit Amazon ECS

Mithilfe von Blau/Grün-Bereitstellungen von Amazon RDS können Sie Service-Änderungen vornehmen und testen, bevor Sie sie in einer Produktionsumgebung implementieren.

Voraussetzungen

Führen Sie die folgenden Vorgänge aus, bevor Sie eine Blau/Grün-Bereitstellung starten.

  1. Konfigurieren Sie die entsprechenden Berechtigungen.

  2. Für Blau/Grün-Bereitstellungen von Amazon ECS muss Ihr Service eine der folgenden Features verwenden: Konfigurieren Sie die entsprechenden Ressourcen.

  3. Erstellen Sie eine Regel, um den Datenverkehr an Ihre grüne Service-Revision weiterzuleiten. Weitere Informationen finden Sie unter Listener-Regeln im Benutzerhandbuch für Network Load Balancer.

  4. Erstellen Sie eine Zielgruppe für Ihre grüne Service-Revision. Wenn Sie den awsvpc-Netzwerkmodus für Ihre Aufgaben verwenden, muss der Zieltyp ip sein. Weitere Informationen über Zielgruppen finden Sie unter Zielgruppen im Benutzerhandbuch für Network Load Balancer.

  5. Entscheiden Sie, ob Sie Lambda-Funktionen für die Lebenszyklusereignisse 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 jedes Lebenszyklusereignis. Weitere Informationen finden Sie unter Erstellen einer Lambda-Funktion mit der Konsole im Entwicklerhandbuch für AWS Lambda.

Verfahren

Sie können die Konsole oder die AWS CLI verwenden, um einen blauen/grünen Amazon-ECS-Service zu erstellen.

Console
  1. Öffnen Sie die Konsole unter https://console.aws.amazon.com/ecs/v2.

  2. Bestimmen Sie die Ressource, von der aus Sie den Service starten.

    So starten Sie einen Service von Schritte

    Cluster

    1. Wählen Sie auf der Seite Cluster den Cluster aus, den Sie im Service erstellen möchten.

      Die Cluster-Detailseite wird angezeigt.

    2. Wählen Sie auf der Registerkarte Services die Option Create (Erstellen).

    Aufgabendefinition
    1. Wählen Sie auf der Seite Aufgabendefinitionen die Aufgabendefinition aus.

    2. Wählen Sie im Menü Bereitstellen die Option Service erstellen aus.

    Die Seite Service erstellen wird angezeigt.

  3. Führen Sie unter Service-Details die folgenden Schritte aus:

    1. Wählen Sie für Aufgabendefinitionsfamilie die zu verwendende Aufgabendefinition aus. Geben Sie dann unter Revision der Aufgabendefinition die zu verwendende Revision ein.

    2. Wählen Sie für Service name (Servicename) einen Namen für Ihren Service aus.

  4. Um den Service in einem vorhandenen Cluster auszuführen, wählen Sie unter Vorhandener Cluster den Cluster aus. Um den Service in einem neuen Cluster auszuführen, wählen Sie Cluster erstellen aus

  5. Wählen Sie aus, wie Ihre Aufgaben auf Ihre Cluster-Infrastruktur verteilt werden. Wählen Sie unter Datenverarbeitungskonfiguration Ihre Option aus.

    Rechenoptionen Schritte

    Kapazitätsanbieter-Strategie

    1. Wählen Sie unter Rechenoptionen die Option Kapazitätsanbieter-Strategie aus.

    2. Wählen Sie eine Strategie aus:

      • Um die standardmäßige Kapazitätsanbieter-Strategie des Clusters zu verwenden, wählen Sie Use cluster default (Cluster-Standard verwenden).

      • Wenn Ihr Cluster nicht über eine Standard-Kapazitätsanbieter-Strategie verfügt oder Sie eine benutzerdefinierte Strategie verwenden möchten, wählen Sie Benutzerdefiniert verwenden, Kapazitätsanbieter-Strategie hinzufügen und definieren dann Ihre benutzerdefinierte Kapazitätsanbieter-Strategie, indem Sie eine Basis, einen Kapazitätsanbieter und ein Gewicht angeben.

    Anmerkung

    Damit Kapazitätsanbieter in einer Strategie verwendet werden kann, muss er dem Cluster zugeordnet sein.

    Starttyp
    1. Wählen Sie im Bereich Rechenoptionen die Option Starttyp aus.

    2. Wählen Sie unter Launch type (Starttyp) einen Starttyp aus.

    3. (Optional) Wenn Fargate angegeben ist, geben Sie für Plattformversion die zu verwendende Plattformversion an. Ist keine Plattformversion angegeben, wird die Plattformversion LATEST verwendet.

  6. Führen Sie im Abschnitt Bereitstellungskonfiguration Folgendes aus:

    1. Wählen Sie für Service-Typ die Option Replikat aus.

    2. Geben Sie für Desired tasks (Gewünschte Aufgaben) die Anzahl der Aufgaben an, die im Service gestartet und aufrecht erhalten werden sollen.

    3. Damit Amazon ECS die Verteilung der Aufgaben auf die Availability Zones überwacht und sie bei einem Ungleichgewicht neu verteilt, wählen Sie unter Service-Neuausgleich der Availability Zone die Option Service-Neuausgleich der Availability Zone aus.

    4. Geben Sie für Wartefrist der Zustandsprüfung die Zeitspanne (in Sekunden) ein, die der Service Scheduler fehlerhafte Elastic-Load-Balancing-, VPC-Lattice- und Container-Zustandsprüfungen ignoriert, nachdem eine Aufgabe zum ersten Mal gestartet wurde. Wenn Sie keine Übergangsfrist für die Zustandsprüfung angeben, wird der Standardwert 0 verwendet.

    1. Geben Sie für Bake-Zeit die Anzahl der Minuten ein, für die sowohl die blaue als auch die grüne Service-Revision gleichzeitig ausgeführt werden, bevor die blaue Revision beendet wird. Dadurch bleibt Zeit für die Verifizierung und das Testen.

    2. (Optional) Führen Sie Lambda-Funktionen in bestimmten Phasen der Bereitstellung aus. Wählen Sie unter Bereitstellungs-Lebenszyklus-Hooks die Phasen aus, in denen die Lebenszyklus-Hooks ausgeführt werden sollen.

      So fügen Sie einen Lebenszyklus-Hook hinzu:

      1. Wählen Sie Hinzufügen aus.

      2. Geben Sie für Lambda-Funktion den Funktionsnamen oder ARN ein.

      3. Wählen Sie für Rolle die IAM-Rolle aus, die berechtigt ist, die Lambda-Funktion aufzurufen.

      4. Wählen Sie für Lebenszyklusphasen die Phasen aus, in denen die Lambda-Funktion ausgeführt werden soll.

  7. Um zu konfigurieren, wie Amazon ECS Bereitstellungsfehler erkennt und behandelt, erweitern Sie Deployment failure detection (Erkennung von Bereitstellungsfehlern) und wählen Sie dann Ihre Optionen.

    1. Um eine Bereitstellung anzuhalten, wenn die Aufgaben nicht gestartet werden können, wählen Sie Use the Amazon ECS deployment circuit breaker (Verwenden des Amazon-ECS-Bereitstellungsschutzschalters).

      Wenn Sie möchten, dass die Software die Bereitstellung automatisch auf den letzten abgeschlossenen Bereitstellungsstatus zurücksetzt, wenn der Bereitstellungs-Schutzschalter die Bereitstellung auf einen fehlgeschlagenen Status setzt, wählen Sie Rollback bei Fehler aus.

    2. Um eine Bereitstellung basierend auf Anwendungsmetriken anzuhalten, wählen Sie CloudWatch-Alarm(e) verwenden aus. Wählen Sie dann unter CloudWatch-Alarmname die Alarme aus. Verwenden Sie die CloudWatch-Konsole, um einen neuen Alarm zu erstellen.

      Damit die Software die Bereitstellung automatisch auf den zuletzt abgeschlossenen Bereitstellungsstatus zurücksetzt, wenn ein CloudWatch-Alarm die Bereitstellung in einen fehlgeschlagenen Status versetzt, wählen Sie Rollback bei Fehler aus.

  8. (Optional) Um Ihren Service mit Service Connect zu verbinden, erweitern Sie Service Connect und geben Sie dann Folgendes an:

    1. Wählen Sie Service Connect einschalten aus.

    2. Geben Sie unter Service Connect configuration (Service-Connect-Konfiguration) den Client-Modus an.

      • Wenn Ihr Service eine Netzwerk-Client-Anwendung ausführt, die nur eine Verbindung zu anderen Services im Namespace herstellen muss, wählen Sie Nur Client-Seite aus.

      • Wenn Ihr Service eine Netzwerk- oder Webservice-Anwendung ausführt und Endpunkte für diesen Service bereitstellen muss und eine Verbindung zu anderen Services im Namespace herstellt, wählen Sie Client and server (Client und Server) aus.

    3. Um einen Namespace zu verwenden, der nicht der Standard-Cluster-Namespace ist, wählen Sie für Namespace den Service-Namespace aus. Dies kann ein Namespace sein, der separat in derselben AWS-Region in Ihrem AWS-Konto erstellt wurde, oder ein Namespace in derselben Region, der mit AWS Resource Access Manager (AWS RAM) mit Ihrem Konto geteilt wird. Weitere Informationen über geteilte AWS Cloud Map-Namespaces finden Sie unter Kontenübergreifende Freigabe von AWS Cloud Map-Namespaces im Entwicklerhandbuch für AWS Cloud Map.

    4. (Optional) Konfigurieren Sie Header-Regeln für den Test-Datenverkehr für Blau/Grün-Bereitstellungen. Geben Sie unter Test-Datenverkehrs-Routing Folgendes an:

      1. Wählen Sie Header-Regeln für Test-Datenverkehr aktivieren aus, um während des Tests bestimmte Anfragen an die grüne Service-Revision weiterzuleiten.

      2. Konfigurieren Sie für Regeln für den Header-Abgleich die Kriterien für das Routing von Test-Datenverkehr:

        • Header-Name: Geben Sie den Namen des HTTP-Headers ein, dem der Abgleich entsprechen soll (z. B. X-Test-Version oder User-Agent).

        • Übereinstimmungstyp: Wählen Sie die Kriterien für den Abgleich aus:

          • Exakte Übereinstimmung: Leitet Anfragen weiter, bei denen der Header-Wert genau dem angegebenen Wert entspricht

          • Header vorhanden: Leitet Anfragen weiter, die den angegebenen Header enthalten, unabhängig vom Wert

          • Musterübereinstimmung: Leitet Anfragen weiter, bei denen der Header-Wert einem bestimmten Muster entspricht

        • Header-Wert (wenn „Exakte Übereinstimmung“ oder „Musterübereinstimmung“ verwendet wird): Geben Sie den Wert oder das Muster ein, mit dem abgeglichen werden soll.

        Sie können mehrere Header-Abgleichsregeln hinzufügen, um eine komplexe Routing-Logik zu erstellen. Anfragen, die einer der konfigurierten Regeln entsprechen, werden zum Testen an die grüne Service-Revision weitergeleitet.

      3. Wählen Sie Header-Regel hinzufügen, um zusätzliche Bedingungen für den Header-Abgleich zu konfigurieren.

      Anmerkung

      Mithilfe von Header-Regeln für den Test-Datenverkehr können Sie neue Funktionen mit kontrolliertem Datenverkehr validieren, bevor Sie die vollständige Bereitstellung abschließen. Auf diese Weise können Sie die grüne Service-Revision mit spezifischen Anfragen (z. B. von internen Testtools oder Beta-Benutzern) testen und gleichzeitig den normalen Datenfluss zur blauen Service-Revision aufrechterhalten.

    5. (Optional) Geben Sie eine Protokollkonfiguration an. Wählen Sie Protokollsammlung verwenden aus. Die Standardoption sendet Container-Protokolle an CloudWatch Logs. Die anderen Protokolltreiberoptionen werden mit AWS FireLens konfiguriert. Weitere Informationen finden Sie unter ). Wenn ein Aufgabensatz im Service vorhanden ist, sollte er als AWS markiert werden..

      Im Folgenden wird jedes Container-Protokollziel ausführlicher beschrieben.

      • Amazon CloudWatch – Konfigurieren Sie die Aufgabe zum Senden von Container-Protokollen an CloudWatch Logs. Die Standardoptionen für den Protokolltreiber werden bereitgestellt, wodurch in Ihrem Namen eine CloudWatch-Protokollgruppe erstellt wird. Um einen anderen Protokollgruppen-Namen anzugeben, ändern Sie die Werte der Treiberoption.

      • Amazon Data Firehose – Konfigurieren Sie die Aufgabe, dass Container-Protokolle an Firehose gesendet werden. Die Standardoptionen für den Protokolltreiber werden bereitgestellt, wodurch die Protokolle an einen Bereitstellungsdatenstrom von Firehose gesendet werden. Um einen anderen Namen für den Bereitstellungsdatenstrom anzugeben, ändern Sie die Werte der Treiberoption.

      • Amazon Kinesis Data Streams – Konfigurieren Sie die Aufgabe, dass Container-Protokolle an Kinesis Data Streams gesendet werden. Die Standardoptionen für den Protokolltreiber werden bereitgestellt, wodurch Protokolle an einen Datenstrom von Kinesis Data Streams gesendet werden. Um einen anderen Datenstrom-Namen anzugeben, ändern Sie die Werte der Treiberoption.

      • Amazon OpenSearch Service – Konfigurieren Sie die Aufgabe, Container-Protokolle an eine OpenSearch-Service-Domain zu senden. Die Optionen für den Protokolltreiber müssen bereitgestellt werden.

      • Amazon S3 – Konfigurieren Sie die Aufgabe, dass Container-Protokolle an einen Amazon-S3-Bucket gesendet werden. Die Standardoptionen für den Protokolltreiber werden bereitgestellt, Sie müssen jedoch einen gültigen Amazon-S3-Bucket-Namen angeben.

  9. (Optional) Konfigurieren Sie Load Balancing für die Blau/Grün-Bereitstellung.

    Typ von Elastic Load Balancing Schritte

    Application Load Balancer

    1. Wählen Sie für Load-Balancer-Typ die Option Application Load Balancer aus.

    2. Wählen Sie Erstellen eines neuen Load Balancers, um einen neuen Application Load Balancer zu erstellen, oder Verwenden eines vorhandenen Load Balancers um einen vorhandenen Application Load Balancer auszuwählen.

    3. Wählen Sie für Container den Container aus, der den Service hostet.

    4. Geben Sie für Load balancer name (Name des Load Balancers) einen eindeutigen Namen ein.

    5. Geben Sie für Listener (Zuhörer) einen Port und ein Protokoll für den Application Load Balancer an, an dem der Application Load Balancer auf Verbindungsanfragen lauschen soll. Standardmäßig wird der Load Balancer so konfiguriert, dass er Port 80 und HTTP verwendet.

      • Geben Sie für Produktionsregel die Bewertungsreihenfolge und das Pfadmuster für die Regel ein.

        Diese Regel gilt für den Datenverkehr Ihrer Produktions-Service-Revision (blau).

      • Geben Sie für Testregel die Bewertungsreihenfolge und das Pfadmuster für die Regel ein.

        Diese Regel gilt für den Datenverkehr Ihrer Test-Service-Revision (grün).

    6. Konfigurieren Sie für Zielgruppe Folgendes:

      • Geben Sie für Target group name (Name der Zielgruppe) einen Namen und ein Protokoll für die Zielgruppe ein, an die der Application Load Balancer Anforderungen weiterleitet.

      • Wählen Sie für Protokoll das Protokoll für die Zielgruppe aus, an die der Application Load Balancer Anforderungen weiterleitet. Standardmäßig leitet die Zielgruppe Anforderungen an den ersten Container weiter, der in Ihrer Aufgabendefinition definiert ist.

      • Geben Sie für Verzögerung der Registrierungsaufhebung die Anzahl der Sekunden ein, die der Load Balancer benötigt, um den Zielstatus in UNUSED zu ändern. Standardmäßig ist ein Zeitraum von 300 Sekunden festgelegt.

      • Geben Sie für Health check path (Pfad für die Zustandsprüfung) einen Pfad an, der in Ihrem Container vorhanden ist, an den der Application Load Balancer regelmäßig Anforderungen senden soll, um den Verbindungszustand zwischen dem Application Load Balancer und dem Container zu überprüfen. Der Standard ist das Root-Verzeichnis (/).

      • Geben Sie unter Alternativer Gruppenname den Gruppennamen für die Zielgruppe für Ihre Test-Service-Revision (grün) ein.

    Network Load Balancer
    1. Wählen Sie für Load balancer type (Load-Balancer-Typ) Network Load Balancer (Network Load Balancer) aus.

    2. Wählen Sie für Load Balancer (Load Balancer) einen vorhandenen Network Load Balancer.

    3. Für Choose container to load balance (Container für den Lastausgleich wählen) wählen Sie den Container aus, der den Service hostet.

    4. Wählen Sie für Produktions-Listener den Produktions-Listener-Port und das Produktions-Listener-Protokoll aus.

      Dies ist der Listener für den Datenverkehr Ihrer Produktions-Service-Revision (blau).

    5. Wählen Sie für Test-Listener den Test-Listener-Port und das Test-Listener-Protokoll aus.

      Dies ist der Listener für den Datenverkehr Ihrer Test-Service-Revision (grün).

    6. Konfigurieren Sie für Zielgruppe Folgendes:

      • Geben Sie unter Target group name (Name der Zielgruppe) einen Namen und ein Protokoll für die Zielgruppe ein, an die der Network Load Balancer Anfragen weiterleitet.

      • Wählen Sie für Protokoll das Protokoll für die Zielgruppe aus, an die der Network Load Balancer Anforderungen weiterleitet. Standardmäßig leitet die Zielgruppe Anforderungen an den ersten Container weiter, der in Ihrer Aufgabendefinition definiert ist.

      • Geben Sie für Verzögerung der Registrierungsaufhebung die Anzahl der Sekunden ein, die der Load Balancer benötigt, um den Zielstatus in UNUSED zu ändern. Standardmäßig ist ein Zeitraum von 300 Sekunden festgelegt.

      • Geben Sie für Health check path (Pfad für die Zustandsprüfung) einen Pfad an, der in Ihrem Container vorhanden ist, an den der Application Load Balancer regelmäßig Anforderungen senden soll, um den Verbindungszustand zwischen dem Application Load Balancer und dem Container zu überprüfen. Der Standard ist das Root-Verzeichnis (/).

      • Geben Sie unter Alternativer Gruppenname den Gruppennamen für die Zielgruppe für Ihre Test-Service-Revision (grün) ein.

  10. (Optional) Um Ihren Service und Ihre Aufgaben besser identifizieren zu können, erweitern Sie den Bereich Tags (Tags) und konfigurieren Sie dann Ihre Tags.

    Damit Amazon ECS alle neu gestarteten Aufgaben automatisch mit Tags für den Clusternamen und den Aufgabendefinitions-Tags versieht, wählen Sie Verwaltete Amazon-ECS-Tags einschalten und dann für Tags verbreiten von die Option Aufgabendefinitionen.

    Damit Amazon ECS alle neu gestarteten Aufgaben automatisch mit Tags für den Clustername und die Service-Tags versieht, wählen Sie Verwaltete Amazon-ECS-Tags einschalten und dann für Tags verbreiten von die Option Service.

    Hinzufügen oder Entfernen eines Tag.

    • [Ein Tag hinzufügen] Wählen Sie Add tag (Tag hinzufügen) und führen Sie dann das Folgende aus:

      • Geben Sie bei Key (Schlüssel) den Schlüsselnamen ein.

      • Geben Sie bei Value (Wert) den Wert des Schlüssels ein.

    • [Tag entfernen] Wählen Sie neben dem Tag die Option Remove tag (Tag löschen) aus.

  11. Wählen Sie Erstellen aus.

AWS CLI
  1. Erstellen Sie eine Datei mit dem Namen service-definition.json und dem folgenden Inhalt.

    Ersetzen Sie user-input durch Ihre eigenen Werte.

    { "serviceName": "myBlueGreenService", "cluster": "arn:aws:ecs:us-west-2:123456789012:cluster/sample-fargate-cluster", "taskDefinition": "sample-fargate:1", "desiredCount": 5, "launchType": "FARGATE", "networkConfiguration": { "awsvpcConfiguration": { "subnets": [ "subnet-09ce6e74c116a2299", "subnet-00bb3bd7a73526788", "subnet-0048a611aaec65477" ], "securityGroups": [ "sg-09d45005497daa123" ], "assignPublicIp": "ENABLED" } }, "deploymentController": { "type": "ECS" }, "deploymentConfiguration": { "strategy": "BLUE_GREEN", "maximumPercent": 200, "minimumHealthyPercent": 100, "bakeTimeInMinutes": 2, "alarms": { "alarmNames": [ "myAlarm" ], "rollback": true, "enable": true }, "lifecycleHooks": [ { "hookTargetArn": "arn:aws:lambda:us-west-2:7123456789012:function:checkExample", "roleArn": "arn:aws:iam::123456789012:role/ECSLifecycleHookInvoke", "lifecycleStages": [ "PRE_SCALE_UP" ] } ] }, "loadBalancers": [ { "targetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/blue-target-group/54402ff563af1197", "containerName": "fargate-app", "containerPort": 80, "advancedConfiguration": { "alternateTargetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/green-target-group/cad10a56f5843199", "productionListenerRule": "arn:aws:elasticloadbalancing:us-west-2:123456789012:listener-rule/app/my-blue-green-demo/32e0e4f946c3c05b/9cfa8c482e204f7d/831dbaf72edb911", "roleArn": "arn:aws:iam::123456789012:role/LoadBalancerManagementforECS" } } ] }
  2. Führen Sie create-service.

    Ersetzen Sie user-input durch Ihre eigenen Werte.

    aws ecs create-service --cli-input-json file://service-definition.json

    Alternativ können Sie das folgende Beispiel verwenden, das einen Blau/Grün-Bereitstellungs-Service mit einer Load-Balancer-Konfiguration erstellt:

    aws ecs create-service \ --cluster "arn:aws:ecs:us-west-2:123456789012:cluster/MyCluster" \ --service-name "blue-green-example-service" \ --task-definition "nginxServer:1" \ --launch-type "FARGATE" \ --network-configuration "awsvpcConfiguration={subnets=[subnet-12345,subnet-67890,subnet-abcdef,subnet-fedcba],securityGroups=[sg-12345],assignPublicIp=ENABLED}" \ --desired-count 3 \ --deployment-controller "type=ECS" \ --deployment-configuration "strategy=BLUE_GREEN,maximumPercent=200,minimumHealthyPercent=100,bakeTimeInMinutes=0" \ --load-balancers "targetGroupArn=arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/MyBGtg1/abcdef1234567890,containerName=nginx,containerPort=80,advancedConfiguration={alternateTargetGroupArn=arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/MyBGtg2/0987654321fedcba,productionListenerRule=arn:aws:elasticloadbalancing:us-west-2:123456789012:listener-rule/app/MyLB/1234567890abcdef/1234567890abcdef,roleArn=arn:aws:iam::123456789012:role/ELBManagementRole}"

Nächste Schritte

  • Aktualisieren Sie den Service, um die Bereitstellung zu starten. Weitere Informationen finden Sie unter Aktualisieren eines Amazon-ECS-Services.

  • Ü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