Risolvi i problemi relativi ad Amazon Auto EC2 Scaling - 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 relativi ad Amazon Auto EC2 Scaling

Risoluzione dei problemi generali di Amazon EC2 Auto Scaling

Le distribuzioni su EC2 istanze in un gruppo Amazon EC2 Auto Scaling possono fallire per i seguenti motivi:

  • Amazon EC2 Auto Scaling avvia e chiude continuamente le istanze. EC2 Se CodeDeploy non è possibile distribuire automaticamente la revisione dell'applicazione, Amazon Auto EC2 Scaling avvia e chiude continuamente le istanze. EC2

    Dissocia il gruppo Amazon EC2 Auto Scaling dal gruppo di distribuzione o modifica CodeDeploy la configurazione del gruppo Amazon Auto EC2 Scaling in modo che il numero di istanze desiderato corrisponda al numero attuale di istanze (impedendo così ad Amazon Auto EC2 Scaling di avviare altre istanze). EC2 Per ulteriori informazioni, consulta la nostra Modifica le impostazioni del gruppo di distribuzione con CodeDeploy pagina Manual Scaling for Amazon EC2 Auto Scaling.

  • L' CodeDeploy agente non risponde. L' CodeDeploy agente potrebbe non essere installato se gli script di inizializzazione (ad esempio, gli script cloud-init) eseguiti immediatamente dopo l'avvio o l'avvio di un'EC2istanza impiegano più di un'ora per essere eseguiti. CodeDeploy dispone di un timeout di un'ora per consentire all'agente di rispondere alle distribuzioni in sospeso. CodeDeploy Per risolvere questo problema, spostate gli script di inizializzazione nella revisione dell'applicazione. CodeDeploy

  • Un'EC2istanza in un gruppo Amazon EC2 Auto Scaling si riavvia durante una distribuzione. La distribuzione può fallire se un'EC2istanza viene riavviata durante una distribuzione o se l' CodeDeploy agente viene spento durante l'elaborazione di un comando di distribuzione. Per ulteriori informazioni, consulta L'interruzione o il riavvio di un'istanza Amazon EC2 Auto Scaling potrebbe causare il fallimento delle distribuzioni.

  • Più revisioni delle applicazioni vengono distribuite contemporaneamente sulla stessa EC2 istanza in un gruppo Amazon Auto EC2 Scaling. La distribuzione contemporanea di più revisioni di applicazioni sulla stessa EC2 istanza in un gruppo Amazon EC2 Auto Scaling può fallire se una delle distribuzioni ha script che vengono eseguiti per più di qualche minuto. Non distribuire più revisioni di applicazioni sulle stesse EC2 istanze in un gruppo Amazon Auto Scaling. EC2

  • Una distribuzione non riesce per le nuove EC2 istanze lanciate come parte di un gruppo Amazon EC2 Auto Scaling. In questo scenario, l'esecuzione degli script in una distribuzione può impedire l'avvio di EC2 istanze nel gruppo Amazon Auto ScalingEC2. (È possibile che altre EC2 istanze del gruppo Amazon EC2 Auto Scaling funzionino normalmente). Per risolvere questo problema, assicurati che tutti gli altri script vengano completati per primi:

    • CodeDeploy agent non è incluso nel tuo AMI: se usi il cfn-init comando per installare l' CodeDeploy agente mentre avvii una nuova istanza, posiziona lo script di installazione dell'agente alla fine della cfn-init sezione del tuo modello. AWS CloudFormation

    • CodeDeploy agent è incluso nel file AMI: configuralo in AMI modo che l'agente si trovi in uno Stopped stato al momento della creazione dell'istanza, quindi includi uno script per l'avvio dell'agente come passaggio finale nella tua libreria di cfn-init script.

"CodeDeployRole non consente di eseguire operazioni nel seguente AWS servizio: AmazonAutoScaling" errore

Le distribuzioni che utilizzano un gruppo Auto Scaling creato con un modello di avvio richiedono le seguenti autorizzazioni. Queste si aggiungono alle autorizzazioni concesse dalla politica gestita. AWSCodeDeployRole AWS

  • EC2:RunInstances

  • EC2:CreateTags

  • iam:PassRole

Potresti ricevere questo errore se non disponi di queste autorizzazioni. Per ulteriori informazioniTutorial: CodeDeploy Da utilizzare per distribuire un'applicazione in un gruppo di Auto Scaling, consulta Creazione di un modello di lancio per un gruppo di Auto Scaling e Autorizzazioni nella Amazon EC2Auto Scaling User Guide.

Le istanze in un gruppo Amazon EC2 Auto Scaling vengono continuamente fornite e terminate prima di poter implementare una revisione.

In alcuni casi, un errore può impedire una corretta distribuzione su nuove istanze di cui è stato effettuato il provisioning in un gruppo Amazon Auto EC2 Scaling. Ciò compromette la riuscita delle distribuzioni e l'integrità delle istanze. Poiché non è possibile eseguire o completare la distribuzione, le istanze vengono terminate subito dopo essere state create. La configurazione del gruppo Amazon EC2 Auto Scaling determina quindi il provisioning di un altro batch di istanze per cercare di soddisfare il requisito minimo di host integri. Anche questo batch viene terminato e il ciclo continua.

Tra le cause possibili sono incluse:

  • Controlli di integrità del gruppo Amazon EC2 Auto Scaling non riusciti.

  • Un errore nella revisione dell'applicazione.

Per risolvere il problema, esegui queste fasi:

  1. Crea manualmente un'EC2istanza che non fa parte del gruppo Amazon EC2 Auto Scaling. Etichetta l'istanza con un tag di EC2 istanza univoco.

  2. Aggiungi la nuova istanza al gruppo di distribuzione interessato.

  3. Distribuisci una nuova revisione dell'applicazione senza errori nel gruppo di distribuzione.

Ciò richiede al gruppo Amazon Auto EC2 Scaling di distribuire la revisione dell'applicazione su istanze future nel gruppo Amazon Auto Scaling. EC2

Nota

Dopo aver confermato che le distribuzioni hanno avuto esito positivo, elimina l'istanza che hai creato per evitare addebiti continui sul tuo account. AWS

L'interruzione o il riavvio di un'istanza Amazon EC2 Auto Scaling potrebbe causare il fallimento delle distribuzioni

Se un'EC2istanza viene avviata tramite Amazon EC2 Auto Scaling e l'istanza viene quindi terminata o riavviata, le distribuzioni su quell'istanza potrebbero non riuscire per i seguenti motivi:

  • Durante una distribuzione in corso, un evento di scalabilità in entrata o qualsiasi altro evento di terminazione causa il distacco dell'istanza dal gruppo Amazon Auto EC2 Scaling e quindi la chiusura. Poiché la distribuzione non può essere completata, ha esito negativo.

  • L'istanza viene riavviata, ma l'avvio dell'istanza richiede più di cinque minuti. CodeDeploy considera questo come un timeout. Il servizio non è quindi in grado di completare nessuna distribuzione, corrente o futura, nell'istanza.

Per risolvere il problema:

  • In generale, accertati che tutte le distribuzioni siano state completate prima che l'istanza venga terminata o riavviata. Assicurati che tutte le distribuzioni vengano avviate dopo l'avvio o il riavvio dell'istanza.

  • Le distribuzioni possono avere esito negativo se si specifica un Amazon Machine Image (AMI) basato su Windows Server per una configurazione Amazon EC2 Auto Scaling e si utilizza EC2Config il servizio per impostare il nome del computer dell'istanza. Per risolvere questo problema, nella base di Windows ServerAMI, nella scheda Generale delle Proprietà del EC2 servizio, deseleziona Set Computer Name. Dopo aver deselezionato questa casella di controllo, questo comportamento viene disabilitato per tutte le nuove istanze di Windows Server Amazon EC2 Auto Scaling avviate con quella base Windows Server. AMI Per le istanze Windows Server Amazon EC2 Auto Scaling su cui questo comportamento è abilitato, non è necessario deselezionare questa casella di controllo. È sufficiente ridistribuire nelle istanze le distribuzioni non riuscite dopo averle riavviate.

Evita di associare più gruppi di distribuzione a un singolo gruppo Amazon EC2 Auto Scaling

Come best practice, dovresti associare un solo gruppo di distribuzione a ciascun gruppo Amazon EC2 Auto Scaling.

Questo perché se Amazon EC2 Auto Scaling ridimensiona un'istanza con hook associati a più gruppi di distribuzione, invia notifiche per tutti gli hook contemporaneamente. In questo modo per ogni istanza vengono avviate più distribuzioni nello stesso momento. Quando più distribuzioni inviano comandi all' CodeDeploy agente contemporaneamente, è possibile che venga raggiunto il timeout di cinque minuti tra un evento del ciclo di vita e l'inizio della distribuzione o la fine dell'evento del ciclo di vita precedente. In questo caso, la distribuzione ha esito negativo, anche se un processo di distribuzione è in esecuzione come previsto.

Nota

Il timeout predefinito per uno script in un evento del ciclo di vita è di 30 minuti. È possibile modificare il timeout impostando un valore diverso nel file. AppSpec Per ulteriori informazioni, consulta Aggiungi un AppSpec file per una distribuzione EC2/on-premise.

Non è possibile controllare l'ordine con il quale le distribuzioni si verificano, se si prova a eseguire più distribuzioni contemporaneamente.

Infine, se la distribuzione su un'istanza non riesce, Amazon EC2 Auto Scaling interrompe immediatamente l'istanza. Quando la prima istanza si arresta, le altre distribuzioni in esecuzione iniziano a restituire errori. Poiché l' CodeDeploy agente CodeDeploy ha un timeout di un'ora per rispondere alle distribuzioni in sospeso, il timeout di ogni istanza può richiedere fino a 60 minuti.

Per ulteriori informazioni su Amazon EC2 Auto Scaling, consulta Under the hood: CodeDeploy and Auto Scaling integration.

EC2le istanze in un gruppo Amazon EC2 Auto Scaling non vengono avviate e ricevono l'errore «Heartbeat Timeout»

Un gruppo Amazon EC2 Auto Scaling potrebbe non riuscire a lanciare nuove EC2 istanze, generando un messaggio simile al seguente:

Launching a new EC2 instance <instance-Id>. Status Reason: Instance failed to complete user's Lifecycle Action: Lifecycle Action with token<token-Id> was abandoned: Heartbeat Timeout.

Il messaggio generalmente indica di procedere in uno dei seguenti modi:

  • È stato raggiunto il numero massimo di distribuzioni simultanee associate a un account. AWS Per ulteriori informazioni sui limiti di distribuzione, consulta CodeDeploy quote.

  • Il gruppo Auto Scaling ha cercato di avviare troppe EC2 istanze troppo velocemente. Le API chiamate verso RecordLifecycleActionHeartbeato CompleteLifecycleActionper ogni nuova istanza sono state limitate.

  • Un'applicazione in CodeDeploy è stata eliminata prima dell'aggiornamento o dell'eliminazione dei gruppi di distribuzione associati.

    Quando elimini un'applicazione o un gruppo di distribuzione, CodeDeploy tenta di ripulire tutti gli hook Amazon EC2 Auto Scaling ad essa associati, ma alcuni hook potrebbero rimanere. Se esegui un comando per eliminare un gruppo di distribuzione, gli hook rimanenti vengono restituiti nell'output. Tuttavia, se esegui un comando per eliminare un'applicazione, gli hook rimanenti non vengono visualizzati nell'output.

    Pertanto, come best practice, è opportuno eliminare tutti i gruppi di distribuzione associati a un'applicazione prima di eliminare l'applicazione. È possibile utilizzare l'output del comando per identificare gli hook del ciclo di vita che devono essere eliminati manualmente.

Se ricevi il messaggio di errore "Heartbeat Timeout", puoi determinare se il problema dipende da hook del ciclo di vita non eliminati e risolverlo eseguendo le operazioni seguenti:

  1. Esegui una di queste operazioni:

    • Chiamate il delete-deployment-groupcomando per eliminare il gruppo di distribuzione associato al gruppo Auto Scaling che causa il timeout dell'heartbeat.

    • Chiamate il update-deployment-groupcomando con un elenco vuoto non nullo di nomi di gruppi Auto Scaling per scollegare tutti gli hook del ciclo di vita di CodeDeploy Auto Scaling gestiti.

      Ad AWS CLI esempio, inserisci il seguente comando:

      aws deploy update-deployment-group --application-name my-example-app --current-deployment-group-name my-deployment-group --auto-scaling-groups

      Come altro esempio, se utilizzate il CodeDeploy API con Java, chiamate UpdateDeploymentGroup e impostate autoScalingGroups sunew ArrayList<String>(). Questo imposta autoScalingGroups su un elenco vuoto e rimuove l'elenco esistente. Non usarenull, che è l'impostazione predefinita, perché rimane così com'autoScalingGroupsè, il che non è quello che vuoi.

    Esaminare l'output della chiamata. Se l'output contiene una hooksNotCleanedUp struttura con un elenco di hook del ciclo di vita di Amazon EC2 Auto Scaling, ci sono degli hook del ciclo di vita rimanenti.

  2. Chiama il describe-lifecycle-hookscomando, specificando il nome del gruppo Amazon EC2 Auto Scaling associato EC2 alle istanze che non sono state avviate. Nell'output, cerca uno dei seguenti elementi:

    • Nomi degli hook del ciclo di vita di Amazon EC2 Auto Scaling che corrispondono alla hooksNotCleanedUp struttura identificata nel passaggio 1.

    • Nomi degli hook del ciclo di vita di Amazon EC2 Auto Scaling che contengono il nome del gruppo di distribuzione associato al gruppo Auto Scaling che non funziona.

    • Nomi degli hook del ciclo di vita di Amazon EC2 Auto Scaling che potrebbero aver causato il timeout dell'heartbeat per la distribuzione. CodeDeploy

  3. Se un hook rientra in una delle categorie elencate nel passaggio 2, chiama il delete-lifecycle-hookcomando per eliminarlo. Specificare il gruppo Amazon EC2 Auto Scaling e l'hook del ciclo di vita nella chiamata.

    Importante

    Elimina solo gli hook che causano problemi, come indicato nel passaggio 2. Se si eliminano gli hook validi, le distribuzioni potrebbero non riuscire o non essere in grado di distribuire le CodeDeploy revisioni delle applicazioni su istanze con scalabilità orizzontale. EC2

  4. Chiama il create-deployment-groupcomando update-deployment-groupo con i nomi dei gruppi Auto Scaling desiderati. CodeDeployreinstalla gli hook Auto Scaling con nuovi. UUIDs

Nota

Se si scollega un gruppo Auto Scaling da CodeDeploy un gruppo di distribuzione, tutte le distribuzioni in corso nel gruppo Auto Scaling potrebbero non riuscire EC2 e le nuove istanze scalate orizzontalmente dal gruppo Auto Scaling non riceveranno le revisioni dell'applicazione da. CodeDeploy Per far funzionare nuovamente Auto Scaling CodeDeploy, dovrai ricollegare il gruppo Auto Scaling al gruppo di distribuzione e chiamarne uno nuovo per iniziare un'implementazione CreateDeployment a livello di flotta.

I collegamenti non corrispondenti al ciclo di vita EC2 di Amazon Auto Scaling potrebbero causare l'interruzione o il fallimento delle distribuzioni automatiche nei gruppi di Amazon EC2 Auto Scaling

Amazon EC2 Auto Scaling e CodeDeploy utilizzano gli hook del ciclo di vita per determinare quali revisioni delle applicazioni devono essere distribuite su quali EC2 istanze dopo il loro avvio nei gruppi di Amazon Auto Scaling. EC2 Le distribuzioni automatiche possono interrompersi o fallire se gli hook del ciclo di vita e le informazioni su questi hook non corrispondono esattamente in Amazon Auto Scaling e. EC2 CodeDeploy

Se le distribuzioni in un gruppo Amazon Auto EC2 Scaling falliscono, verifica se i nomi degli hook del ciclo di vita in Amazon EC2 Auto Scaling corrispondono. CodeDeploy In caso contrario, usa queste chiamate di comando. AWS CLI

Innanzitutto, ottieni l'elenco dei nomi degli hook del ciclo di vita sia per il gruppo Amazon Auto EC2 Scaling che per il gruppo di distribuzione:

  1. Chiama il describe-lifecycle-hookscomando, specificando il nome del gruppo Amazon EC2 Auto Scaling associato al gruppo di distribuzione in. CodeDeploy Nell'output, nell'elenco LifecycleHooks, annotare ogni valore LifecycleHookName.

  2. Chiama il get-deployment-groupcomando, specificando il nome del gruppo di distribuzione associato al gruppo Amazon EC2 Auto Scaling. Nell'output, nell'autoScalingGroupselenco, trova ogni elemento il cui valore del nome corrisponde al nome del gruppo Amazon EC2 Auto Scaling, quindi prendi nota del valore corrispondentehook.

Ora confrontare i due set di nomi di hook del ciclo di vita. Se corrispondono esattamente, carattere per carattere, allora non è il problema. Potresti provare altri passaggi per la risoluzione dei problemi di Amazon EC2 Auto Scaling descritti altrove in questa sezione.

Tuttavia, se i due set di nomi di hook del ciclo di vita non corrispondono esattamente, carattere per carattere, procedere nel seguente modo:

  1. Se ci sono nomi di hook del ciclo di vita nell'output del comando describe-lifecycle-hooks che non sono anche nell'output del comando get-deployment-group, allora procedere nel seguente modo:

    1. Per ogni nome del lifecycle hook nell'output del describe-lifecycle-hooks comando, chiama il comando. delete-lifecycle-hook

    2. Chiama il update-deployment-groupcomando, specificando il nome del gruppo Amazon EC2 Auto Scaling originale. CodeDeploy crea nuovi hook del ciclo di vita sostitutivi nel gruppo Amazon EC2 Auto Scaling e associa i lifecycle hook al gruppo di distribuzione. Le distribuzioni automatiche dovrebbero ora riprendere non appena vengono aggiunte nuove istanze al gruppo Amazon Auto EC2 Scaling.

  2. Se ci sono nomi di hook del ciclo di vita nell'output del comando get-deployment-group che non sono anche nell'output del comando describe-lifecycle-hooks, procedere nel seguente modo:

    1. Chiama il update-deployment-groupcomando, ma non specifica il nome del gruppo Amazon EC2 Auto Scaling originale.

    2. Richiama il update-deployment-group comando, ma questa volta specifica il nome del gruppo Amazon EC2 Auto Scaling originale. CodeDeploy ricrea gli hook del ciclo di vita mancanti nel gruppo Amazon Auto EC2 Scaling. Le distribuzioni automatiche dovrebbero ora riprendere non appena vengono aggiunte nuove istanze al gruppo Amazon Auto EC2 Scaling.

Una volta che i due set di nomi degli hook del ciclo di vita corrispondono esattamente, carattere per carattere, le revisioni delle applicazioni devono essere nuovamente distribuite, ma solo su nuove istanze man mano che vengono aggiunte al gruppo Amazon Auto Scaling. EC2 Le distribuzioni non avvengono automaticamente su istanze che fanno già parte del gruppo Amazon Auto Scaling. EC2

Errore «La distribuzione non è riuscita perché non sono state trovate istanze per il tuo gruppo di distribuzione»

Leggi questa sezione se vedi il seguente CodeDeploy errore:

The deployment failed because no instances were found for your deployment group. Check your deployment group settings to make sure the tags for your EC2 instances or Auto Scaling groups correctly identify the instances you want to deploy to, and then try again.

Le possibili cause di questo errore sono:

  1. Le impostazioni del gruppo di distribuzione includono tag per EC2 istanze, istanze locali o gruppi di Auto Scaling che non sono corretti. Per risolvere questo problema, verifica che i tag siano corretti, quindi ridistribuisci l'applicazione.

  2. La tua flotta si è ridimensionata dopo l'inizio dell'implementazione. In questo scenario, vengono visualizzate istanze integre nello InService stato del parco macchine, ma viene visualizzato anche l'errore riportato sopra. Per risolvere questo problema, ridistribuisci l'applicazione.

  3. Il gruppo Auto Scaling non include alcuna istanza presente nello stato. InService In questo scenario, quando si tenta di eseguire una distribuzione su tutto il parco macchine, la distribuzione non riesce a causa del messaggio di errore riportato sopra perché è CodeDeploy necessaria almeno un'istanza nello stato. InService Esistono molte ragioni per cui potresti non avere istanze nello stato. InService Alcuni di essi includono:

    • Hai pianificato (o configurato manualmente) la dimensione del gruppo Auto Scaling in modo che sia. 0

    • Auto Scaling ha rilevato EC2 istanze danneggiate (ad esempio, le EC2 istanze presentavano guasti hardware), quindi le ha annullate tutte, lasciandone nessuna nello stato. InService

    • Durante un evento di scalabilità orizzontale da 0 a1, CodeDeploy ha distribuito una revisione precedentemente corretta (denominata ultima revisione riuscita) che non era più corretta dopo l'ultima distribuzione. Ciò ha causato il fallimento della distribuzione sull'istanza con scalabilità orizzontale, che a sua volta ha causato l'annullamento dell'istanza da parte di Auto Scaling, senza lasciare alcuna istanza nello stato. InService

      Se scopri che non ci sono istanze nello InService stato, risolvi il problema come descritto nella procedura seguente,. To troubleshoot the error if there are no instances in the InService state

Per risolvere l'errore se non ci sono istanze nello stato InService
  1. Nella EC2 console Amazon, verifica l'impostazione della capacità desiderata. Se è zero, impostalo su un numero positivo. Attendi che l'istanza sia attivaInService, il che significa che la distribuzione è riuscita. Il problema è stato risolto e puoi saltare i passaggi rimanenti di questa procedura di risoluzione dei problemi. Per informazioni sull'impostazione della capacità desiderata, consulta Impostazione dei limiti di capacità sul tuo gruppo Auto Scaling nella Amazon Auto EC2 Scaling User Guide.

  2. Se Auto Scaling continua a tentare di avviare nuove EC2 istanze per soddisfare la capacità desiderata ma non riesce a soddisfare lo scalabilità orizzontale, di solito ciò è dovuto a un guasto del ciclo di vita di Auto Scaling. Risolvete questo problema nel modo seguente:

    1. Per verificare quale evento del ciclo di vita di Auto Scaling non va a buon fine, consulta Verifica di un'attività di scaling per un gruppo Auto Scaling nella Amazon Auto Scaling User Guide. EC2

    2. Se il nome dell'hook fallito èCodeDeploy-managed-automatic-launch-deployment-hook-DEPLOYMENT_GROUP_NAME, vai a CodeDeploy, trova il gruppo di distribuzione e trova la distribuzione fallita avviata da Auto Scaling. Quindi esamina il motivo per cui la distribuzione non è riuscita.

    3. Se capisci perché la distribuzione non è riuscita (ad esempio, si sono verificati degli CloudWatch allarmi) e puoi risolvere il problema senza modificare la revisione, fallo ora.

    4. Se, dopo un'indagine, stabilisci che CodeDeploy l'ultima revisione corretta non è più valida e non ci sono istanze integre nel tuo gruppo Auto Scaling, ti trovi in uno scenario di stallo di implementazione. Per risolvere questo problema, è necessario correggere la CodeDeploy revisione errata rimuovendo temporaneamente il lifecycle hook CodeDeploy del ciclo di vita dal gruppo Auto Scaling, quindi reinstallando l'hook e ridistribuendo una nuova (valida) revisione. Per istruzioni, consulta:

Per risolvere il problema del deadlock di distribuzione () CLI
  1. (Facoltativo) Bloccate le pipeline CI/CD che causano l' CodeDeploy errore in modo che non si verifichino distribuzioni impreviste durante la risoluzione del problema.

  2. Prendi nota della tua attuale impostazione Auto Scaling DesiredCapacity:

    aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name ASG_NAME

    Potrebbe essere necessario tornare a questo numero al termine di questa procedura.

  3. Imposta l'DesiredCapacityimpostazione Auto Scaling su. 1 Questa opzione è facoltativa se la capacità desiderata era superiore 1 a quella iniziale. Riducendolo a1, l'istanza impiegherà meno tempo per il provisioning e la distribuzione in un secondo momento, il che velocizza la risoluzione dei problemi. Se la capacità desiderata di Auto Scaling era originariamente impostata su0, è necessario aumentarla a. 1 Questo è obbligatorio.

    come scalabilità automatica - set-desired-capacity auto-scaling-group-name ASG_NAME --capacità-desiderata 1

    Nota

    I passaggi rimanenti di questa procedura presuppongono che tu abbia impostato il tuo. DesiredCapacity1

    A questo punto, Auto Scaling tenta di scalare fino a un'istanza. Quindi, poiché l'hook CodeDeploy aggiunto è ancora presente, CodeDeploy tenta di eseguire la distribuzione; la distribuzione fallisce; Auto Scaling annulla l'istanza e Auto Scaling tenta di riavviare un'istanza per raggiungere la capacità desiderata di una, operazione che ancora una volta fallisce. Sei in un ciclo di annullamento/riavvio.

  4. Annulla la registrazione del gruppo Auto Scaling dal gruppo di distribuzione:

    avvertimento

    Il comando seguente avvierà una nuova EC2 istanza senza software. Prima di eseguire il comando, assicuratevi che un'InServiceistanza di Auto Scaling che non esegue alcun software sia accettabile. Ad esempio, assicuratevi che il sistema di bilanciamento del carico associato all'istanza non invii traffico a questo host senza software.

    Importante

    Utilizzate il CodeDeploy comando mostrato di seguito per rimuovere l'hook. Non rimuovere l'hook tramite il servizio Auto Scaling, poiché la rimozione non verrà riconosciuta da. CodeDeploy

    aws deploy update-deployment-group --application-name APPLICATION_NAME --current-deployment-group-name DEPLOYMENT_GROUP_NAME --auto-scaling-groups

    Dopo aver eseguito questo comando, si verifica quanto segue:

    1. CodeDeploy annulla la registrazione del gruppo Auto Scaling dal gruppo di distribuzione.

    2. CodeDeploy rimuove l'hook del ciclo di vita Auto Scaling dal gruppo Auto Scaling.

    3. Poiché l'hook che stava causando una distribuzione non riuscita non è più presente, Auto Scaling annulla l'EC2istanza esistente e ne avvia immediatamente una nuova per scalare fino alla capacità desiderata. La nuova istanza dovrebbe passare presto allo stato attuale. InService La nuova istanza non include software.

  5. Attendi che l'EC2istanza entri nello InService stato. Per verificarne lo stato, utilizzate il seguente comando:

    aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names ASG_NAME --query AutoScalingGroups[0].Instances[*].LifecycleState

  6. Aggiungi nuovamente l'hook all'EC2istanza:

    Importante

    Utilizzate il CodeDeploy comando mostrato di seguito per aggiungere l'hook. Non utilizzare il servizio Auto Scaling per aggiungere l'hook, poiché l'aggiunta non verrà riconosciuta da. CodeDeploy

    aws deploy update-deployment-group --application-name APPLICATION_NAME --current-deployment-group-name DEPLOYMENT_GROUP_NAME --auto-scaling-groups ASG_NAME

    Dopo aver eseguito questo comando, si verifica quanto segue:

    1. CodeDeploy reinstalla l'hook del ciclo di vita Auto Scaling sull'istanza EC2

    2. CodeDeploy registra nuovamente il gruppo Auto Scaling con il gruppo di distribuzione.

  7. Crea una distribuzione a livello di flotta con Amazon S3 GitHub o una versione che sai essere integra e che desideri utilizzare.

    Ad esempio, se la revisione è un file.zip in un bucket Amazon S3 my-revision-bucket chiamato con una chiave oggetto httpd_app.zip di, inserisci il seguente comando:

    aws deploy create-deployment --application-name APPLICATION_NAME --deployment-group-name DEPLOYMENT_GROUP_NAME --revision "revisionType=S3,s3Location={bucket=my-revision-bucket,bundleType=zip,key=httpd_app.zip}"

    Poiché ora è presente un'InServiceistanza nel gruppo Auto Scaling, questa distribuzione dovrebbe funzionare e non dovresti più visualizzare l'errore La distribuzione non è riuscita perché non sono state trovate istanze per il tuo gruppo di distribuzione.

  8. Una volta completata l'implementazione, ridimensionate il gruppo Auto Scaling riportandolo alla capacità originale, se in precedenza lo avevate ridimensionato in:

    aws autoscaling set-desired-capacity --auto-scaling-group-name ASG_NAME --desired-capacity ORIGINAL_CAPACITY

Per risolvere il problema del deadlock di distribuzione (console)
  1. (Facoltativo) Blocca le pipeline CI/CD che causano l' CodeDeploy errore in modo che non si verifichino distribuzioni impreviste durante la risoluzione del problema.

  2. Vai alla EC2 console Amazon e prendi nota dell'impostazione della capacità desiderata di Auto Scaling. Potrebbe essere necessario tornare a questo numero al termine di questa procedura. Per informazioni su come trovare questa impostazione, consulta Impostazione dei limiti di capacità nel gruppo Auto Scaling.

  3. Imposta il numero di EC2 istanze desiderato su: 1

    Questo è facoltativo se la capacità desiderata era maggiore di 1 quella iniziale. Riducendolo a1, l'istanza impiegherà meno tempo per il provisioning e la distribuzione in un secondo momento, il che velocizza la risoluzione dei problemi. Se la capacità di Auto Scaling Desired era originariamente impostata su0, è necessario aumentarla a. 1 Questo è obbligatorio.

    Nota

    I passaggi rimanenti di questa procedura presuppongono che la capacità desiderata sia stata impostata su1.

    1. Apri la EC2 console Amazon all'indirizzo https://console.aws.amazon.com/ec2/e scegli Auto Scaling Groups dal pannello di navigazione.

    2. Scegli la regione appropriata.

    3. Vai al gruppo Auto Scaling problematico.

    4. In Dettagli del gruppo, scegli Modifica.

    5. Imposta la capacità desiderata su1.

    6. Scegli Aggiorna.

  4. Annulla la registrazione del gruppo Auto Scaling dal gruppo di distribuzione:

    avvertimento

    I seguenti passaggi secondari avvieranno una nuova EC2 istanza senza software. Prima di eseguire il comando, assicuratevi che un'InServiceistanza di Auto Scaling che non esegue alcun software sia accettabile. Ad esempio, assicuratevi che il sistema di bilanciamento del carico associato all'istanza non invii traffico a questo host senza software.

    1. Apri la CodeDeploy console all'indirizzo https://console.aws.amazon.com/codedeploy/.

    2. Scegli la regione appropriata.

    3. Nel riquadro di navigazione, scegliere Applications (Applicazioni).

    4. Scegli il nome della tua CodeDeploy applicazione.

    5. Scegli il nome del tuo gruppo CodeDeploy di distribuzione.

    6. Scegli Modifica.

    7. Nella configurazione dell'ambiente, deseleziona i gruppi Amazon EC2 Auto Scaling.

      Nota

      La console non consente di salvare la configurazione se non è stata definita alcuna configurazione di ambiente. Per aggirare il controllo, aggiungi temporaneamente un tag di EC2 o On-premises che sai non verrà risolto per nessun host. Per aggiungere un tag, seleziona Amazon EC2 instances o On-premises e aggiungi un tag Key di EC2 o. On-premises Puoi lasciare il tag Value vuoto.

    8. Scegli Save changes (Salva modifiche).

      Dopo aver completato questi passaggi secondari, si verifica quanto segue:

      1. CodeDeploy annulla la registrazione del gruppo Auto Scaling dal gruppo di distribuzione.

      2. CodeDeploy rimuove l'hook del ciclo di vita Auto Scaling dal gruppo Auto Scaling.

      3. Poiché l'hook che stava causando una distribuzione non riuscita non è più presente, Auto Scaling annulla l'EC2istanza esistente e ne avvia immediatamente una nuova per scalare fino alla capacità desiderata. La nuova istanza dovrebbe passare presto allo stato attuale. InService La nuova istanza non include software.

  5. Attendi che l'EC2istanza entri nello InService stato. Per verificarne lo stato:

    1. Apri la EC2 console Amazon all'indirizzo https://console.aws.amazon.com/ec2/.

    2. Nel riquadro di navigazione, selezionare Groups (Gruppi Auto Scaling).

    3. Scegli il tuo gruppo Auto Scaling.

    4. Nel riquadro dei contenuti, scegli la scheda Gestione delle istanze.

    5. In Istanze, assicurati che la colonna Lifecycle indichi InServiceaccanto all'istanza.

  6. Registra nuovamente il gruppo Auto Scaling con CodeDeploy il gruppo di distribuzione utilizzando lo stesso metodo utilizzato per rimuoverlo:

    1. Apri la CodeDeploy console all'indirizzo. https://console.aws.amazon.com/codedeploy/

    2. Scegli la regione appropriata.

    3. Nel riquadro di navigazione, scegliere Applications (Applicazioni).

    4. Scegli il nome della tua CodeDeploy applicazione.

    5. Scegli il nome del tuo gruppo CodeDeploy di distribuzione.

    6. Scegli Modifica.

    7. Nella configurazione dell'ambiente, seleziona i gruppi Amazon EC2 Auto Scaling e seleziona il tuo gruppo Auto Scaling dall'elenco.

    8. In EC2Istanze Amazon o Istanze locali, trova il tag che hai aggiunto e rimuovilo.

    9. Deseleziona la casella di controllo accanto a Istanze Amazon o EC2 Istanze locali.

    10. Scegli Save changes (Salva modifiche).

    Questa configurazione reinstalla il lifecycle hook nel gruppo Auto Scaling.

  7. Crea una distribuzione a livello di flotta con Amazon S3 GitHub o una versione che sai essere integra e che desideri utilizzare.

    Ad esempio, se la revisione è un file.zip in un bucket Amazon S3 my-revision-bucket chiamato con una chiave oggetto di, httpd_app.zip procedi come segue:

    1. Nella CodeDeploy console, nella pagina Deployment Group, scegli Crea distribuzione.

    2. Per Revision type (Tipo di revisione), scegliere My application is stored in Amazon S3 (La mia applicazione è archiviata in Amazon S3).

    3. Per Posizione di revisione, sceglis3://my-revision-bucket/httpd_app.zip.

    4. Per il tipo di file di revisione, scegli. .zip

    5. Scegli Create deployment (Crea distribuzione).

    Poiché ora è presente un'InServiceistanza nel gruppo Auto Scaling, questa distribuzione dovrebbe funzionare e non dovresti più visualizzare l'errore La distribuzione non è riuscita perché non sono state trovate istanze per il tuo gruppo di distribuzione.

  8. Una volta completata l'implementazione, ridimensionate il gruppo Auto Scaling riportandolo alla capacità originale, se in precedenza lo avevate ridimensionato in:

    1. Apri la EC2 console Amazon all'indirizzo https://console.aws.amazon.com/ec2/e scegli Auto Scaling Groups dal pannello di navigazione.

    2. Scegli la regione appropriata.

    3. Vai al tuo gruppo Auto Scaling.

    4. In Dettagli del gruppo, scegli Modifica.

    5. Riporta la capacità desiderata al valore originale.

    6. Scegli Aggiorna.