Progetta le tue applicazioni per gestire correttamente la chiusura delle istanze - 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à.

Progetta le tue applicazioni per gestire correttamente la chiusura delle istanze

Questo argomento descrive le funzionalità che puoi utilizzare per impedire al gruppo Amazon EC2 Auto Scaling di terminare le istanze Amazon EC2 che non sono ancora pronte per la chiusura. Per impostazione predefinita, Auto Scaling non offre alcuna visibilità sulle applicazioni in esecuzione sulle istanze. Può terminare le istanze prima che l'applicazione sia in grado di chiudersi correttamente o completare i lavori assegnati. Queste funzionalità danno all'applicazione il tempo necessario per completare i lavori in corso, trasferire lo stato o eseguire la pulizia prima della chiusura dell'istanza. È possibile utilizzarle singolarmente o in combinazione a seconda dei requisiti dell'applicazione.

Queste funzionalità sono particolarmente utili per i carichi di lavoro stateful, in cui ogni istanza del parco istanze contiene dati, job o stati diversi rispetto alle altre istanze. L'interruzione delle istanze con stato senza un arresto automatico potrebbe comportare il riavvio dall'inizio dei processi di lunga durata, la riduzione della ridondanza o della perdita di dati e l'interruzione delle transazioni o dei calcoli in corso. Per chiudere correttamente un'istanza con stateful, il relativo carico di lavoro deve essere esaurito (completando tutti i lavori attualmente assegnati) o trasferito (spostando lavori, dati o configurazione su un'altra istanza attiva).

Hook del ciclo di vita di terminazione

Un hook del ciclo di vita della terminazione prolunga la durata dell'istanza Amazon EC2 già selezionata per la terminazione. Fornisce più tempo per completare il lavoro in corso attualmente assegnato all'istanza o per salvare lo stato di avanzamento e trasferire il lavoro su un'altra istanza.

Per molti carichi di lavoro, un hook relativo al ciclo di vita della terminazione può essere sufficiente per chiudere correttamente un'applicazione su un'istanza selezionata per la chiusura. Si tratta di un approccio ottimale e non può essere utilizzato per impedire l'interruzione se un'azione del ciclo di vita di terminazione viene abbandonata. Se il tuo carico di lavoro ha una bassa tolleranza agli errori relativi al ciclo di vita delle istanze, configura le policy relative al ciclo di vita delle istanze in combinazione con gli hook relativi al ciclo di vita della terminazione per conservare le istanze.

Per utilizzare un hook del ciclo di vita della terminazione, devi sapere quando un'istanza è selezionata per la terminazione. Puoi saperlo in due modi:

Opzione Description Ideale per Collegamento alla documentazione
All'interno dell'istanza Il servizio di metadati di istanza (IMDS) è un endpoint sicuro che consente di verificare lo stato di un'istanza direttamente dall'istanza. Se i metadati vengono restituiti con Terminated, viene pianificata la terminazione dell'istanza. Applicazioni in cui è necessario eseguire un'azione sull'istanza prima che l'istanza venga terminata. Recupera lo stato del ciclo di vita di destinazione
All'esterno dell'istanza Quando un'istanza viene terminata, viene generata una notifica di evento. Puoi creare regole utilizzando Amazon EventBridge, Amazon SQS, Amazon SNS AWS Lambda o acquisire questi eventi e richiamare una risposta, ad esempio con una funzione Lambda. Applicazioni che devono agire al di fuori dell'istanza. Configura un obiettivo di notifica

Per utilizzare un hook del ciclo di vita, devi anche sapere quando un'istanza è pronta per essere terminata. Amazon EC2 Auto Scaling non interromperà l'istanza finché non riceve CompleteLifecycleActionuna chiamata API o non scade il timeout, a seconda dell'evento che si verifica per primo.

Per impostazione predefinita, un'istanza può continuare a funzionare per un'ora (heartbeat timeout) causa di un hook del ciclo di vita della terminazione. È possibile configurare il timeout predefinito se un'ora non è sufficiente per completare l'azione del ciclo di vita. Quando è in corso un'azione relativa al ciclo di vita, puoi prolungare il timeout con chiamate API. RecordLifecycleActionHeartbeat

Per ulteriori informazioni, consulta Hook del ciclo di vita di Amazon EC2 Auto Scaling.

Protezione del dimensionamento verticale dell’istanza

È possibile utilizzare la protezione scale-in delle istanze per controllare quali istanze vengono selezionate per la terminazione durante gli eventi di scale-in, in particolare per evitare che un'istanza che sta elaborando attivamente un processo di lunga durata venga interrotta. Ad esempio, quando si eseguono carichi di lavoro containerizzati, è comune voler proteggere tutte le istanze e rimuovere la protezione solo per le istanze senza attività correnti o pianificate. Le istanze possono continuare a ricercare nuovi lavori e riattivare la protezione quando vengono assegnati nuovi lavori.

È possibile abilitare la protezione scalabile a livello di gruppo e istanza di Auto Scaling. Quando abiliti la protezione scalabile a livello di gruppo Auto Scaling, solo le nuove istanze vengono protette al momento della creazione. Per le istanze esistenti, puoi abilitare la protezione singolarmente.

Le applicazioni possono impostare la protezione dalle istanze stesse o da un piano di controllo centralizzato che gestisce se ogni istanza è terminabile. Consigliamo l'approccio centralizzato per flotte di grandi dimensioni o quando la protezione deve essere attivata frequentemente, in quanto consente di effettuare chiamate in batch ed evitare problemi di limitazione delle API. SetInstanceProtection

Per ulteriori informazioni, consulta Utilizza la protezione scalabile in base alle istanze per controllare la chiusura dell'istanza.

Policy di terminazione personalizzata

Analogamente alla protezione scalabile in base alle istanze, una policy di terminazione personalizzata consente di impedire al gruppo Amazon EC2 Auto Scaling di terminare istanze EC2 specifiche. Le istanze non funzionanti possono comunque essere chiuse indipendentemente dalla politica di terminazione personalizzata.

Il tuo gruppo Auto Scaling utilizza una politica di terminazione predefinita per determinare quali istanze Amazon EC2 termina per prime. Se desideri un maggiore controllo su quali istanze terminano per prime, puoi implementare una politica di terminazione personalizzata utilizzando una funzione Lambda. Auto Scaling chiama questa funzione ogni volta che deve selezionare un'istanza per la terminazione e terminerà solo le istanze restituite dalla funzione. Se la funzione presenta errori, scade o restituisce un elenco vuoto, Auto Scaling non termina alcuna istanza a meno che l'istanza non sia integra.

Una politica di terminazione personalizzata è utile quando l'applicazione è in grado di identificare quali istanze sono inattive o sicure da chiudere. Ciò richiede in genere un piano di controllo che tenga traccia del carico di lavoro in tutto il gruppo.

Per ulteriori informazioni, consulta Creare una policy di terminazione personalizzata con Lambda..

Politica del ciclo di vita delle istanze

Le politiche del ciclo di vita delle istanze forniscono protezione contro le terminazioni di Amazon EC2 Auto Scaling quando un'azione del ciclo di vita di terminazione viene abbandonata. A differenza dei soli ganci relativi al ciclo di vita, le policy relative al ciclo di vita delle istanze sono progettate per garantire che le istanze passino a uno stato inalterato quando le procedure di spegnimento automatiche non vengono completate correttamente.

Quando Auto Scaling seleziona un'istanza per la terminazione, vengono richiamati gli hook del ciclo di vita della terminazione configurati e l'applicazione avvia procedure di spegnimento regolari. Se le azioni del ciclo di vita di terminazione vengono completate correttamente con, l'istanza termina normalmente. CONTINUE Tuttavia, se un'azione del ciclo di vita di terminazione viene abbandonata per qualsiasi motivo, la politica del ciclo di vita dell'istanza sposta l'istanza in uno stato mantenuto anziché terminarla. Le istanze conservate non vengono conteggiate ai fini della capacità desiderata del gruppo Auto Scaling, quindi le istanze sostitutive vengono avviate automaticamente. Saranno addebitati i costi standard di Amazon EC2 sia per l'istanza mantenuta che per la sua sostituzione fino a quando non terminerai manualmente l'istanza mantenuta utilizzando l'API. TerminateInstanceInAutoScalingGroup

Per utilizzare questa funzionalità, devi configurare sia una politica del ciclo di vita dell'istanza con il trigger di TerminateHookAbandon conservazione impostato suretain, sia almeno un hook del ciclo di vita di terminazione. Poiché le istanze conservate comportano costi continui di Amazon EC2 e richiedono un'azione manuale, il monitoraggio è fondamentale. Dovresti abilitare CloudWatch parametri come GroupTerminatingRetainedInstances e creare CloudWatch allarmi per avvisarti quando le istanze entrano in stati mantenuti.

Per ulteriori informazioni, consulta Controlla la conservazione delle istanze con le politiche del ciclo di vita delle istanze.

Sospendi del tutto le terminazioni

Se hai bisogno del controllo completo su tutte le terminazioni delle istanze EC2 all'interno del tuo gruppo Amazon EC2 Auto Scaling, sospendi il processo. Terminate Ti consigliamo di utilizzare questa opzione solo se le opzioni precedenti non ti offrono il controllo necessario per il tuo servizio. Chiamando SuspendProcessesper sospendere il Terminate processo, si impedisce ad Auto Scaling di tentare di interrompere il processo per qualsiasi motivo, ad eccezione di quelli avviati da una richiesta dell'utente all'API. TerminateInstanceInAutoScalingGroup

Per ulteriori informazioni, consulta Sospendi e riprendi i processi di Amazon EC2 Auto Scaling.

Limitazioni

Importante

Quando progetti la tua applicazione su Amazon EC2 Auto Scaling per gestire correttamente le terminazioni delle istanze, tieni presenti le seguenti limitazioni.

Le istanze non integre aggirano alcune protezioni

Se un'istanza non è integra, Amazon EC2 Auto Scaling inizierà a terminarla anche se disponi di politiche di terminazione personalizzate o di protezione scalabile. L'unico modo per impedire la sostituzione di istanze non integre con Auto Scaling consiste nel sospendere HealthCheck il ReplaceUnhealthy processo, or. Terminate È possibile utilizzare i lifecycle hook e una policy sul ciclo di vita dell'istanza per consentire all'applicazione di chiudersi correttamente o copiare tutti i dati che è necessario ripristinare prima che l'istanza non integra venga terminata.

Funzionalità Controlla le istanze integre Controlla le istanze non integre
Politiche di terminazione personalizzate No
Protezione dal ridimensionamento No
Sospendi HealthCheck o ReplaceUnhealthy elabora Terminate
Hook del ciclo di vita
Politica del ciclo di vita delle istanze

I soli ganci Lifecycle non garantiscono uno spegnimento corretto

Per impostazione predefinita, i termination lifecycle hook funzionano al meglio. Se un'azione di terminazione del ciclo di vita viene abbandonata, Amazon EC2 Auto Scaling procede immediatamente alla chiusura dell'istanza. Puoi combinare gli agganci del ciclo di vita della terminazione con una politica del ciclo di vita dell'istanza per conservare le istanze quando le azioni relative al ciclo di vita di terminazione vengono abbandonate. Con questa combinazione:

  • Gli hook del ciclo di vita della terminazione tentano di chiudere correttamente l'applicazione dopo che Auto Scaling ha attivato la chiusura dell'istanza e il drenaggio da qualsiasi sistema di bilanciamento del carico Elastic Load Balancing configurato è stato completato.

  • Se un'azione del ciclo di vita di terminazione viene abbandonata per qualsiasi motivo, l'istanza passa a uno stato mantenuto anziché essere terminata.

  • L'istanza mantenuta rimane nello stato corrente di Amazon EC2, consentendoti di completare manualmente le procedure di spegnimento o di indagare sull'errore.

  • Puoi terminare manualmente le istanze conservate chiamando l'API dopo aver completato le TerminateInstanceInAutoScalingGroupazioni necessarie.

Per ulteriori informazioni, consulta Controlla la conservazione delle istanze con le politiche del ciclo di vita delle istanze.

Alcune opzioni di mercato delle istanze possono essere interrotte con un preavviso limitato

Se utilizzi opzioni di mercato delle istanze come istanze Spot e prenotazioni di capacità interrompibile nel tuo gruppo Auto Scaling, Amazon EC2 può interrompere e recuperare le tue istanze in qualsiasi momento. Queste interruzioni aggirano tutti i meccanismi di protezione di Amazon EC2 Auto Scaling, tra cui:

  • Hook del ciclo di vita di terminazione

  • Protezione del dimensionamento verticale dell’istanza

  • Politiche di terminazione personalizzate

  • Politiche relative al ciclo di vita delle istanze

  • Processi sospesi

Quando un'istanza Spot riceve un avviso di interruzione, hai a disposizione circa due minuti per eseguire le normali operazioni di spegnimento. Sebbene sia possibile utilizzare gli hook del ciclo di vita della terminazione per rispondere alle interruzioni dell'istanza Spot, l'istanza verrà interrotta forzatamente allo scadere del periodo di due minuti, anche se l'hook del ciclo di vita è ancora in corso. Inoltre, le politiche relative al ciclo di vita delle istanze non possono impedire le interruzioni delle istanze Spot.

Per ulteriori informazioni sulla gestione delle interruzioni delle istanze Spot, consulta le interruzioni delle istanze Spot e le migliori pratiche per Amazon EC2 Spot nella Amazon EC2 User Guide.

Le terminazioni dirette di Amazon EC2 ignorano tutte le protezioni

Se interrompi un'istanza nel tuo gruppo Auto Scaling direttamente con l'API Amazon TerminateInstancesEC2, la terminazione ignora tutti i meccanismi di protezione di Amazon EC2 Auto Scaling.

Per terminare le istanze nel tuo gruppo Auto Scaling rispettando le protezioni configurate, utilizza invece l'API. TerminateInstanceInAutoScalingGroup

Scenari di esempio

Quando utilizzi Amazon EC2 Auto Scaling, puoi scegliere la quantità di gestione del parco veicoli che Auto Scaling gestisce per tuo conto rispetto al controllo diretto che mantieni sulle decisioni di terminazione delle istanze EC2. Più il carico di lavoro è sensibile alle terminazioni delle istanze, maggiore è il controllo che potresti voler mantenere. Gli esempi seguenti descrivono carichi di lavoro con diversi livelli di tolleranza e le configurazioni consigliate:

Esempio 1: nodi di database distribuiti (bassa tolleranza)

Esegui un database distribuito in cui ogni istanza EC2 contiene una partizione dei dati con un fattore di replica pari a 3. La perdita di più istanze che contengono repliche della stessa partizione potrebbe causare la perdita di dati o rendere tale partizione non disponibile.

Sfida: l'Auto Scaling potrebbe terminare le istanze più velocemente di quanto i dati possano essere replicati su altri nodi e le terminazioni potrebbero ridurre la capacità al di sotto di quella necessaria per mantenere il fattore di replica.

Considerate le seguenti configurazioni:

Esempio 2: elaborazione di lavori a lunga durata (tolleranza media)

Hai una coda Amazon SQS che raccoglie i messaggi in arrivo per lavori di lunga durata. Quando arriva un nuovo messaggio, un'istanza EC2 recupera il messaggio e avvia un processo che richiede 3 ore per l'elaborazione. Man mano che la coda cresce, Auto Scaling aggiunge istanze in base alle tue politiche di scalabilità. Man mano che la coda si restringe, Auto Scaling interrompe le istanze.

Sfida: Auto Scaling potrebbe terminare un'istanza dopo 3 ore di elaborazione di un processo anziché un'istanza inattiva. Il processo può essere riavviato su un'altra istanza, ma si perdono progressi significativi.

Considerate le seguenti configurazioni:

Esempio 3: Flotta di lavoratori per ambienti di test (alta tolleranza)

Gestisci una flotta di istanze EC2 che eseguono test automatici, processi di CI/CD pipeline o carichi di lavoro di sviluppo. Queste istanze di lavoro estraggono le attività da una coda e i risultati dei test possono essere rigenerati se un processo fallisce.

Sfida: i processi di test possono essere interrotti durante gli eventi di scalabilità, ma poiché i test possono essere riprovati senza alcun impatto, è preferibile ottimizzare i costi e la semplicità anziché garantire una disponibilità senza interruzioni.

Considerate le seguenti configurazioni: