Salta al contenuto

Come posso risolvere gli errori che ricevo quando configuro la mia implementazione blu/verde di Amazon ECS in CloudFormation?

5 minuti di lettura
0

Quando configuro un'implementazione blu/verde di Amazon Elastic Container Service (Amazon ECS) in AWS CloudFormation, ricevo errori.

Risoluzione

Quando utilizzi l'hook AWS::CodeDeploy::BlueGreen in CloudFormation, potresti ricevere un messaggio di errore. Per risolverlo, applica la procedura descritta nelle corrispondenti sezioni di risoluzione.

Errore di analisi non riuscita

Se non concedi le autorizzazioni o non includi la proprietà Weight nel modello, AWS CodeDeploy non riesce ad analizzare la sezione Hook del modello fornito. Potresti ricevere il seguente messaggio di errore:

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

Quando crei un set di modifiche che attiva un'implementazione blu/verde, devi collegare il ruolo AWS Identity and Access Management (AWS IAM) del servizio CloudFormation allo stack di CloudFormation. Per risolvere questo errore, concedi al ruolo di servizio le autorizzazioni per eseguire le operazioni sullo stack.

Nota: dopo che CodeDeploy ha creato lo stack, non puoi rimuovere il ruolo di servizio dallo stack.

Se definisci DefaultAction includendo la proprietà ForwardConfig, ma non hai incluso la proprietà Weight nel tipo di risorsa AWS::ElasticLoadBalancingV2::Listener, l'hook di CodeDeploy ha esito negativo. Per risolvere questo errore, assicurati di includere la proprietà Weight nel tipo di risorsa.

Errore di risorsa aggiuntiva

L'errore seguente si verifica quando nello stesso aggiornamento dello stack includi aggiornamenti di risorse che avviano implementazioni verdi e aggiornamenti di altre risorse:

"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: []"

Per risolvere questo errore, completa i seguenti passaggi:

  1. Esegui due operazioni distinte di aggiornamento dello stack.
    Nota: il primo aggiornamento dello stack deve includere solo gli aggiornamenti di risorse che avviano implementazioni verdi (AWS::ECS::TaskDefinition e AWS::ECS::TaskSet). Il secondo deve includere le modifiche di altre risorse.
  2. Rimuovi le sezioni Trasforma e Hook dal modello CloudFormation, quindi esegui l'aggiornamento dello stack. Nota: in questo caso, CloudFormation non esegue un'implementazione verde.

Errore non supportato

Le configurazioni di importazione o esportazione nel modello CloudFormation non sono supportate. Se dichiari Output o utilizzi Fn::ImportValue per importare valori da altri stack per modelli che definiscono le implementazioni blu/verdi di Amazon ECS, ricevi il seguente errore:

"Imports and exports are currently not supported on templates using hooks"

Per risolvere questo errore, non utilizzare importazioni o esportazioni nel modello.

CodeDeploy non è in grado di aggiornare parametri che utilizzano riferimenti dinamici per recuperare i loro valori da terze parti o non hanno una definizione di attributo NoEcho durante un'implementazione verde. Quando utilizzi riferimenti dinamici, potresti ricevere il seguente errore:

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

Per risolvere questo errore, non utilizzare riferimenti dinamici nel modello.

Errore di listener di test

Se specifichi un listener di test che punta già verso il gruppo di destinazione verde, l'hook di CodeDeploy ha esito negativo e ricevi il seguente errore:

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

Per risolvere questo errore, assicurati che entrambi i campi Production (Produzione) e Test Listeners (Listener di test) abbiano lo stesso valore quando carichi il modello CloudFormation.

Errore di trasformazione mancante

Se non includi la sezione Trasforma nel modello CloudFormation aggiornato, la trasformazione non viene invocata. Se gli ID logici delle risorse blu/verdi non si trasformano, ricevi il seguente errore:

"'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"

Per risolvere questo errore, assicurati di includere la sezione Trasforma nel modello CloudFormation prima di aggiornare lo stack di CloudFormation.

Errore di bilanciatore del carico

Il tipo TrafficRoutingconfig deve essere impostato su AllAtOnce. Se, con un Network Load Balancer incluso nel modello, hai l'hook AWS::CodeDeploy::BlueGreen e il tipo TrafficRoutingConfig impostati come TimeBasedCanary o TimeBasedLinear, ricevi il seguente errore:

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

Per risolvere questo errore, assicurati di impostare il tipo TrafficRoutingConfig su AllAtOnce.

Se configuri il nome della risorsa Amazon (ARN) del bilanciatore del carico come Parametro e utilizzi !Ref per fare riferimento alla proprietà LoadBalancerArn in AWS::ElasticLoadBalancingV2::Listener, potresti ricevere il seguente errore:

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

Per risolvere questo errore, crea la risorsa bilanciatore del carico nel modello e fai riferimento all'ARN nella proprietà LoadBalancerArn. In alternativa, puoi codificare l'ARN del bilanciatore del carico nella proprietà LoadBalancerArn.

Errore di servizio Amazon ECS

Se aggiungi due diverse destinazioni di servizio Amazon ECS che condividono un unico Application Load Balancer nella proprietà Hooks Applications, potresti ricevere il seguente errore:

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

Per risolvere questo errore, assicurati di collegare un solo servizio Amazon ECS all'Application Load Balancer.

AWS UFFICIALEAggiornata 2 mesi fa