View a markdown version of this page

Usa gli hook del ciclo di vita con un pool caldo nel gruppo Auto Scaling - Amazon EC2 Auto Scaling

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

Usa gli hook del ciclo di vita con un pool caldo nel gruppo Auto Scaling

Le istanze di un warm pool mantengono il proprio ciclo di vita indipendente per facilitare la creazione delle operazioni personalizzate appropriate per ogni transizione. Questo ciclo di vita è progettato per aiutarti a richiamare operazioni in un servizio di destinazione (ad esempio, una funzione Lambda) mentre un'istanza viene inizializzata e prima che venga messa in esecuzione.

Nota

Le operazioni API utilizzate per aggiungere e gestire gli hook del ciclo di vita e le operazioni complete del ciclo di vita non vengono modificate. Viene modificato solo il ciclo di vita dell'istanza.

Per ulteriori informazioni sull'aggiunta di un hook del ciclo di vita, consulta Aggiungi lifecycle hook al tuo gruppo Auto Scaling. Per ulteriori informazioni sul completamento di un'operazione del ciclo di vita, consulta Completa un'azione del ciclo di vita in un gruppo Auto Scaling.

Per le istanze che entrano nel warm pool, potrebbe essere necessario un hook del ciclo di vita per uno dei seguenti motivi:

  • È consigliabile avviare istanze EC2 da un'AMI che richiede molto tempo per terminare l'inizializzazione.

  • È consigliabile eseguire script di dati utente per avviare le istanze EC2.

Importante

Non appena un'istanza termina il lancio nel warm pool, Amazon EC2 Auto Scaling la interrompe o la iberna. Amazon EC2 Auto Scaling non attende il completamento dell'esecuzione dei dati dell'utente, pertanto l'azione di arresto o ibernazione può interrompere uno script ancora in esecuzione.

Per impostazione predefinita, cloud-init esegue i dati dell'utente solo al primo avvio. Uno script interrotto non viene eseguito nuovamente quando l'istanza esce dal warm pool ed entra in servizio. L'istanza può raggiungere lo InService stato senza completare lo script di bootstrap e Amazon EC2 Auto Scaling segnala che l'istanza è integra.

Per evitare un bootstrap incompleto, utilizza una delle seguenti opzioni:

  • Aggiungi un hook relativo al ciclo di vita per l'azione relativa al EC2_INSTANCE_LAUNCHING ciclo di vita. L'istanza rimane quindi Warmed:Pending:Wait nello stato fino al termine e alla chiamata dello script di bootstrap. CompleteLifecycleAction

  • Includi i passaggi di bootstrap nella tua AMI in modo che rimanga poco o nessun lavoro per i dati utente.

  • Configura i dati utente in modo che vengano eseguiti a ogni avvio, come descritto inPrerequisiti. Lo script viene quindi eseguito nuovamente quando l'istanza viene riavviata quando esce dal warm pool.

Per le istanze che escono dal warm pool, potrebbe essere necessario un hook del ciclo di vita per uno dei seguenti motivi:

  • Puoi utilizzare un periodo di tempo aggiuntivo per preparare le istanze EC2 per l'uso. Ad esempio, puoi disporre di servizi da eseguire al riavvio di un'istanza prima che l'applicazione funzioni correttamente.

  • È consigliabile compilare precedentemente i dati della cache, in modo che un nuovo server non venga avviato con una cache vuota.

  • È consigliabile registrare le nuove istanze come istanze gestite con il servizio di gestione della configurazione.

Transizioni dello stato del ciclo di vita delle istanze in un warm pool

Un'istanza Auto Scaling può passare attraverso molti stati nel corso del ciclo di vita.

Il diagramma seguente mostra la transizione tra gli stati Auto Scaling quando utilizzi un warm pool:

Le transizioni dello stato del ciclo di vita delle istanze in un warm pool.

¹ Questo stato varia in base all'impostazione dello stato del warm pool. Se lo stato del pool è impostato su Running, in tal caso è Warmed:Running. Se lo stato del pool è impostato su Hibernated, in tal caso è Warmed:Hibernated.

Quando aggiungi gli hook del ciclo di vita, considera quanto segue:

  • Quando un hook del ciclo di vita è configurato per l'azione autoscaling:EC2_INSTANCE_LAUNCHING del ciclo di vita, un'istanza appena avviata viene sospesa per eseguire un'azione personalizzata quando raggiunge lo stato Warmed:Pending:Wait, quindi nuovamente quando viene riavviata e raggiunge lo stato Pending:Wait.

  • Quando un hook del ciclo di vita è configurato per l'opzione EC2_INSTANCE_TERMINATING, un'istanza in fase di terminazione viene sospesa per eseguire un'azione personalizzata quando raggiunge lo stato Terminating:Wait. Tuttavia, se specifichi una policy di riutilizzo delle istanze per restituire le istanze al warm pool su scala interna anziché terminarle, un'istanza che sta tornando al warm pool viene sospesa per eseguire un'azione personalizzata nello stato Warmed:Pending:Wait per l'operazione EC2_INSTANCE_TERMINATING del ciclo di vita.

  • Se la domanda sulla tua applicazione esaurisce il warm pool, Dimensionamento automatico Amazon EC2 può avviare le istanze direttamente nel gruppo con scalabilità automatica finché il gruppo non raggiunge la sua capacità massima. Se le istanze vengono avviate direttamente nel gruppo, vengono sospese solo per eseguire un'operazione personalizzata nello stato Pending:Wait.

  • Per controllare per quanto tempo un'istanza rimane in uno stato di attesa prima di passare allo stato successivo, configura l'azione personalizzata per utilizzare il comando complete-lifecycle-action. Con gli hook del ciclo di vita, le istanze rimangono in stato di attesa finché non si notifica a Dimensionamento automatico Amazon EC2 che l'operazione del ciclo di vita specificata è completa o fino alla fine del periodo di timeout (un'ora per impostazione predefinita).

Di seguito viene riepilogato il flusso per un evento di aumento orizzontale.

Un diagramma a flusso di un evento di aumento orizzontale.

Quando le istanze raggiungono uno stato di attesa, Dimensionamento automatico Amazon EC2 invia una notifica. Esempi di queste notifiche sono disponibili nella EventBridge sezione di questa guida. Per ulteriori informazioni, consulta Esempi di eventi e modelli relativi al pool caldo.

Destinazioni di notifica supportate

Dimensionamento automatico Amazon EC2 fornisce supporto per la definizione di una delle seguenti destinazioni di notifica per le notifiche del ciclo di vita:

  • EventBridge regole

  • Argomenti di Amazon SNS

  • Code Amazon SQS

  • AWS Lambda funzioni

Importante

Se nel modello di avvio o nella configurazione di avvio è presente uno script di dati utente (cloud-init) che configura le istanze al momento dell'avvio, non è necessario ricevere notifiche per eseguire azioni personalizzate sulle istanze in fase di avvio o riavvio.

Le sezioni seguenti contengono collegamenti alla documentazione che descrive come configurare le destinazioni di notifica:

EventBridge regole: per eseguire codice quando Amazon EC2 Auto Scaling mette un'istanza in stato di attesa, puoi creare una regola e specificare una funzione Lambda come EventBridge destinazione. Per richiamare diverse funzioni Lambda basate su notifiche del ciclo di vita diverse, puoi creare più regole e associare ciascuna regola a uno specifico modello di eventi e a una funzione Lambda. Per ulteriori informazioni, consulta Crea EventBridge regole per eventi in piscina riscaldata.

Argomenti di Amazon SNS: per ricevere una notifica quando un'istanza viene messa in stato di attesa, crei un argomento Amazon SNS e quindi configura il filtro dei messaggi di Amazon SNS per fornire notifiche sul ciclo di vita in modo diverso in base a un attributo del messaggio. Per ulteriori informazioni, consulta Ricezione di notifiche tramite Amazon SNS.

Code Amazon SQS: per configurare un punto di consegna per le notifiche del ciclo di vita in cui un consumatore interessato possa raccoglierle ed elaborarle, puoi creare una coda Amazon SQS e un consumatore in coda che elabori i messaggi dalla coda SQS. Se desideri che la coda di tipo consumer elabori le notifiche del ciclo di vita in modo diverso in base a un attributo del messaggio, devi impostarla in modo che analizzi e agisca sul messaggio quando un attributo specifico corrisponde al valore desiderato. Per ulteriori informazioni, consulta Ricezione di notifiche tramite Amazon SQS.

AWS Lambda funzioni — Per eseguire codice personalizzato quando Amazon EC2 Auto Scaling mette un'istanza in stato di attesa, puoi specificare una funzione Lambda come destinazione della notifica. La funzione Lambda viene richiamata con i dati delle notifiche del ciclo di vita e consente di eseguire azioni personalizzate come la configurazione dell'istanza, la configurazione dell'applicazione o l'integrazione con altri servizi. AWS È necessario configurare la policy basata sulle risorse della funzione Lambda per consentire al ruolo collegato al servizio Auto Scaling di richiamare la funzione. Per ulteriori informazioni, consulta Inoltra le notifiche a AWS Lambda direttamente.