Integrazione CodeDeploy con 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à.

Integrazione CodeDeploy con Amazon EC2 Auto Scaling

CodeDeploy supporta Amazon EC2 Auto Scaling, AWS un servizio che avvia automaticamente le istanze Amazon EC2 in base alle condizioni da te definite. Queste condizioni possono includere limiti superati in un intervallo di tempo specificato per l'utilizzo della CPU, le letture o le scritture del disco o il traffico di rete in entrata o in uscita. Amazon EC2 Auto Scaling interrompe le istanze quando non sono più necessarie. Per ulteriori informazioni, consulta Cos'è Amazon EC2 Auto Scaling? nella Guida per l'utente di Amazon EC2 Auto Scaling.

Quando vengono lanciate nuove istanze Amazon EC2 come parte di un gruppo Amazon EC2 Auto Scaling CodeDeploy , puoi distribuire automaticamente le tue revisioni alle nuove istanze. Puoi anche coordinare le distribuzioni con le istanze di Amazon EC2 Auto Scaling registrate CodeDeploy con i sistemi di bilanciamento del carico Elastic Load Balancing. Per ulteriori informazioni, consulta Integrating CodeDeploy with Elastic Load Balancing e Configura un sistema di bilanciamento del carico nelle distribuzioni Elastic Load Balancing for Amazon CodeDeploy EC2.

Nota

Potresti riscontrare problemi se associ più gruppi di distribuzione a un singolo gruppo Amazon EC2 Auto Scaling. Se, ad esempio, una distribuzione ha esito negativo, l'istanza inizierà l'arresto, ma le altre distribuzioni che erano in esecuzione possono richiedere un'ora di tempo per scadere. Per ulteriori informazioni, consulta Evita di associare più gruppi di distribuzione a un singolo gruppo Amazon EC2 Auto Scaling Under the hood: CodeDeploy and Amazon EC2 Auto Scaling integration.

Distribuzione di CodeDeploy applicazioni su gruppi Amazon EC2 Auto Scaling

Per distribuire una revisione CodeDeploy dell'applicazione in un gruppo Amazon EC2 Auto Scaling:

  1. Crea o individua un profilo di istanza IAM che consenta al gruppo Amazon EC2 Auto Scaling di lavorare con Amazon S3. Per ulteriori informazioni, consulta Fase 4: crea un profilo di istanza IAM per le tue istanze Amazon EC2.

    Nota

    Puoi anche utilizzare CodeDeploy per distribuire le revisioni dai GitHub repository ai gruppi di Amazon EC2 Auto Scaling. Sebbene le istanze Amazon EC2 richiedano ancora un profilo di istanza IAM, il profilo non necessita di autorizzazioni aggiuntive per la distribuzione da un repository. GitHub

  2. Crea o usa un gruppo Amazon EC2 Auto Scaling, specificando il profilo dell'istanza IAM nella configurazione o nel modello di lancio. Per ulteriori informazioni, consulta il ruolo IAM per le applicazioni eseguite su istanze Amazon EC2.

  3. Crea o individua un ruolo di servizio che CodeDeploy consenta di creare un gruppo di distribuzione che contenga il gruppo Amazon EC2 Auto Scaling.

  4. Crea un gruppo di CodeDeploy distribuzione specificando il nome del gruppo Amazon EC2 Auto Scaling, il ruolo del servizio e alcune altre opzioni. Per ulteriori informazioni, consulta Crea un gruppo di distribuzione per una distribuzione sul posto (console) o Crea un gruppo di distribuzione per una distribuzione sul posto (console).

  5. Usalo CodeDeploy per distribuire la tua revisione nel gruppo di distribuzione che contiene il gruppo Amazon EC2 Auto Scaling.

Per ulteriori informazioni, consulta Tutorial: CodeDeploy Da utilizzare per distribuire un'applicazione in un gruppo di Auto Scaling.

Abilitazione delle implementazioni di terminazione durante gli eventi scale-in di Auto Scaling

Una distribuzione con interruzione è un tipo di CodeDeploy distribuzione che viene attivata automaticamente quando si verifica un evento di scalabilità in Auto Scaling. CodeDeploy esegue la distribuzione di terminazione subito prima che il servizio Auto Scaling termini l'istanza. Durante una distribuzione al termine, CodeDeploy non distribuisce nulla. Genera invece eventi del ciclo di vita, che è possibile collegare ai propri script per abilitare funzionalità di spegnimento personalizzate. Ad esempio, è possibile collegare l'evento del ApplicationStop ciclo di vita a uno script che chiude correttamente l'applicazione prima che l'istanza venga terminata.

Per un elenco degli eventi del ciclo di vita generati durante una distribuzione di terminazione, consulta CodeDeploy . Disponibilità di Lifecycle Event Hook

Se la distribuzione di terminazione fallisce per qualsiasi motivo, CodeDeploy consentirà alla chiusura dell'istanza di procedere. Ciò significa che l'istanza verrà chiusa anche se CodeDeploy non è stato eseguito l'intero set (o nessuno) degli eventi del ciclo di vita fino al completamento.

Se non abiliti le distribuzioni di terminazione, il servizio Auto Scaling interromperà comunque le istanze Amazon EC2 quando si verifica un evento di scalabilità in, ma non genererà eventi del ciclo di vita. CodeDeploy

Nota

Indipendentemente dal fatto che tu abiliti o meno le implementazioni di terminazione, se il servizio Auto Scaling termina un'istanza Amazon EC2 mentre è in corso un'implementazione, potrebbe verificarsi CodeDeploy una situazione di gara tra gli eventi del ciclo di vita generati da Auto Scaling e i servizi. CodeDeploy Ad esempio, l'evento del Terminating ciclo di vita (generato dal servizio Auto Scaling) potrebbe sovrascrivere ApplicationStart l'evento (generato dalla distribuzione). CodeDeploy In questo scenario, è possibile che si verifichi un errore con la chiusura dell'istanza Amazon EC2 o con la distribuzione. CodeDeploy

Per consentire l'esecuzione di CodeDeploy distribuzioni di terminazione

Dopo l'installazione dell'hook di terminazione, si svolge un evento scale-in (terminazione) come segue:

  1. Il servizio Auto Scaling (o semplicemente Auto Scaling) determina che deve verificarsi un evento di scale-in e contatta il servizio EC2 per terminare un'istanza EC2.

  2. Il servizio EC2 inizia a terminare l'istanza EC2. L'istanza passa allo Terminating stato e quindi allo stato. Terminating:Wait

  3. DuranteTerminating:Wait, Auto Scaling esegue tutti gli hook del ciclo di vita collegati al gruppo Auto Scaling, incluso l'hook di terminazione installato da. CodeDeploy

  4. L'hook di terminazione invia una notifica alla coda di Amazon SQS da cui viene effettuato il polling. CodeDeploy

  5. Dopo aver ricevuto la notifica, CodeDeploy analizza il messaggio, esegue alcune convalide ed esegue una distribuzione di terminazione.

  6. Mentre la distribuzione di terminazione è in esecuzione, CodeDeploy invia battiti cardiaci ogni cinque minuti ad Auto Scaling per informarlo che l'istanza è ancora in fase di elaborazione.

  7. Finora, l'istanza EC2 è ancora nello Terminating:Wait stato (o forse nello Warmed:Pending:Wait stato, se hai abilitato i pool caldi di gruppo Auto Scaling).

  8. Al termine della distribuzione, CodeDeploy indica il processo di terminazione di Auto Scaling CONTINUE to the EC2, indipendentemente dal fatto che l'implementazione di terminazione sia riuscita o meno.

Come funziona Amazon EC2 Auto Scaling con CodeDeploy

Quando crei o aggiorni un gruppo di CodeDeploy distribuzione per includere un gruppo Auto Scaling, CodeDeploy accede al gruppo Auto Scaling utilizzando il ruolo di CodeDeploy servizio, quindi installa gli hook del ciclo di vita di Auto Scaling nei gruppi Auto Scaling.

Nota

Gli hook del ciclo di vita di Auto Scaling sono diversi dagli eventi del ciclo di vita (chiamati anche hook degli eventi del ciclo di vita) generati e descritti nella presente guida. CodeDeploy AppSpec sezione 'hooks'

Gli hook del ciclo di vita di Auto Scaling che vengono installati sono: CodeDeploy

  • Un hook di lancio: questo hook notifica CodeDeploy che è in corso un evento di scalabilità orizzontale di Auto Scaling e CodeDeploy che è necessario avviare una distribuzione di lancio.

    Durante una distribuzione di lancio,: CodeDeploy

    • Implementa una revisione dell'applicazione nell'istanza scalabile.

    • Genera eventi del ciclo di vita per indicare lo stato di avanzamento della distribuzione. È possibile collegare questi eventi del ciclo di vita ai propri script per abilitare funzionalità di avvio personalizzate. Per ulteriori informazioni, consulta la tabella in. Disponibilità di Lifecycle Event Hook

    Il launch hook e la distribuzione di avvio associata sono sempre abilitati e non possono essere disattivati.

  • Un hook di terminazione: questo hook opzionale notifica CodeDeploy che è in corso un evento di scale-in Auto Scaling e CodeDeploy che è necessario avviare una distribuzione di terminazione.

    Durante una distribuzione con interruzione, CodeDeploy genera eventi del ciclo di vita per indicare lo stato di avanzamento della chiusura dell'istanza. Per ulteriori informazioni, consulta Abilitazione delle implementazioni di terminazione durante gli eventi scale-in di Auto Scaling.

Dopo aver CodeDeploy installato i lifecycle hook, come vengono utilizzati?

Dopo aver installato gli hook del ciclo di vita di avvio e terminazione, vengono utilizzati rispettivamente durante gli eventi di scalabilità orizzontale e di CodeDeploy scalabilità in gruppo Auto Scaling.

Un evento di scale-out (lancio) si svolge come segue:

  1. Il servizio Auto Scaling (o semplicemente Auto Scaling) determina la necessità di un evento di scalabilità orizzontale e contatta il servizio EC2 per lanciare una nuova istanza EC2.

  2. Il servizio EC2 lancia una nuova istanza EC2. L'istanza passa allo Pending stato e quindi allo stato. Pending:Wait

  3. DurantePending:Wait, Auto Scaling esegue tutti gli hook del ciclo di vita collegati al gruppo Auto Scaling, incluso l'hook di avvio installato da. CodeDeploy

  4. L'hook di avvio invia una notifica alla coda di Amazon SQS da cui viene effettuato il polling. CodeDeploy

  5. Dopo aver ricevuto la notifica, CodeDeploy analizza il messaggio, esegue alcune convalide e avvia una distribuzione di avvio.

  6. Mentre la distribuzione di lancio è in esecuzione, CodeDeploy invia battiti cardiaci ogni cinque minuti ad Auto Scaling per informarlo che l'istanza è ancora in fase di elaborazione.

  7. Finora, l'istanza EC2 è ancora nello stato. Pending:Wait

  8. Al termine dell'implementazione, CodeDeploy indica Auto Scaling su uno dei CONTINUE due ABANDON o sul processo di avvio di EC2, a seconda che l'implementazione sia riuscita o meno.

    • Se lo CodeDeploy indicaCONTINUE, Auto Scaling continua il processo di avvio, aspettando il completamento degli altri hook oppure inserendo l'istanza nello stato Pending:Proceed e quindi nello stato. InService

    • Se lo CodeDeploy indicaABANDON, Auto Scaling termina l'istanza EC2 e riavvia la procedura di avvio se necessario per soddisfare il numero di istanze desiderato, come definito nell'impostazione Auto Scaling Desired Capacity.

Un evento di scale-in (terminazione) si svolge come segue:

Per informazioni, consulta Abilitazione delle implementazioni di terminazione durante gli eventi scale-in di Auto Scaling.

Come vengono CodeDeploy denominati i gruppi di Amazon EC2 Auto Scaling

Durante le implementazioni blu/green su una piattaforma di elaborazione EC2/on-premise, hai due opzioni per aggiungere istanze all'ambiente sostitutivo (verde):

  • Utilizzare le istanze esistenti o create manualmente.

  • Utilizza le impostazioni di un gruppo Amazon EC2 Auto Scaling che specifichi per definire e creare istanze in un nuovo gruppo Amazon EC2 Auto Scaling.

Se scegli la seconda opzione, effettua il CodeDeploy provisioning di un nuovo gruppo Amazon EC2 Auto Scaling per te. Viene utilizzata la seguente convenzione per assegnare il nome al gruppo:

CodeDeploy_deployment_group_name_deployment_id

Ad esempio, se una distribuzione con ID 10 implementa un gruppo di distribuzione denominatoalpha-deployments, viene denominato il gruppo Amazon EC2 Auto Scaling fornito. CodeDeploy_alpha-deployments_10 Per ulteriori informazioni, consulta Crea un gruppo di distribuzione per una distribuzione EC2/on-premise blu/verde (console) e GreenFleetProvisioningOption.

Ordine di esecuzione degli eventi hook del ciclo di vita personalizzati

Puoi aggiungere i tuoi hook del ciclo di vita ai gruppi di Amazon EC2 Auto Scaling a cui effettuare le distribuzioni. CodeDeploy Tuttavia, l'ordine in cui vengono eseguiti gli eventi del ciclo di vita personalizzati non può essere predeterminato in relazione agli eventi del ciclo di vita della distribuzione predefiniti. CodeDeploy Ad esempio, se aggiungi un hook del ciclo di vita personalizzato denominato ReadyForSoftwareInstall a un gruppo Amazon EC2 Auto Scaling, non puoi sapere in anticipo se verrà eseguito prima del primo o dopo l'ultimo evento del ciclo di vita di distribuzione predefinito. CodeDeploy

Per informazioni su come aggiungere hook personalizzati per il ciclo di vita a un gruppo Amazon EC2 Auto Scaling, consulta Adding lifecycle hook nella Amazon EC2 Auto Scaling User Guide.

Eventi di scalabilità orizzontale durante una distribuzione

Se si verifica un evento di scalabilità orizzontale di Auto Scaling mentre è in corso una distribuzione, le nuove istanze verranno aggiornate con la revisione dell'applicazione precedentemente distribuita, non con la revisione dell'applicazione più recente. Se la distribuzione ha esito positivo, le vecchie istanze e le nuove istanze con scalabilità orizzontale ospiteranno diverse revisioni delle applicazioni. Per aggiornare le istanze con la revisione precedente, avvia CodeDeploy automaticamente una distribuzione successiva (subito dopo la prima) per aggiornare eventuali istanze obsolete. Se desideri modificare questo comportamento predefinito in modo che le istanze EC2 obsolete rimangano nella versione precedente, consulta. Automatic updates to outdated instances

Se desideri sospendere i processi di scalabilità orizzontale di Amazon EC2 Auto Scaling durante le distribuzioni, puoi farlo tramite un'impostazione nello script con cui viene utilizzato per il bilanciamento common_functions.sh del carico. CodeDeploy SeHANDLE_PROCS=true, i seguenti eventi di Auto Scaling vengono sospesi automaticamente durante il processo di distribuzione:

  • AZRebalance

  • AlarmNotification

  • ScheduledActions

  • ReplaceUnhealthy

Importante

Solo il. CodeDeployDefault OneAtLa configurazione di distribuzione aTime supporta questa funzionalità.

Per ulteriori informazioni sull'utilizzo per HANDLE_PROCS=true evitare problemi di distribuzione quando si utilizza Amazon EC2 Auto Scaling, consulta Avviso importante sulla AutoScaling gestione dei processi in on. aws-codedeploy-samples GitHub

Eventi di scalabilità durante una distribuzione

Se un gruppo Auto Scaling inizia a scalare mentre è in corso una CodeDeploy distribuzione su quel gruppo Auto Scaling, potrebbe verificarsi una situazione di competizione tra il processo di terminazione (inclusi gli eventi del ciclo di vita della distribuzione di terminazione) e altri eventi del ciclo di vita sull'istanza di CodeDeploy terminazione. CodeDeploy La distribuzione su quell'istanza specifica potrebbe non riuscire se l'istanza viene terminata prima del completamento di tutti gli eventi del ciclo di vita. CodeDeploy Inoltre, l' CodeDeploy implementazione complessiva potrebbe fallire o meno, a seconda di come hai impostato l'impostazione Minimum healthy hosts nella configurazione di distribuzione.

Ordine degli eventi negli script AWS CloudFormation cfn-init

Se si utilizza cfn-init (o cloud-init) per eseguire gli script sulle istanze basate su Linux appena assegnate, le distribuzioni potrebbero non riuscire a meno che non si controlli scrupolosamente l'ordine degli eventi che si verificano dopo l'avvio dell'istanza.

Questo ordine deve essere:

  1. L'istanza appena assegnata viene avviata.

  2. Tutti gli script di bootstrap cfn-init vengono eseguiti fino al completamento.

  3. L'agente inizia. CodeDeploy

  4. La revisione più recente dell'applicazione viene distribuita all'istanza.

Se l'ordine degli eventi non è controllato con attenzione, l' CodeDeploy agente potrebbe avviare una distribuzione prima che tutti gli script siano terminati.

Per controllare l'ordine degli eventi, utilizzare una di queste best practice:

  • Installa l' CodeDeploy agente tramite uno cfn-init script, inserendolo dopo tutti gli altri script.

  • Includi l' CodeDeploy agente in un'AMI personalizzata e usa uno cfn-init script per avviarlo, inserendolo dopo tutti gli altri script.

Per informazioni sull'utilizzocfn-init, consulta cfn-init nella Guida per l'utente.AWS CloudFormation

Utilizzo di un'AMI personalizzata con CodeDeploy Amazon EC2 Auto Scaling

Sono disponibili due opzioni per specificare l'AMI di base da utilizzare quando vengono lanciate nuove istanze Amazon EC2 in un gruppo Amazon EC2 Auto Scaling:

  • È possibile specificare un'AMI personalizzata di base su cui sia già installato l' CodeDeploy agente. Poiché l'agente è già installato, questa opzione avvia nuove istanze Amazon EC2 più rapidamente rispetto all'altra opzione. Tuttavia, questa opzione offre una maggiore probabilità che le distribuzioni iniziali delle istanze Amazon EC2 abbiano esito negativo, soprattutto se l' CodeDeploy agente non è aggiornato. Se scegli questa opzione, ti consigliamo di aggiornare regolarmente l' CodeDeploy agente nella tua AMI personalizzata di base.

  • Puoi specificare un'AMI di base in cui non sia installato l' CodeDeploy agente e farlo installare ogni volta che una nuova istanza viene lanciata in un gruppo Amazon EC2 Auto Scaling. Sebbene questa opzione avvii nuove istanze Amazon EC2 più lentamente rispetto all'altra opzione, offre una maggiore probabilità che le distribuzioni iniziali delle istanze abbiano successo. Questa opzione utilizza la versione più recente dell'agente. CodeDeploy