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

Risoluzione dei problemi generali di Amazon EC2 Auto Scaling

Le distribuzioni su istanze EC2 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 EC2 Auto Scaling avvia e termina continuamente le istanze EC2.

    Dissocia il gruppo Amazon EC2 Auto Scaling dal gruppo di distribuzione o modifica CodeDeploy la configurazione del gruppo Amazon EC2 Auto Scaling in modo che il numero desiderato di istanze corrisponda al numero attuale di istanze (impedendo così ad Amazon EC2 Auto Scaling di lanciare altre istanze EC2). Per ulteriori informazioni, consulta Modifica le impostazioni del gruppo di distribuzione con CodeDeploy la sezione 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'istanza EC2 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'istanza EC2 in un gruppo Amazon EC2 Auto Scaling si riavvia durante una distribuzione. L'implementazione può fallire se un'istanza EC2 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 di Amazon EC2 Auto Scaling potrebbe causare il fallimento delle distribuzioni.

  • Più revisioni delle applicazioni vengono distribuite contemporaneamente sulla stessa istanza EC2 in un gruppo Amazon EC2 Auto Scaling. La distribuzione contemporanea di più revisioni di applicazioni sulla stessa istanza EC2 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 istanze EC2 in un gruppo Amazon EC2 Auto Scaling.

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

    • CodeDeploy l'agente non è incluso nell'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 AWS CloudFormation modello.

    • CodeDeploy l'agente è incluso nell'AMI: configura l'AMI in 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" error

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 Guida per l'utente di Amazon EC2 Auto Scaling.

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 implementazione su nuove istanze di cui è stato effettuato il provisioning in un gruppo Amazon EC2 Auto 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'istanza EC2 che non fa parte del gruppo Amazon EC2 Auto Scaling. Contrassegna l'istanza con un tag di istanza EC2 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 EC2 Auto Scaling di distribuire la revisione dell'applicazione su istanze future nel gruppo Amazon EC2 Auto Scaling.

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 di Amazon EC2 Auto Scaling potrebbe causare il fallimento delle distribuzioni

Se un'istanza EC2 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 EC2 Auto Scaling e quindi la sua chiusura. Poiché la distribuzione non può essere completata, ha esito negativo.

  • L'istanza viene riavviata, ma l'avvio 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) basata su Windows Server per una configurazione Amazon EC2 Auto Scaling e si utilizza il servizio EC2Config per impostare il nome del computer dell'istanza. Per risolvere questo problema, nell'AMI di base di Windows Server, nella scheda Generale delle proprietà del servizio EC2, deseleziona Imposta nome computer. 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 quell'AMI di base di Windows Server. 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 fallisce, 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: and CodeDeploy Auto Scaling integration.

Le istanze EC2 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 istanze EC2, 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 implementazioni 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 istanze EC2 troppo velocemente. Le chiamate API 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 di Amazon EC2 Auto Scaling ad esso 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 utilizzi l' CodeDeploy API con Java, chiama UpdateDeploymentGroup e imposta 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 alle istanze EC2 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 struttura identificata hooksNotCleanedUp nella fase 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 comando per eliminarlo. delete-lifecycle-hook 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 elimini gli hook validi, le distribuzioni potrebbero fallire o CodeDeploy potrebbe non essere possibile distribuire le revisioni delle applicazioni su istanze EC2 con scalabilità orizzontale.

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

Nota

Se scolleghi un gruppo Auto Scaling da CodeDeploy un gruppo di distribuzione, tutte le distribuzioni in corso nel gruppo Auto Scaling potrebbero fallire e le nuove istanze EC2 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 di Amazon EC2 Auto Scaling potrebbero causare l'interruzione o il fallimento delle distribuzioni automatiche nei gruppi di Amazon EC2 Auto Scaling

Amazon EC2 Auto Scaling CodeDeploy utilizza gli hook del ciclo di vita per determinare quali revisioni delle applicazioni devono essere distribuite su quali istanze EC2 dopo il lancio nei gruppi di Amazon EC2 Auto Scaling. 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 EC2 Auto Scaling e. CodeDeploy

Se le distribuzioni in un gruppo Amazon EC2 Auto 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 EC2 Auto 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 corrispondente. hook

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 comando, chiama il describe-lifecycle-hooks 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 gli hook del ciclo di vita al gruppo di distribuzione. Le distribuzioni automatiche dovrebbero ora riprendere non appena vengono aggiunte nuove istanze al gruppo Amazon EC2 Auto 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 nuovamente 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 EC2 Auto Scaling. Le distribuzioni automatiche dovrebbero ora riprendere non appena vengono aggiunte nuove istanze al gruppo Amazon EC2 Auto 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 EC2 Auto Scaling. Le distribuzioni non avvengono automaticamente su istanze già presenti nel gruppo Amazon EC2 Auto Scaling.

Errore «La distribuzione non è riuscita perché non è stata trovata alcuna istanza 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 le istanze EC2, le istanze locali o i 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, poiché è 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 istanze EC2 danneggiate (ad esempio, le istanze EC2 presentavano guasti hardware), quindi le ha annullate tutte, lasciandone nessuna nello stato. InService

    • Durante un evento di scalabilità orizzontale da 0 a1, CodeDeploy ha implementato una revisione precedentemente riuscita (chiamata ultima revisione riuscita) che era diventata inefficace dopo l'ultima implementazione. 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 console Amazon EC2, 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 gruppo Auto Scaling nella Guida per l'utente di Amazon EC2 Auto Scaling.

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

    1. Per verificare quale evento del ciclo di vita di Auto Scaling non va a buon fine, consulta Verifying a Scaling activity for an Auto Scaling group nella Amazon EC2 Auto Scaling User Guide.

    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 della 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.

    aws autoscaling set-desired-capacity -- auto-scaling-group-name ASG_NAME --desired-capacity 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. È in corso un ciclo di annullamento/riavvio.

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

    avvertimento

    Il comando seguente lancerà una nuova istanza EC2 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 fallita non è più presente, Auto Scaling annulla l'istanza EC2 esistente e ne lancia 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'istanza EC2 entri nello InService stato. Per verificarne lo stato, usa 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'istanza EC2:

    Importante

    Usa 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 console Amazon EC2 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 desiderato di istanze EC2 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 console Amazon EC2 all'indirizzo https://console.aws.amazon.com/ec2/ e scegli Gruppi con dimensionamento automatico dal pannello di navigazione.

    2. Scegliete 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 istanza EC2 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 istanze Amazon EC2 o Istanza locale e aggiungi un tag Chiave di o. EC2 On-premises Puoi lasciare il tag Value vuoto.

    8. Seleziona Salvataggio delle 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 fallita non è più presente, Auto Scaling annulla l'istanza EC2 esistente e ne lancia 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'istanza EC2 entri nello InService stato. Per verificarne lo stato:

    1. Apri la console Amazon EC2 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 di Amazon EC2 Auto Scaling e seleziona il tuo gruppo Auto Scaling dall'elenco.

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

    9. Deseleziona la casella di controllo accanto alle istanze Amazon EC2 o alle istanze locali.

    10. Seleziona Salvataggio delle 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 console Amazon EC2 all'indirizzo https://console.aws.amazon.com/ec2/ e scegli Gruppi con dimensionamento automatico 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.