Direkt zum Inhalt

Wie behebe ich Fehler, die bei der Konfiguration meiner Amazon ECS Blau/Grün-Bereitstellung in CloudFormation auftreten?

Lesedauer: 4 Minute
0

Wenn ich eine Blau/Grün-Bereitstellung von Amazon Elastic Container Service (Amazon ECS) in AWS CloudFormation konfiguriere, erhalte ich Fehlermeldungen.

Lösung

Wenn du den AWS::CodeDeploy::BlueGreen-Hook in CloudFormation verwendest, erhältst du möglicherweise eine Fehlermeldung. Um den Fehler zu beheben, befolge die entsprechenden Lösungsabschnitte.

Fehler beim Parsen

Wenn du die Berechtigungen nicht erteilen oder die Eigenschaft Gewichtung nicht in die Vorlage aufnimmst, kann AWS CodeDeploy den bereitgestellten Abschnitt mit den Vorlagen-Hooks nicht parsen. Du erhältst möglicherweise die folgende Fehlermeldung:

„'CodeDeployBlueGreenHook' of type AWS::CodeDeploy::BlueGreen failed with message: Internal Failure“

Wenn du einen Änderungssatz erstellst, der eine Blau/Grün-Bereitstellung aktiviert, musst du an den CloudFormation-Stack die AWS Identity and Access Management (IAM)-Rolle des CloudFormation-Services anfügen. Gewähre der Servicerolle die Berechtigungen zum Ausführen der Stack-Operationen, um diesen Fehler zu beheben.

Hinweis: Nachdem CodeDeploy den Stack erstellt hat, kannst du die Servicerolle nicht mehr aus dem Stack entfernen.

Wenn du DefaultAction so definierst, dass sie die ForwardConfig-Eigenschaft einbezieht, die Eigenschaft Gewichtung jedoch nicht in deinen AWS::ElasticLoadBalancingV2::Listener-Ressourcentyp aufgenommen hast, schlägt der CodeDeploy-Hook fehl. Um diesen Fehler zu beheben, stelle sicher, dass du die Eigenschaft Gewichtung in den Ressourcentyp aufnimmst.

Zusätzlicher Ressourcenfehler

Der folgende Fehler tritt auf, wenn du Aktualisierungen für Ressourcen, die Grün-Bereitstellungen initiieren, und Aktualisierungen für andere Ressourcen in dieselbe Stack-Aktualisierung einbeziehst:

„Additional resource diff other than Amazon ECS application related resource update is detected,CodeDeploy can't perform BlueGreen style update properly. Diff resource logical Ids: []“

Führe die folgenden Schritte aus, um diesen Fehler zu beheben:

  1. Führe zwei separate Stack-Aktualisierungsvorgänge durch.
    Hinweis: Eine Stack-Aktualisierung darf nur die aktualisierten Ressourcen enthalten, die Grün-Bereitstellungen initiieren (AWS::ECS::TaskDefinition und AWS::ECS::TaskSet). Die zweite Stack-Aktualisierung muss Änderungen an anderen Ressourcen beinhalten.
  2. Entferne die Abschnitte Transform (Transformieren) und Hooks aus der CloudFormation-Vorlage und führe dann die Stack-Aktualisierung durch. Hinweis: In diesem Fall führt CloudFormation keine Grün-Bereitstellung durch.

Fehler, weil nicht unterstützt

Import- oder Exportkonfigurationen in der CloudFormation-Vorlage werden nicht unterstützt. Wenn du Ausgaben deklarierst oder Fn::ImportValue verwendest, um Werte aus anderen Stacks für Vorlagen zu importieren, die Amazon-ECS-Blau/Grün-Bereitstellungen definieren, erhältst du die folgende Fehlermeldung:

„Imports and exports are currently not supported on templates using hooks“

Verwende in der Vorlage keine Importe oder Exporte, um diesen Fehler zu beheben.

CodeDeploy kann während einer Grün-Bereitstellung keine Parameter aktualisieren, die dynamische Verweise verwenden, um ihre Werte von Drittanbietern abzurufen, oder die keine NoEcho-Attributdefinition haben. Wenn du dynamische Verweise verwendest, wird möglicherweise die folgende Fehlermeldung angezeigt:

„'CodeDeployBlueGreenHook' of type AWS::CodeDeploy::BlueGreen failed with message: NoEcho parameter Dynamic references is not supported in template when using AWS::CodeDeploy::BlueGreen Hook“

Verwende keine dynamischen Verweise in der Vorlage, um diesen Fehler zu beheben.

Fehler des Test-Listeners

Wenn du einen Test-Listener angibst, der bereits auf die Grün-Zielgruppe verweist, schlägt der CodeDeploy-Hook fehl und du erhältst die folgende Fehlermeldung:

„'CodeDeployBlueGreenHook' of type AWS::CodeDeploy::BlueGreen failed with message: Replacement target group [ALBTargetGroupGreen] is already serving traffic behind listener [ALBListenerTestTraffic]“

Um diesen Fehler zu beheben, stelle sicher, dass sowohl die Felder Production als auch Test-Listener den gleichen Wert haben, wenn du die CloudFormation-Vorlage hochlädst.

Fehler bei fehlender Transformation

Wenn du den Abschnitt Transform (Transformieren) nicht in die aktualisierte CloudFormation-Vorlage aufnimmst, wird die Transformation nicht aufgerufen. Wenn die logischen IDs der Blau/Grün-Ressource nicht transformiert werden, erhältst du die folgende Fehlermeldung:

„'CodeDeployBlueGreenHook' of type AWS::CodeDeploy::BlueGreen failed with message: The submitted template's primary task definition 'BlueTaskDefinition' was never updated. The template's 'AWS::CodeDeployBlueGreen' Transform might be missing or removed“

Um diesen Fehler zu beheben, stelle sicher, dass du den Abschnitt Transform (Transformieren) in die CloudFormation-Vorlage aufnimmst, bevor du den CloudFormation-Stack aktualisierst.

Load-Balancer-Fehler

Der Typ TrafficRoutingconfig muss auf AllAtOnce gesetzt sein. Wenn du einen Network Load Balancer in die Vorlage aufnimmst und den AWS::CodeDeploy::BlueGreen-Hook sowie den TrafficRoutingConfig-Typ auf TimeBasedCanary oder TimeBasedLinear festgelegt hast, erhältst du die folgende Fehlermeldung:

„'CodeDeployBlueGreenHook' of type AWS::CodeDeploy::BlueGreen failed with message: Only AllAtOnce traffic routing config type is supported for network load balancers.“

Um diesen Fehler zu beheben, stelle sicher, dass du den Typ TrafficRoutingConfig auf AllAtOnce festlegst.

Wenn du den Amazon-Ressourcennamen (ARN) des Load Balancer als Parameter konfigurierst und !Ref verwendest, um auf die Eigenschaft LoadBalancerArn in AWS::ElasticLoadBalancingV2::Listener zu verweisen, erhältst du möglicherweise die folgende Fehlermeldung:

„Transform AWS::CodeDeployBlueGreen failed with: Failed to transform template. Could not find AWS::ElasticLoadBalancingV2::LoadBalancer LoadBalancerArn“

Um diesen Fehler zu beheben, erstelle die Load Balancer-Ressource in der Vorlage und verweise in der Eigenschaft LoadBalancerArn auf den ARN. Oder du kannst den Load-Balancer-ARN in der Eigenschaft LoadBalancerArn fest codieren.

Amazon-ECS-Servicefehler

Wenn du zwei verschiedene Amazon-ECS-Serviceziele hinzufügst, die sich einen einzigen Application Load Balancer unter der Eigenschaft Hooks Applications (Anwendungen) teilen, erhältst du möglicherweise die folgende Fehlermeldung:

„'CodeDeployBlueGreenHook' of type AWS::CodeDeploy::BlueGreen failed with message: Handler failed: Applications must have at most one application in AWS::CodeDeploy::BlueGreen Hook“

Um diesen Fehler zu beheben, stelle sicher, dass du nur einen Amazon-ECS-Service an den Application Load Balancer anfügst.

AWS OFFICIALAktualisiert vor 2 Monaten