Come posso risolvere i problemi relativi alle implementazioni blu/verdi in Amazon ECS?

Ultimo aggiornamento: 13/04/2022

Desidero risolvere i problemi relativi alle implementazioni blu/verdi per i servizi ospitati su Amazon Elastic Container Service (Amazon ECS).

Breve descrizione

I problemi più comuni relativi alle implementazioni blu/verdi per i servizi ospitati su Amazon ECS sono i seguenti:

Problemi relativi alle risorse AWS Identity and Access Management (IAM):

  • Non riesci a creare il servizio ECS perché ricevi l'errore: Please create your Service role for CodeDeploy (Crea il ruolo di servizio per CodeDeploy)
  • Viene visualizzato l'errore: 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) (L'avviamento del servizio non è riuscito con (errore: ECS non è stato in grado di assumere il ruolo fornito per questa attività. Verifica che il ruolo passato abbia la relazione di attendibilità e le autorizzazioni appropriate e che l'utente IAM disponga delle autorizzazioni per passare questo ruolo))

Problemi relativi al bilanciatore del carico/ECS:

  • Il servizio ECS non si sta stabilizzando a causa di errori di controllo dell'integrità.
  • Viene visualizzato l'errore: The ELB could not be updated due to the following error: Primary taskset target group must be behind listener (Impossibile aggiornare l'ELB a causa del seguente errore: Il gruppo di destinazione del set di attività primario deve essere dietro il listener)
  • Il traffico continua a essere indirizzato al gruppo di destinazione blu dopo la corretta implementazione.
  • Le attività ECS in esecuzione nel servizio ECS non superano i controlli dell'integrità di Application Load Balancer solo durante una nuova implementazione VERDE.
  • Le attività ECS non superano in modo coerente i controlli dell'Integrità di Application Load Balancer.
  • Il servizio ECS non è in grado di collocare un'attività perché nessuna istanza di container soddisfa tutti i requisiti. L'istanza di container corrispondente più vicina ha un numero di unità CPU disponibili insufficiente.

Problemi relativi ad AWS CloudFormation (se stai eseguendo un'implementazione blu/verde tramite CloudFormation):

  • Quando crei un set di modifiche che attiva un'implementazione blu/verde, lo stack di CloudFormation non riesce con l'errore Internal Failure (Errore interno).
  • Durante la creazione di un set di modifiche per attivare l'implementazione blu/verde, viene visualizzato l'errore: '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' del tipo AWS::CodeDeploy::BlueGreen non è riuscito con il messaggio: l'ID logico di TaskDefinition [ ] è lo stesso nel modello iniziale e in quello finale, CodeDeploy non è in grado di eseguire correttamente l'aggiornamento dello stile blu/verde)

Risoluzione

Non riesci a creare il servizio ECS perché ricevi l'errore: Please create your Service role for CodeDeploy: (Crea il ruolo di servizio per CodeDeploy:)

Viene visualizzato questo errore perché AWS CodeDeploy non dispone delle autorizzazioni IAM richieste per attuare la strategia di implementazione blu/verde. Devi concedere al servizio CodeDeploy le autorizzazioni per aggiornare il tuo servizio Amazon ECS per tuo conto.

Per risolvere questo errore, verifica che il ruolo IAM CodeDeploy sia stato creato correttamente e disponga delle autorizzazioni necessarie.

Per creare un ruolo IAM per CodeDeploy, procedi come segue:

  1. Apri la console IAM.
  2. Nel pannello di navigazione, scegli Roles (Ruoli).
  3. Scegli Create role (Crea ruolo)
  4. Nella sezione Select type of trusted entity (Seleziona il tipo di entità attendibile), scegli AWS service (Servizio AWS), quindi scegli CodeDeploy.
  5. Nella sezione Select your use case (Seleziona il tuo caso d'uso), scegli CodeDeploy - ECS, quindi scegli Next: Permissions (Successivo: Autorizzazioni).
    Nota: mantieni la policy predefinita AWSCodeDeployforECS. Questa policy include le autorizzazioni richieste da CodeDeploy per interagire correttamente con Amazon ECS e altri servizi.
  6. Scegli Next: Tags (Successivo: Tag).
  7. (Facoltativo) Immetti un nome per il tag, quindi scegli Next: Review (Successivo: Revisione).
  8. Per Role name (Nome ruolo), inserisci ecsCodeDeployRole.
  9. Scegli Create role (Crea ruolo).

Viene visualizzato l'errore: 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): (L'avviamento del servizio non è riuscito con (errore: ECS non è stato in grado di assumere il ruolo fornito per questa attività. Verifica che il ruolo passato abbia la relazione di attendibilità e le autorizzazioni appropriate e che l'utente IAM disponga delle autorizzazioni per passare questo ruolo):)

Controlla il ruolo IAM restituito dal messaggio di errore per assicurarti che l'istanza Amazon Elastic Compute Cloud (Amazon EC2) abbia una relazione attendibile per il servizio di attività ECS ecs-tasks.amazonaws.com. La relazione di attendibilità per il ruolo deve essere simile alla seguente:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "ec2.amazonaws.com",
          "ecs-tasks.amazonaws.com"
        ]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
  • Il tuo servizio ECS non si sta stabilizzando a causa di errori di controllo dell'integrità: assicurati che le mappature delle porte delle definizioni delle attività corrispondano alle porte dei gruppi di destinazione. Per ulteriori informazioni, consulta Come posso fare affinché le mie attività Amazon ECS in esecuzione, che utilizzano il tipo di avvio di Amazon EC2, superino il controllo dell'integrità di Application Load Balancer in Amazon ECS?
  • Viene visualizzato l'errore: Error Message: The ELB could not be updated due to the following error: Primary taskset target group must be behind listener (Messaggio di errore: Impossibile aggiornare l'ELB a causa del seguente errore: Il gruppo di destinazione del set di attività primario deve essere dietro il listener): questo errore viene visualizzato quando i listener o i gruppi di destinazione di Elastic Load Balancing non sono configurati correttamente. Assicurati che il listener primario ELB e il listener di test siano entrambi indirizzati al gruppo target di destinazione che sta attualmente servendo i tuoi carichi di lavoro.
  • Il traffico viene ancora instradato al gruppo di destinazione blu dopo il completamento dell'implementazione: CodeDeploy aggiorna automaticamente il listener primario del bilanciatore del carico in modo che sia indirizzato al gruppo di destinazione verde una volta completata l'implementazione. Tuttavia, CodeDeploy aggiorna solo il listener di produzione specificato. Se CodeDeploy non riesce a modificare l'indirizzo del traffico dopo l'implementazione, i listener ELB potrebbero essere configurati con il tipo di traffico sbagliato. Assicurati di avere specificato il protocollo e la porta corretti per il listener ELB primario.
  • Le attività ECS in esecuzione nel servizio ECS non superano i controlli dell'integrità di Application Load Balancer solo durante una nuova implementazione verde: controlla se un altro servizio ECS sta tentando di registrare le sue attività nello stesso gruppo di destinazione verde, causando una discrepanza. Aggiorna la configurazione del bilanciamento del carico per assicurarti che in un gruppo di destinazione sia registrato solo un servizio o una porta ECS.
  • Le attività ECS non superano in modo coerente i controlli dell'integrità di Application Load Balancer: questo problema potrebbe verificarsi quando i container impiegano più tempo del previsto per l'avvio. Controlla il codice dell'applicazione container per individuare la causa del ritardo. Per risolvere questo problema, ottimizza il codice dell'applicazione. Se non riesci ancora a risolvere il problema, includi un periodo di tolleranza per il controllo dell'integrità sul tuo servizio ECS in modo che i container abbiano tempo a sufficienza per avviarsi.
  • Il servizio ECS non è in grado di collocare un'attività perché nessuna istanza di container soddisfa tutti i requisiti. L'istanza di container corrispondente più vicina ha un numero di unità CPU disponibili insufficiente: assicurati di disporre di risorse sufficienti per l'istanza di container prima di eseguire un'implementazione blu/verde.

Nota: questi passaggi per la risoluzione dei problemi sono applicabili solo se utilizzi CloudFormation per l'implementazione blu/verde

  • Quando crei un set di modifiche che attiva un'implementazione blu/verde, lo stack CloudFormation non riesce con un errore Internal Failure (Errore interno): per risolvere questo problema, usa un ruolo di servizio CloudFormation e collega questo ruolo allo stack CloudFormation. Assicurati che il ruolo di servizio disponga delle autorizzazioni necessarie per eseguire tutte le operazioni dello stack. Nota: non è possibile rimuovere il ruolo di servizio dallo stack dopo la creazione dello stack.
  • Durante la creazione di un set di modifiche per attivare l'implementazione blu/verde, viene visualizzato l'errore: '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' del tipo AWS::CodeDeploy::BlueGreen non è riuscito con il messaggio: l'ID logico di TaskDefinition [] è lo stesso nel modello iniziale e in quello finale, CodeDeploy non è in grado di eseguire correttamente l'aggiornamento dello stile blu/verde) : quando specifichi un listener di test che è già indirizzato al gruppo di destinazione verde, l'hook CodeDeploy fallisce restituendo questo errore. Assicurati che il tuo listener di test non sia già indirizzato al gruppo di destinazione verde prima di eseguire l'implementazione blu/verde.

Importante: non utilizzare l'API UpdateService per annullare e ripristinare l'implementazione blu/verde. Utilizza invece l'API CreateDeployment. Per ripristinare un'implementazione, utilizza l'API StopDeployment.