Risolvi i problemi di distribuzione di Amazon ECS - AWS CodeDeploy

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Risolvi i problemi di distribuzione di Amazon ECS

Si verifica un timeout durante l'attesa del set di attività sostitutivo

Problema: viene visualizzato il seguente messaggio di errore durante la distribuzione dell'applicazione Amazon ECS utilizzando: CodeDeploy

The deployment timed out while waiting for the replacement task set to become healthy. This time out period is 60 minutes.

Possibile causa: questo errore può verificarsi se c'è un errore nel file di definizione delle attività o in altri file relativi alla distribuzione. Ad esempio, se c'è un errore di battitura nel image campo del file di definizione dell'attività, Amazon ECS cercherà di recuperare l'immagine del contenitore sbagliata e fallirà continuamente, causando questo errore.

Possibili correzioni e passaggi successivi:

  • Correggi gli errori tipografici e i problemi di configurazione nel file di definizione delle attività e in altri file.

  • Controlla l'evento relativo al servizio Amazon ECS e scopri perché le attività di sostituzione non stanno diventando salutari. Per ulteriori informazioni sugli eventi di Amazon ECS, consulta gli eventi di Amazon ECS nella Amazon Elastic Container Service Developer Guide.

  • Consulta la sezione sulla risoluzione dei problemi di Amazon ECS nella Amazon Elastic Container Service Developer Guide per gli errori relativi ai messaggi dell'evento.

Si verifica un timeout durante l'attesa del proseguimento della notifica

Problema: viene visualizzato il seguente messaggio di errore durante la distribuzione dell'applicazione Amazon ECS utilizzando: CodeDeploy

The deployment timed out while waiting for a notification to continue. This time out period is n minutes.

Causa possibile: questo errore potrebbe verificarsi se hai specificato un tempo di attesa nel campo Specificare quando reindirizzare il traffico quando hai creato il gruppo di distribuzione, ma la distribuzione non è potuta terminare prima della scadenza del tempo di attesa.

Possibili correzioni e passaggi successivi:

Il ruolo IAM non dispone di autorizzazioni sufficienti

Problema: viene visualizzato il seguente messaggio di errore durante la distribuzione dell'applicazione Amazon ECS utilizzando: CodeDeploy

The IAM role role-arn does not give you permission to perform operations in the following AWS service: AWSLambda.

Causa possibile: questo errore potrebbe verificarsi se hai specificato una funzione Lambda nella Hookssezione del AppSpec file, ma non hai dato l' CodeDeploy autorizzazione al servizio Lambda.

Correzione possibile: aggiungere l'lambda:InvokeFunctionautorizzazione al ruolo di CodeDeploy servizio. Per aggiungere questa autorizzazione, aggiungi una delle seguenti politiche AWS gestite al ruolo: AWSCodeDeployRoleForECS oppureAWSCodeDeployRoleForECSLimited. Per informazioni su queste politiche e su come aggiungerle al ruolo di CodeDeploy servizio, consultaFase 2: Creare un ruolo di servizio per CodeDeploy.

La distribuzione è scaduta in attesa di una richiamata dello stato

Problema: viene visualizzato il seguente messaggio di errore durante la distribuzione dell'applicazione Amazon ECS utilizzando: CodeDeploy

The deployment timed out while waiting for a status callback. CodeDeploy expects a status callback within one hour after a deployment hook is invoked.

Possibile causa: questo errore potrebbe verificarsi se hai specificato una funzione Lambda nella Hookssezione del AppSpec file, ma la funzione Lambda non è in grado di chiamare l'PutLifecycleEventHookExecutionStatusAPI necessaria per restituire uno Succeeded stato or. Failed CodeDeploy

Possibili correzioni e passaggi successivi:

  • Aggiungi l'codedeploy:putlifecycleEventHookExecutionStatusautorizzazione al ruolo di esecuzione Lambda utilizzato dalla funzione Lambda che hai specificato nel file. AppSpec Questa autorizzazione concede alla funzione Lambda la possibilità di restituire uno stato Succeeded di Failed o a. CodeDeploy Per ulteriori informazioni sul ruolo di esecuzione Lambda, consulta Ruolo di esecuzione Lambda nella Guida per l'utente.AWS Lambda

  • Controlla il codice della funzione Lambda e i log di esecuzione per assicurarti che la funzione Lambda stia chiamando l'PutLifecycleEventHookExecutionStatusAPI per CodeDeploy sapere se il test di convalida CodeDeploy del ciclo di vita è o meno. Succeeded Failed Per informazioni sull'API, consulta l'putlifecycleEventHookExecutionStatusAPI Reference. PutLifecycleEventHookExecutionStatusAWS CodeDeploy Per informazioni sui log di esecuzione Lambda, consulta Accedere ai log di Amazon CloudWatch per. AWS Lambda

L'implementazione non è riuscita perché una o più funzioni di convalida degli eventi del ciclo di vita non sono riuscite

Problema: viene visualizzato il seguente messaggio di errore durante la distribuzione dell'applicazione Amazon ECS utilizzando: CodeDeploy

The deployment failed because one or more of the lifecycle event validation functions failed.

Causa possibile: questo errore potrebbe verificarsi se hai specificato una funzione Lambda nella Hookssezione del AppSpec file, ma la funzione Lambda è tornata Failed a CodeDeploy quando è stata chiamata. PutLifecycleEventHookExecutionStatus Questo errore indica CodeDeploy che il test di convalida del ciclo di vita non è riuscito.

Possibile passaggio successivo: controlla i log di esecuzione di Lambda per scoprire perché il codice del test di convalida non funziona. Per informazioni sui log di esecuzione Lambda, consulta Accedere ai log di Amazon CloudWatch per. AWS Lambda

L'ELB non può essere aggiornato a causa del seguente errore: Il gruppo target del taskset primario deve essere dietro il listener

Problema: viene visualizzato il seguente messaggio di errore durante la distribuzione dell'applicazione Amazon ECS utilizzando: CodeDeploy

The ELB could not be updated due to the following error: Primary taskset target group must be behind listener

Possibile causa: questo errore può verificarsi se hai configurato un listener di test opzionale e questo è configurato con un gruppo target errato. Per ulteriori informazioni sul test listener in CodeDeploy, vedere Prima di iniziare una ECS distribuzione Amazon e. Cosa succede durante una ECS distribuzione Amazon Per ulteriori informazioni sui set di attività, consulta il riferimento TaskSetall'API di Amazon Elastic Container Service e describe-task-setla sezione Amazon ECS del AWS CLI Command Reference.

Possibile soluzione: assicurati che il listener di produzione e il listener di test di Elastic Load Balancing puntino entrambi al gruppo target che attualmente serve i tuoi carichi di lavoro. Ci sono tre punti da controllare:

La mia implementazione a volte fallisce quando utilizzo Auto Scaling

Problema: state utilizzando Auto Scaling con CodeDeploy e notate che le vostre implementazioni a volte falliscono. Per ulteriori informazioni sui sintomi di questo problema, consulta l'argomento «Per i servizi configurati per utilizzare il service auto scaling e il tipo di distribuzione blu/verde, la scalabilità automatica non è bloccata durante una distribuzione ma in alcune circostanze può fallire nella Amazon Elastic Container Service Developer Guide».

Possibile causa: questo problema potrebbe verificarsi in caso di conflitto tra CodeDeploy i processi di Auto Scaling.

Possibile correzione: sospendere e riprendere i processi di Auto Scaling durante la distribuzione utilizzando CodeDeploy l'API (o RegisterScalableTarget il register-scalable-target AWS CLI comando corrispondente). Per ulteriori informazioni, vedere Suspend and resume scaling for Application Auto Scaling nella Application Auto Scaling User Guide.

Nota

CodeDeploy non è possibile chiamare direttamente. RegisterScaleableTarget Per utilizzare questa API, devi configurare CodeDeploy l'invio di una notifica o di un evento ad Amazon Simple Notification Service (o Amazon CloudWatch). È quindi necessario configurare Amazon SNS (or CloudWatch) per chiamare una funzione Lambda e configurare la funzione Lambda per chiamare l'API. RegisterScalableTarget L'RegisterScalableTargetAPI deve essere chiamata con il SuspendedState parametro impostato su per true sospendere le operazioni di Auto Scaling false e per riprenderle.

La notifica o l'evento CodeDeploy inviato deve verificarsi all'avvio di una distribuzione (per attivare le operazioni di sospensione di Auto Scaling) o quando una distribuzione ha esito positivo, fallisce o si interrompe (per attivare le operazioni di ripristino di Auto Scaling).

Per informazioni su come configurare la generazione CodeDeploy di notifiche o CloudWatch eventi Amazon SNS, consulta. eMonitoraggio delle distribuzioni con Amazon Events CloudWatch . Monitoring Deployments with Amazon SNS Event Notifications

Solo ALB supporta il routing graduale del traffico, utilizza invece il routing AllAtOnce del traffico quando crei/aggiorni il gruppo di distribuzione

Problema: durante la creazione o l'aggiornamento di un gruppo di distribuzione viene visualizzato il seguente messaggio di errore in: CodeDeploy

Only ALB supports gradual traffic routing, use AllAtOnce Traffic routing instead when you create/update Deployment group.

Causa possibile: questo errore potrebbe verificarsi se si utilizza un Network Load Balancer e si tenta di utilizzare una configurazione di distribuzione predefinita diversa da. CodeDeployDefault.ECSAllAtOnce

Possibili soluzioni.

Anche se la mia implementazione è riuscita, il set di attività sostitutivo non supera i controlli di integrità di Elastic Load Balancing e la mia applicazione è inattiva

Problema: anche se CodeDeploy indica che la mia distribuzione è riuscita, il set di attività sostitutivo non supera i controlli di integrità di Elastic Load Balancing e la mia applicazione è inattiva.

Possibile causa: questo problema potrebbe verificarsi se hai eseguito una CodeDeploy all-at-once distribuzione e il set di attività sostitutivo (verde) contiene codice errato che causa il fallimento dei controlli di integrità di Elastic Load Balancing. Con la configurazione di all-at-once distribuzione, i controlli di integrità del sistema di bilanciamento del carico iniziano a essere eseguiti sul set di attività sostitutivo dopo che il traffico è stato spostato su di esso (ovvero, dopo che si verifica l'evento CodeDeploy del AllowTraffic ciclo di vita). Ecco perché, dopo lo spostamento del traffico, i controlli dello stato di salute dell'operazione sostitutiva impostata non funzioneranno, ma non prima. Per informazioni sugli eventi del ciclo di vita generati, consulta. CodeDeploy Cosa succede durante una ECS distribuzione Amazon

Possibili soluzioni.

  • Modificate la configurazione di distribuzione da canaria all-at-once a lineare. In una configurazione canaria o lineare, i controlli di integrità del sistema di bilanciamento del carico iniziano a essere eseguiti sul set di attività sostitutivo durante l' CodeDeploy installazione dell'applicazione nell'ambiente sostitutivo e prima che il traffico venga spostato (ovvero durante l'evento del Install ciclo di vita e prima dell'evento). AllowTraffic Consentendo l'esecuzione dei controlli durante l'installazione dell'applicazione ma prima che il traffico venga spostato, verrà rilevato un codice applicativo errato che causerà errori di distribuzione prima che l'applicazione diventi disponibile al pubblico.

    Per informazioni su come configurare le distribuzioni canarie o lineari, vedere. Modifica le impostazioni del gruppo di distribuzione con CodeDeploy

    Per informazioni sugli eventi CodeDeploy del ciclo di vita che si verificano durante una distribuzione Amazon ECS, consulta. Cosa succede durante una ECS distribuzione Amazon

    Nota

    Le configurazioni di distribuzione canarie e lineari sono supportate solo con Application Load Balancers.

  • Se desideri mantenere la configurazione di all-at-once distribuzione, configura un listener di test e controlla lo stato di integrità del set di attività sostitutivo con il lifecycle hook. BeforeAllowTraffic Per ulteriori informazioni, consulta Elenco degli hook relativi agli eventi del ciclo di vita per una distribuzione Amazon ECS.

Posso collegare più sistemi di bilanciamento del carico a un gruppo di distribuzione?

No. Se desideri utilizzare più Application Load Balancer o Network Load Balancer, utilizza gli aggiornamenti periodici di Amazon ECS anziché le distribuzioni blu/verdi. CodeDeploy Per ulteriori informazioni sugli aggiornamenti periodici, consulta Rolling update nella Amazon Elastic Container Service Developer Guide. Per ulteriori informazioni sull'utilizzo di più sistemi di bilanciamento del carico con Amazon ECS, consulta Registrazione di più gruppi target con un servizio nella Amazon Elastic Container Service Developer Guide.

Posso eseguire distribuzioni CodeDeploy blu/verdi senza un sistema di bilanciamento del carico?

No, non è possibile eseguire distribuzioni CodeDeploy blu/verdi senza un sistema di bilanciamento del carico. Se non riesci a utilizzare un sistema di bilanciamento del carico, utilizza invece la funzionalità di aggiornamento progressivo di Amazon ECS. Per ulteriori informazioni sugli aggiornamenti progressivi di Amazon ECS, consulta Rolling update nella Amazon Elastic Container Service Developer Guide.

Come posso aggiornare il mio servizio Amazon ECS con nuove informazioni durante una distribuzione?

Per fare in modo che il servizio Amazon ECS venga CodeDeploy aggiornato con un nuovo parametro mentre esegue una distribuzione, specifica il parametro nella resources sezione del AppSpec file. Sono supportati solo alcuni parametri di Amazon ECS CodeDeploy, come i parametri del file di definizione delle attività e del nome del contenitore. Per un elenco completo dei parametri Amazon ECS che CodeDeploy possono essere aggiornati, consulta AppSpec sezione «risorse» per le ECS implementazioni di Amazon.

Nota

Se devi aggiornare il tuo servizio Amazon ECS con un parametro non supportato da CodeDeploy, completa queste attività:

  1. Chiama l'UpdateServiceAPI di Amazon ECS con il parametro che desideri aggiornare. Per un elenco completo dei parametri che possono essere aggiornati, consulta UpdateServiceAmazon Elastic Container Service API Reference.

  2. Per applicare la modifica alle attività, crea una nuova distribuzione blu/verde di Amazon ECS. Per ulteriori informazioni, consulta Crea un'implementazione di Amazon ECS Compute Platform (console).