Progetta le tue applicazioni per gestire in modo corretto 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 in modo corretto la chiusura delle istanze

Questo argomento illustra le funzionalità che è possibile utilizzare per impedire al gruppo Auto Scaling di terminare le istanze che non sono ancora pronte per la chiusura o di terminare le istanze troppo rapidamente per consentire loro di completare i lavori assegnati. È possibile utilizzare tutte e tre queste funzionalità in combinazione o separatamente per progettare le applicazioni in modo da gestire correttamente la chiusura delle istanze.

Ad esempio, supponiamo di avere una SQS coda Amazon che raccoglie i messaggi in arrivo per lavori di lunga durata. Quando arriva un nuovo messaggio, un'istanza del gruppo con dimensionamento automatico recupera il messaggio e inizia a elaborarlo. L'elaborazione di ogni messaggio richiede 3 ore. All'aumentare del numero di messaggi, nuove istanze vengono aggiunte automaticamente al gruppo con dimensionamento automatico. Man mano che il numero di messaggi diminuisce, le istanze esistenti vengono automaticamente terminate. In questo caso, Amazon EC2 Auto Scaling deve decidere quale istanza terminare. Per impostazione predefinita, è possibile che Amazon EC2 Auto Scaling interrompa un'istanza dopo 2,9 ore di elaborazione di un processo di 3 ore, anziché un'istanza attualmente inattiva. Per evitare problemi con interruzioni impreviste quando si utilizza Amazon EC2 Auto Scaling, è necessario progettare l'applicazione in modo da rispondere a questo scenario.

Importante

Quando progetti le tue applicazioni su Amazon EC2 Auto Scaling per gestire correttamente la terminazione delle istanze, tieni a mente questi punti.

  • Se un'istanza non è integra, Amazon EC2 Auto Scaling la sostituirà indipendentemente dalla funzionalità utilizzata (a meno che non sospenda ReplaceUnhealthy il processo). Puoi utilizzare un hook del ciclo di vita per consentire all'applicazione di chiudersi correttamente o copiare tutti i dati che devi ripristinare prima che l'istanza venga terminata.

  • Non è garantito che un hook del ciclo di vita di terminazione venga eseguito o terminato prima che un'istanza venga terminata. Se qualcosa non funziona, Amazon EC2 Auto Scaling interrompe comunque l'istanza.

Protezione del dimensionamento verticale dell’istanza

Puoi utilizzare la protezione di dimensionamento dell’istanza in molte situazioni in cui la chiusura delle istanze è un'azione critica che dovrebbe essere negata per impostazione predefinita e consentita esplicitamente solo per istanze specifiche. Ad esempio, quando esegui carichi di lavoro containerizzati, è comune voler proteggere tutte le istanze e rimuovere la protezione solo per le istanze senza attività correnti o pianificate. Servizi come Amazon ECS hanno integrato integrazioni con protezione scalabile in base alle istanze nei loro prodotti.

È possibile abilitare la protezione di dimensionamento al gruppo con dimensionamento automatico per applicare la protezione scalabile alle istanze al momento della creazione e abilitarla per le istanze esistenti. Quando un'istanza non ha più attività da svolgere, può disattivare la protezione. L'istanza può continuare a cercare nuovi lavori e riattivare la protezione quando vengono assegnati nuovi lavori.

Le applicazioni possono impostare la protezione da un piano di controllo centralizzato che controlla se un'istanza è terminabile o meno, oppure dalle istanze stesse. Tuttavia, un'ampia flotta potrebbe incorrere in problemi di limitazione se un gran numero di istanze cambia continuamente la protezione di dimensionamento.

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

Policy di terminazione personalizzata

Come per la protezione del dimensionamento delle istanze, una policy di terminazione personalizzata consente di impedire l'interruzione di istanze specifiche da parte del gruppo con dimensionamento automatico.

Come impostazione predefinita, il gruppo con dimensionamento automatico utilizza una policy di terminazione predefinita per determinare quali istanze terminare per prime. Se desideri un maggiore controllo su quali istanze terminano per prime, puoi implementare una policy di terminazione personalizzata utilizzando una funzione Lambda. Amazon EC2 Auto Scaling chiama la funzione ogni volta che deve decidere quale istanza terminare. Terminerà solo un'istanza restituita dalla funzione. Se la funzione presenta errori, scade o produce un elenco vuoto, Amazon EC2 Auto Scaling non interrompe le istanze.

Una policy di terminazione personalizzata è utile se è noto quando un'istanza è sufficientemente ridondante o sottoutilizzata da poter essere terminata. A tale scopo, è necessario implementare l'applicazione con un piano di controllo che monitori il carico di lavoro in tutto il gruppo. In questo modo, se un'istanza sta ancora elaborando processi, la funzione Lambda sa di non includerla.

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

Hook del ciclo di vita di terminazione

Un hook del ciclo di vita della terminazione prolunga la durata di un'istanza già selezionata per la terminazione. Offre più tempo per completare tutti i messaggi o le richieste attualmente assegnati all'istanza o per salvare lo stato di avanzamento e trasferire il lavoro su un'altra istanza.

Per molti carichi di lavoro, un hook del ciclo di vita 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 in caso di errore.

Per utilizzare un hook del ciclo di vita, è necessario sapere quando un'istanza è selezionata per essere terminata. Puoi saperlo in due modi:

Opzione Descrizione Ideale per Collegamento alla documentazione
All'interno dell'istanza Instance Metadata Service (IMDS) è un endpoint sicuro che puoi controllare 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. Recupero dello 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 o Amazon SQS SNS per acquisire questi eventi e richiamare una risposta, ad esempio con una funzione Lambda. Applicazioni che devono agire al di fuori dell'istanza. Creazione di una destinazione 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 dirà EC2 ad Amazon di chiudere l'istanza finché non riceve una CompleteLifecycleActionchiamata o non scade il timeout, a seconda di quale evento si verifichi 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 un'azione del ciclo di vita è effettivamente in corso, puoi prolungare il timeout con le chiamate. RecordLifecycleActionHeartbeatAPI

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