Progetta le tue applicazioni su Dimensionamento automatico Amazon EC2 per gestire senza problemi la terminazione delle istanze - Dimensionamento automatico Amazon EC2

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 su Dimensionamento automatico Amazon EC2 per gestire senza problemi la terminazione delle istanze

Questo argomento illustra i diversi approcci che puoi adottare se hai applicazioni in esecuzione su istanze che normalmente non dovrebbero terminare inaspettatamente quando Dimensionamento automatico Amazon EC2 risponde a un evento di dimensionamento.

Ad esempio, supponiamo di avere una coda Amazon SQS 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, il Dimensionamento automatico Amazon EC2 deve decidere quale istanza terminare. Per impostazione predefinita, è possibile che Dimensionamento automatico Amazon EC2 interrompa un'istanza dopo 2,9 ore di elaborazione di un processo di 3 ore, anziché un'istanza attualmente inattiva. Per evitare problemi di terminazioni impreviste quando si utilizza Dimensionamento automatico Amazon EC2, è necessario progettare l'applicazione in modo da rispondere a questo scenario.

È possibile utilizzare le seguenti funzionalità per impedire al gruppo con dimensionamento automatico di terminare le istanze che non sono ancora pronte per la chiusura o di terminare le istanze troppo rapidamente perché possano completare i lavori assegnati. Tutte e tre queste funzionalità possono essere utilizzate in combinazione o separatamente.

Importante

Quando progetti le tue applicazioni su Dimensionamento automatico Amazon EC2 per gestire senza problemi la terminazione delle istanze, tieni presente i seguenti punti.

  • Se un'istanza non è integra, Dimensionamento automatico Amazon EC2 la sostituirà indipendentemente dalla funzionalità utilizzata (a meno che non sospenda il processo ReplaceUnhealthy). 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, il Dimensionamento automatico Amazon EC2 termina 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 sviluppato integrazioni con protezione di dimensionamento delle 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 Utilizzare la protezione di riduzione orizzontale 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. Dimensionamento automatico Amazon EC2 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, Dimensionamento automatico Amazon EC2 non termina 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 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. 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 SQS o Amazon 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à ad Amazon EC2 di terminare l'istanza finché non riceve CompleteLifecycleuna chiamata Action 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 un'azione del ciclo di vita è effettivamente in corso, puoi prolungare il timeout con chiamate API. RecordLifecycleActionHeartbeat

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