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 terminazione delle istanze
Questo argomento descrive le funzionalità che puoi utilizzare per impedire al tuo gruppo Amazon EC2 Auto Scaling di terminare le istanze Amazon EC2 che non sono ancora pronte per essere terminate. Per impostazione predefinita, Auto Scaling non ha visibilità sulle applicazioni in esecuzione sulle tue istanze. Può terminare le istanze prima che l'applicazione sia in grado di chiudersi o completare correttamente i job assegnati. Queste funzionalità consentono all'applicazione di completare il lavoro in corso, trasferire lo stato o eseguire la pulizia prima della chiusura delle istanze. È possibile utilizzarle singolarmente o in combinazione a seconda dei requisiti dell'applicazione.
Queste funzionalità sono particolarmente utili per i carichi di lavoro con stato, in cui ogni istanza del parco istanze contiene dati, processi o stati diversi rispetto alle altre istanze. La chiusura delle istanze con stato senza un arresto regolare potrebbe comportare il riavvio dall'inizio di processi di lunga durata, una riduzione della ridondanza o della perdita di dati e l'interruzione delle transazioni o dei calcoli in corso. Per chiudere correttamente un'istanza stateful, il relativo carico di lavoro deve essere svuotato (completando tutti i job attualmente assegnati) o trasferito (spostando job, dati o configurazione su un'altra istanza attiva).
Indice
Hook del ciclo di vita di terminazione
Un gancio 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 i progressi e trasferire il lavoro su un'altra istanza.
Per molti carichi di lavoro, una procedura di terminazione del ciclo di vita può essere sufficiente per chiudere correttamente un'applicazione su un'istanza selezionata per la terminazione. Si tratta di un approccio basato sulla massima efficienza e non può essere utilizzato per prevenire la terminazione se un'azione relativa al ciclo di vita di terminazione viene abbandonata. Se il carico di lavoro ha una bassa tolleranza per gli errori delle azioni relative al ciclo di vita delle terminazioni, configura le policy relative al ciclo di vita delle istanze in combinazione con gli hook relativi al ciclo di vita delle terminazioni per conservare le istanze.
Per utilizzare un hook relativo al ciclo di vita delle terminazioni, devi sapere quando un'istanza viene 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 o AWS Lambda per catturare questi eventi e richiamare una risposta, ad esempio con una funzione Lambda. | Applicazioni che devono agire al di fuori dell'istanza. | Configurare un target 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 una chiamata CompleteLifecycleAction API o non è trascorso il timeout, a seconda di quale evento 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 del ciclo di vita, puoi estendere 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, è normale 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 scale-in a livello di gruppo Auto Scaling e a livello di istanza. Quando abiliti la protezione scale-in a livello di gruppo Auto Scaling, solo le nuove istanze sono protette quando vengono create. 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 eseguire chiamate in batch ed evitare problemi di limitazione delle API. SetInstanceProtection
Per ulteriori informazioni, consulta Usa la protezione scalabile delle istanze per controllare la terminazione delle istanze.
Policy di terminazione personalizzata
Analogamente alla protezione scale-in delle istanze, una policy di terminazione personalizzata consente di impedire al gruppo Amazon EC2 Auto Scaling di terminare istanze EC2 specifiche. Le istanze non integre possono comunque essere terminate 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 sulle istanze che 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 ha un errore, 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 terminare. 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 sul ciclo di vita delle istanze
Le policy sul 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 del ciclo di vita delle istanze, le policy sul ciclo di vita delle istanze sono progettate per garantire che le istanze passino a uno stato mantenuto quando le normali procedure di spegnimento non vengono completate correttamente.
Quando Auto Scaling seleziona un'istanza per la terminazione, vengono richiamati gli hook del ciclo di vita delle terminazioni configurati e l'applicazione avvia procedure di arresto 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, pertanto le istanze sostitutive vengono avviate automaticamente. Dovrai sostenere i costi standard di Amazon EC2 sia per l'istanza conservata che per la sua sostituzione fino a quando non terminerai manualmente l'istanza conservata utilizzando l'API. TerminateInstanceInAutoScalingGroup
Per utilizzare questa funzionalità, devi configurare sia una policy sul 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. È necessario abilitare CloudWatch metriche come GroupTerminatingRetainedInstances la creazione di CloudWatch allarmi per avvisare l'utente quando le istanze entrano in stati mantenuti.
Per ulteriori informazioni, consulta Controlla la conservazione delle istanze con le policy relative al ciclo di vita delle istanze.
Sospendi completamente 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 SuspendProcesses per sospendere il Terminate processo, impedisci ad Auto Scaling di tentare le interruzioni per qualsiasi motivo, ad eccezione di quelle avviate 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 presente le seguenti limitazioni.
Le istanze non integre aggirano alcune protezioni
Se un'istanza non è integra, Amazon EC2 Auto Scaling inizierà a terminarla anche se sono state adottate politiche di terminazione personalizzate o una protezione scalabile. L'unico modo per impedire la sostituzione di istanze non integre con Auto Scaling è sospendere il processo,, o. HealthCheck ReplaceUnhealthy Terminate Puoi utilizzare gli hook del ciclo di vita e una policy sul ciclo di vita dell'istanza per consentire all'applicazione di chiudersi correttamente o copiare i dati da ripristinare prima che l'istanza non integra venga chiusa.
| Funzionalità | Controlla le istanze integre | Controlla le istanze non integre |
|---|---|---|
| Politiche di terminazione personalizzate | ||
| Scale-in protezione | ||
Sospendi HealthCheck o ReplaceUnhealthy processa Terminate |
||
| Hook del ciclo di vita | ||
| Politica sul ciclo di vita delle istanze |
Gli hook del ciclo di vita da soli non garantiscono uno spegnimento regolare
Per impostazione predefinita, i termination lifecycle hook funzionano nel migliore dei modi. Se un'azione del ciclo di vita di terminazione viene abbandonata, Amazon EC2 Auto Scaling procede con la chiusura immediata dell'istanza. Puoi combinare gli hook del ciclo di vita di terminazione con una policy sul ciclo di vita delle istanze per conservare le istanze quando le azioni del ciclo di vita di terminazione vengono abbandonate. Con questa combinazione:
-
Gli hook del ciclo di vita delle terminazioni tentano di chiudere correttamente l'applicazione dopo che Auto Scaling ha attivato la terminazione di un'istanza e il drenaggio da qualsiasi sistema di bilanciamento del carico Elastic Load Balancing configurato è completo.
-
Se un'azione del ciclo di vita di terminazione viene abbandonata per qualsiasi motivo, l'istanza passa a uno stato mantenuto invece di essere terminata.
-
L'istanza conservata rimane nello stato attuale di Amazon EC2, consentendoti di completare manualmente le procedure di spegnimento o indagare sull'errore.
-
Puoi terminare manualmente le istanze conservate chiamando l' TerminateInstanceInAutoScalingGroupAPI dopo aver completato le azioni necessarie.
Per ulteriori informazioni, consulta Controlla la conservazione delle istanze con le policy relative al ciclo di vita delle istanze.
Alcune opzioni di mercato possono essere interrotte con un preavviso limitato
Se utilizzi opzioni di mercato delle istanze come le istanze Spot e le 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 circa due minuti per eseguire correttamente le attività di spegnimento. Sebbene tu possa utilizzare gli hook del ciclo di vita di terminazione per rispondere alle interruzioni dell'istanza Spot, l'istanza verrà chiusa forzatamente alla fine del periodo di due minuti, anche se il blocco del ciclo di vita è ancora in corso. Inoltre, le policy 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 best practice per Amazon EC2 Spot nella Amazon EC2 User Guide.
Le terminazioni dirette di Amazon EC2 aggirano tutte le protezioni
Se si termina un'istanza nel gruppo Auto Scaling direttamente con l' TerminateInstancesAPI Amazon EC2, la terminazione bypassa 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 usi Amazon EC2 Auto Scaling, puoi scegliere la quantità di gestione del parco veicoli che Auto Scaling gestisce per tuo conto rispetto alla quantità di controllo diretto che mantieni sulle decisioni di cessazione delle istanze EC2. Più il tuo carico di lavoro è sensibile alle terminazioni delle istanze, maggiore è il controllo che vorrai mantenere. Gli esempi seguenti descrivono i carichi di lavoro con diversi livelli di tolleranza e le configurazioni consigliate:
Esempio 1: nodi di database distribuiti (bassa tolleranza)
Si esegue 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 la partizione non disponibile.
Sfida: Auto Scaling potrebbe terminare le istanze più velocemente di quanto i dati possano essere replicati nuovamente su altri nodi e le terminazioni potrebbero ridurre la capacità al di sotto di quanto necessario per mantenere il fattore di replica.
Considerate le seguenti configurazioni:
-
Abilita la protezione scalabile delle istanze su tutte le istanze del database; rimuovila a livello di codice solo dopo aver verificato che i dati siano replicati in modo sicuro altrove.
-
Configura i termination lifecycle hook con timeout prolungati in combinazione con una policy sul ciclo di vita delle istanze per consentire il completamento del trasferimento dei dati.
-
Imposta una politica di manutenzione delle istanze con una percentuale minima di integrità del 100% per mantenere la capacità richiesta.
Esempio 2: elaborazione del Long-running lavoro (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 riduce, Auto Scaling termina le istanze.
Sfida: Auto Scaling potrebbe interrompere un'istanza dopo 3 ore dall'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:
-
Configura una politica di terminazione personalizzata che dia priorità alla cessazione delle istanze inattive per prime.
-
Utilizza gli hook relativi al ciclo di vita delle terminazioni per consentire il completamento dei lavori in corso.
-
Abilita la protezione scalabile delle istanze a livello di codice quando un'istanza avvia un processo e rimuovila quando il processo viene completato.
Esempio 3: flotta di lavoratori per ambienti di test (tolleranza elevata)
Esegui una flotta di istanze EC2 che eseguono test automatici, job 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 lavori di test possono essere interrotti durante gli eventi di scale-in, ma poiché i test possono essere ritentati senza alcun impatto, è necessario ottimizzare i costi e la semplicità piuttosto che la disponibilità senza interruzioni.
Considerate le seguenti configurazioni:
-
Utilizza gli hook relativi al ciclo di vita delle terminazioni per consentire il completamento delle richieste in corso.
-
Prendi in considerazione l'utilizzo delle istanze Spot con una strategia di allocazione ottimizzata in termini di capacità per ridurre ulteriormente i costi.