Wie behebe ich Probleme im Zusammenhang mit Blue/Green-Bereitstellungen in Amazon ECS?

Lesedauer: 7 Minute
0

Ich möchte Probleme im Zusammenhang mit Blue/Green-Bereitstellungen für Services beheben, die auf Amazon Elastic Container Service (Amazon ECS) gehostet werden.

Kurzbeschreibung

Die häufigsten Probleme im Zusammenhang mit Blue/Green-Bereitstellungen für auf Amazon ECS gehostete Services sind die folgenden:

Probleme im Zusammenhang mit AWS Identity and Access Management (IAM):

  • Sie können Ihren ECS-Service nicht erstellen, weil Sie diesen Fehler erhalten:Please create your Service role for CodeDeploy (Bitte erstellen Sie Ihre Servicerolle für CodeDeploy)
  • Sie erhalten diesen Fehler:**service

failed to launch a task with (error ECS was unable to assume the role

that was provided for this task. Please verify that the role being passed has the proper trust relationship and permissions and that your IAM user has permissions to pass this role.** (

-Service konnte eine Aufgabe nicht launchen mit (Fehler ECS konnte die für diese Aufgabe bereitgestellte Rolle

nicht übergeben. Bitte stellen Sie sicher, dass die übergebene Rolle über die richtige Vertrauensstellung und Berechtigungen verfügt und dass Ihr IAM-Benutzer die Berechtigung hat, diese Rolle zu übergeben).

Probleme im Zusammenhang mit Load Balancer/ECS:

  • Ihr ECS-Service stabilisiert sich aufgrund von Fehlern bei der Zustandsprüfung nicht.
  • Sie erhalten diesen Fehler: The ELB could not be updated due to the following error: Primary taskset target group must be behind listener (Der ELB konnte aufgrund des folgenden Fehlers nicht aktualisiert werden: Primäre Taskset-Zielgruppe muss hinter dem Listener

stehen)

  • Der Datenverkehr wird nach erfolgreicher Bereitstellung immer noch an die Blue-Zielgruppe weitergeleitet.
  • Ihre ECS-Aufgaben, die im ECS-Service ausgeführt werden, bestehen nur während einer neuen GREEN-Bereitstellung nicht die Zustandsprüfungen von Application Load Balancer.
  • Ihre ECS-Aufgaben bestehen in regelmäßigen Abständen die Zustandsprüfungen von Application Load Balancer nicht.
  • Ihr ECS-Service kann keine Aufgabe platzieren, da keine Container-Instance alle Anforderungen erfüllt. Die passendste Container-Instance verfügt über unzureichende CPU-Einheiten.

Probleme im Zusammenhang mit AWS CloudFormation (wenn Sie eine Blue/Green-Bereitstellung über CloudFormation durchführen):

  • Beim Erstellen eines Änderungssatzes, der eine Blue/Green-Bereitstellung auslöst, schlägt der CloudFormation-Stack mit einem internen Fehler fehl.
  • Beim Erstellen eines Änderungssatzes zum Auslösen der Blue/Green-Bereitstellung wird ein Fehler angezeigt: **'CodeDeployBlueGreenHook' of type AWS::CodeDeploy::BlueGreen failed with message: The TaskDefinition logical Id [

] is the same between initial and final template, CodeDeploy can't perform BlueGreen style update properly** ('CodeDeployBlueGreenHook' vom Typ AWS::CodeDeploy::BlueGreen ist mit der Meldung fehlgeschlagen: Die logische TaskDefinition-ID [

] ist zwischen der ursprünglichen und der endgültigen Vorlage identisch. CodeDeploy kann BlueGreen-Update nicht korrekt durchführen).

Auflösung

Probleme im Zusammenhang mit IAM

Sie können Ihren ECS-Service nicht erstellen, weil Sie den Fehler erhalten: Please create your Service role for CodeDeploy (Bitte erstellen Sie Ihre Servicerolle für CodeDeploy):

Sie erhalten diesen Fehler, weil AWS CodeDeploy nicht über die erforderlichen IAM-Berechtigungen zum Ausführen der Blue/Green-Bereitstellungsstrategie verfügt. Sie müssen dem CodeDeploy-Service Berechtigungen erteilen, um Ihren Amazon-ECS-Service in Ihrem Namen zu aktualisieren.

Um diesen Fehler zu beheben, stellen Sie sicher, dass Ihre CodeDeploy-IAM-Rolle korrekt erstellt wurde und über die erforderlichen Berechtigungen verfügt.

Gehen Sie wie folgt vor, um eine IAM-Rolle für CodeDeploy zu erstellen:

  1. Öffnen Sie die IAM-Konsole.
  2. Wählen Sie im Navigationsbereich Roles (Rollen) aus.
  3. Wählen Sie Create role (Rolle erstellen) aus
  4. Wählen Sie im Abschnitt Select type of trusted entity (Typ der vertrauenswürdigen Entität auswählen) die Option AWS-Service und dann CodeDeploy aus.
  5. Wählen Sie im Abschnitt Select your use case (Anwendungsfall auswählen) CodeDeploy – ECS aus und dann Next: Permissions (Weiter: Berechtigungen).
    Hinweis: Behalten Sie die standardmäßige AWSCodeDeployforECS-Richtlinie bei. Diese Richtlinie umfasst die Berechtigungen, die CodeDeploy für die korrekte Interaktion mit Amazon ECS und anderen Services benötigt.
  6. Wählen Sie Next: Tags (Weiter: Tags) aus.
  7. (Optional) Geben Sie einen Tagnamen ein, und wählen Sie dann Next: Review (Weiter: Überprüfung) aus.
  8. Geben Sie als Rollenname ecsCodeDeployRole ein.
  9. Wählen Sie Create role (Rolle erstellen) aus.

Sie erhalten den Fehler: service failed to launch a task with (error ECS was unable to assume the role that was provided for this task: Verify that the IAM role being passed has the proper trust relationship and permissions and that your IAM user has permissions to pass this role): (Der Service konnte eine Aufgabe mit nicht starten mit (Fehler ECS konnte die für diese Aufgabe bereitgestellte Rolle nicht übernehmen: Stellen Sie sicher, dass die übergebene IAM-Rolle über die richtige Vertrauensstellung und Berechtigungen verfügt und dass Ihr IAM-Benutzer über Berechtigungen zum Übergeben dieser Rolle verfügt):

Überprüfen Sie die von der Fehlermeldung zurückgegebene IAM-Rolle, um sicherzustellen, dass die Amazon Elastic Compute Cloud (Amazon EC2)-Instance eine Vertrauensbeziehung für den ECS-Aufgabenservice ecs-tasks.amazonaws.com hat. Die Vertrauensstellung für Ihre Rolle muss etwa wie folgt aussehen:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "ec2.amazonaws.com",
          "ecs-tasks.amazonaws.com"
        ]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

Probleme im Zusammenhang mit Load Balancer/ECS

  • Ihr ECS-Service stabilisiert sich aufgrund von Fehlern bei der Zustandsprüfung nicht: Stellen Sie sicher, dass die Port-Mappings Ihrer Aufgabendefinitionen mit den Ports Ihrer Zielgruppen übereinstimmen. Weitere Informationen finden Sie unter Wie kann ich meine Amazon-ECS-Aufgaben mit dem Amazon-EC2-Launchtyp ausführen, um die Zustandsprüfung von Application Load Balancer in Amazon ECS zu bestehen?
  • Sie erhalten die Fehlermeldung: The ELB could not be updated due to the following error: Primary taskset target group must be behind listener (Der ELB konnte aufgrund des folgenden Fehlers nicht aktualisiert werden: Die primäre Taskset-Zielgruppe muss hinter dem Listener stehen): Sie erhalten diesen Fehler, wenn Ihre Elastic-Load-Balancing-Listener oder -Zielgruppen falsch konfiguriert sind. Stellen Sie sicher, dass der primäre ELB-Listener und der Testlistener beide auf die primäre Zielgruppe zeigen, die derzeit Ihre Workloads bedient.
  • Der Datenverkehr wird nach erfolgreicher Bereitstellung immer noch an die Blue-Zielgruppe weitergeleitet: CodeDeploy aktualisiert den primären Listener Ihrer Lastenverteilung automatisch so, dass er nach Abschluss der Bereitstellung auf die Green-Zielgruppe zeigt. CodeDeploy aktualisiert jedoch nur den von Ihnen angegebenen Produktions-Listener. Wenn CodeDeploy den Datenverkehr nach der Bereitstellung nicht wechselt, sind Ihre ELB-Listener möglicherweise mit dem falschen Datenverkehrstyp konfiguriert. Stellen Sie sicher, dass Sie das richtige Protokoll und den richtigen Port für den primären ELB-Listener angegeben haben.
  • Ihre im ECS-Service ausgeführten ECS-Aufgaben bestehen nur während einer neuen Green-Bereitstellung nicht die Application-Load-Balancer-Zustandsprüfungen: Prüfen Sie, ob ein anderer ECS-Service versucht, seine Aufgaben bei derselben Green-Zielgruppe zu registrieren, was zu einer Diskrepanz führt. Aktualisieren Sie die Konfiguration der Lastenverteilung, um sicherzustellen, dass nur ein ECS-Service oder -Port für eine Zielgruppe registriert ist.
  • Ihre ECS-Aufgaben bestehen in regelmäßigen Abständen die Zustandsprüfung von Application Load Balancer nicht: Dieses Problem kann auftreten, wenn Ihre Container mehr Zeit zum Starten benötigen, als erwartet. Überprüfen Sie den Code Ihrer Container-Anwendung, um die Ursache für die Verzögerung zu ermitteln. Optimieren Sie den Anwendungscode, um dieses Problem zu beheben. Wenn Sie das Problem immer noch nicht lösen können, fügen Sie Ihrem ECS-Service eine Nachfrist für die Zustandsprüfung hinzu, damit die Container genügend Zeit zum Starten haben.
  • Ihr ECS-Service kann keine Aufgabe platzieren, da keine Container-Instance alle Anforderungen erfüllt. Für die passendste Container-Instance stehen nicht genügend CPU-Einheiten zur Verfügung: Stellen Sie sicher, dass Sie über genügend Container-Instance-Ressourcen verfügen, bevor Sie eine Blue/Green-Bereitstellung durchführen.

Probleme im Zusammenhang mit CloudFormation

Hinweis: Diese Schritte zur Fehlerbehebung sind nur anwendbar, wenn Sie CloudFormation für Ihre Blue/Green-Bereitstellung verwenden

  • Beim Erstellen eines Änderungssatzes, der eine Blue/Green-Bereitstellung auslöst, schlägt der CloudFormation-Stack mit einem internen Fehler fehl: Verwenden Sie eine CloudFormation-Servicerolle, um dieses Problem zu mindern und fügen Sie diese Rolle Ihrem CloudFormation-Stack an. Stellen Sie sicher, dass die Servicerolle über die erforderlichen Berechtigungen zum Ausführen aller Stack-Vorgänge verfügt. Beachten Sie, dass Sie die Servicerolle nicht aus dem Stack entfernen können, nachdem der Stack erstellt wurde.
  • **Beim Erstellen eines Änderungssatzes zum Auslösen der Blue/Green-Bereitstellung wird ein Fehler angezeigt: 'CodeDeployBlueGreenHook' of type AWS::CodeDeploy::BlueGreen failed with message: The TaskDefinition logical Id [

] is the same between initial and final template, CodeDeploy can't perform BlueGreen style update properly** ('CodeDeployBlueGreenHook' vom Typ AWS::CodeDeploy::BlueGreen ist mit der Meldung fehlgeschlagen: Die logische TaskDefinition-ID [

] ist zwischen der ursprünglichen und der endgültigen Vorlage identisch. CodeDeploy kann BlueGreen-Update nicht korrekt durchführen). Stellen Sie sicher, dass Ihr Testlistener nicht bereits auf die Green-Zielgruppe zeigt, bevor Sie die Blue/Green-Bereitstellung ausführen.

Wichtig: Verwenden Sie die UpdateService-API nicht, um die Blue/Green-Bereitstellung abzubrechen und rückgängig zu machen. Verwenden Sie stattdessen die CreateDeployment-API. Verwenden Sie zum Zurücksetzen einer Bereitstellung die StopDeployment-API für die Bereitstellung.


Relevante Informationen

Wie kann ich Blue/Green-Bereitstellungen für auf Amazon-ECS gehostete Services durchführen?

Führen Sie ECS-Blue/Green-Bereitstellungen über CodeDeploy mithilfe von AWS CloudFormation durch

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren