View a markdown version of this page

In che modo l’interruttore di implementazione Amazon ECS rileva i guasti - Amazon Elastic Container Service

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

In che modo l’interruttore di implementazione Amazon ECS rileva i guasti

L'interruttore di implementazione è il meccanismo di aggiornamento in sequenza che determina se le attività raggiungono uno stato stazionario. L'interruttore di implementazione dispone di un'opzione che consente di eseguire automaticamente il rollback di un'implementazione con esito negativo a un'implementazione nello stato COMPLETED. È possibile personalizzare il modo in cui l'interruttore conta i guasti e la soglia di attivazione, in modo che il comportamento di rollback corrisponda alle caratteristiche di avvio dell'applicazione e alla tolleranza per gli errori delle attività.

Quando la distribuzione di un servizio cambia stato, Amazon ECS invia un evento di modifica dello stato di distribuzione del servizio a EventBridge. Ciò fornisce un modo programmatico per monitorare lo stato delle implementazioni dei servizi. Per ulteriori informazioni, consulta Eventi di modifica dello stato di implementazione del servizio Amazon ECS. Ti consigliamo di creare e monitorare una EventBridge regola con un eventName of SERVICE_DEPLOYMENT_FAILED in modo da poter intraprendere azioni manuali per avviare la distribuzione. Per ulteriori informazioni, consulta la sezione Guida introduttiva EventBridge alla Amazon EventBridge User Guide.

Quando l'interruttore di implementazione determina il fallimento di un'implementazione, cerca quella più recente con lo stato COMPLETED. Si tratta dell'implementazione che viene utilizzata come implementazione di rollback. Quando inizia il rollback, l'implementazione cambia da COMPLETED a IN_PROGRESS. Ciò significa che l'implementazione non è idonea per un altro rollback fino a quando non raggiunge uno stato COMPLETED. Quando l'interruttore di implementazione non rileva un'implementazione nello stato COMPLETED, non avvia nuove attività e l'implementazione si blocca.

Quando si crea un servizio, il pianificatore tiene traccia delle attività che non sono state avviate in due fasi.

  • Fase 1: il pianificatore monitora le attività per vedere se passano allo stato RUNNING.

    • Operazione riuscita: l'implementazione ha la possibilità di passare allo stato COMPLETED perché più di un'attività è passata allo stato RUNNING. Il criterio di errore viene ignorato e l'interruttore passa alla fase 2.

    • Fallimento: per impostazione predefinita, le attività consecutive che non passano allo stato RUNNING vengono conteggiate ai fini della soglia di errore (resetOnHealthyTaskitrue). In caso resetOnHealthyTask false affermativo, tutti gli errori delle attività si accumulano indipendentemente dal fatto che le attività sane inizino tra un errore e l'altro.

  • Fase 2: l'implementazione entra in questa fase quando è presente almeno un'attività nello stato RUNNING. L'interruttore automatico verifica i controlli dello stato delle attività nell'implementazione attuale in fase di valutazione. I controlli di integrità convalidati sono Elastic Load Balancing AWS Cloud Map , controlli dello stato del servizio e controlli dello stato dei container.

    • Operazione riuscita: almeno un'attività è in corso e i controlli dell'integrità sono stati superati.

    • Operazione non riuscita: le attività sostituite a causa di errori nei controlli dell'integrità hanno raggiunto la soglia di errore.

Considera quanto segue quando utilizzi il metodo dell'interruttore automatico di distribuzione su un servizio. EventBridge genera la regola.

  • La risposta DescribeServices fornisce informazioni sullo stato di un'implementazione, rolloutState e rolloutStateReason. Quando viene avviata una nuova implementazione, lo stato di implementazione inizia in IN_PROGRESS. Quando il servizio raggiunge uno stato stazionario, lo stato di implementazione passa a COMPLETED. Se il servizio non riesce a raggiungere uno stato stazionario e l'interruttore automatico è abilitato, l'implementazione passerà a uno stato FAILED. Una implementazione in uno stato FAILED non avvierà nuove attività.

  • Oltre agli eventi di modifica dello stato dell'implementazione del servizio che Amazon ECS invia per le implementazioni che sono state avviate e completate, Amazon ECS invia anche un evento quando un'implementazione con l'interruttore automatico attivato non riesce. Questi eventi forniscono dettagli sul motivo per cui un'implementazione non è riuscita o se un'implementazione è stata avviata a causa di un ripristino dello stato precedente. Per ulteriori informazioni, consultare Eventi di modifica dello stato di implementazione del servizio Amazon ECS.

  • Se viene avviata una nuova implementazione perché un'implementazione precedente non è riuscita e si è verificato il ripristino dello stato precedente, il campo reason dell'evento di modifica dello stato di implementazione del servizio indicherà che l'implementazione è stata avviata a causa di un ripristino dello stato precedente.

  • L'interruttore automatico di implementazione è supportato solo per i servizi Amazon ECS che utilizzano il controller di implementazione (ECS) dell'aggiornamento in sequenza.

  • È necessario utilizzare la console Amazon ECS o, AWS CLI quando si utilizza, l'interruttore automatico di distribuzione con l' CloudWatch opzione. Per ulteriori informazioni, consultare Creazione di un servizio utilizzando parametri definiti e create-service in Informazioni di riferimento sull'AWS Command Line Interface .

L'create-service AWS CLI esempio seguente mostra come creare un servizio Linux quando l'interruttore di distribuzione viene utilizzato con l'opzione rollback.

aws ecs create-service \ --service-name MyService \ --deployment-controller type=ECS \ --desired-count 3 \ --deployment-configuration "deploymentCircuitBreaker={enable=true,rollback=true}" \ --task-definition sample-fargate:1 \ --launch-type FARGATE \ --platform-family LINUX \ --platform-version 1.4.0 \ --network-configuration "awsvpcConfiguration={subnets=[subnet-12344321],securityGroups=[sg-12344321],assignPublicIp=ENABLED}"

L'create-service AWS CLI esempio seguente mostra come creare un servizio con una configurazione di interruttore automatico di distribuzione personalizzata che utilizza un numero fisso di guasti pari a 5 e il monitoraggio cumulativo degli errori.

aws ecs create-service \ --service-name MyService \ --deployment-controller type=ECS \ --desired-count 10 \ --deployment-configuration "deploymentCircuitBreaker={enable=true,rollback=true,resetOnHealthyTask=false,thresholdConfiguration={type=COUNT,value=5}}" \ --task-definition sample-fargate:1 \ --launch-type FARGATE \ --platform-family LINUX \ --platform-version 1.4.0 \ --network-configuration "awsvpcConfiguration={subnets=[subnet-12344321],securityGroups=[sg-12344321],assignPublicIp=ENABLED}"

Esempio:

L'implementazione 1 è in uno stato COMPLETED.

L'implementazione 2 non può essere avviata, quindi l'interruttore esegue il rollback all'implementazione 1. L'implementazione 1 passa allo stato IN_PROGRESS.

L'implementazione 3 viene avviata e non è presente alcuna implementazione nello stato COMPLETED, quindi l'implementazione non è in grado di eseguire il rollback o avviare attività.

Soglia di errore

L'interruttore automatico di distribuzione utilizza una soglia di errore per determinare quando spostare la distribuzione in uno stato. FAILED È possibile configurare sia il modo in cui vengono contati gli errori sia il valore di soglia stesso.

Modalità di conteggio degli errori

L'resetOnHealthyTaskimpostazione controlla il modo in cui l'interruttore automatico conta gli errori delle attività durante un'implementazione.

true (predefinito)

Il conteggio degli errori viene ripristinato a 0 ogni volta che un'attività raggiunge uno stato integro. Solo gli errori consecutivi vengono conteggiati ai fini della soglia. Questa modalità è utile per le applicazioni che potrebbero riscontrare errori di avvio intermittenti prima della stabilizzazione.

false

Gli errori delle attività si accumulano durante tutta la distribuzione. Il conteggio degli errori non viene mai azzerato, anche quando le attività sane iniziano tra un fallimento e l'altro. Questa modalità consente un rilevamento più rapido quando qualsiasi modello di errore indica un'implementazione problematica.

Configurazione della soglia

L'thresholdConfigurationimpostazione definisce quando l'interruttore si attiva. Contiene una type che determina come viene calcolata la soglia e una value che specifica la percentuale o il conteggio da utilizzare.

BOUNDED_PERCENT (predefinito)

Amazon ECS si moltiplica value per il numero di servizi desiderati più recente per calcolare la soglia di errore. Il risultato è limitato a un minimo di 3 e un massimo di 200. Questo è il tipo predefinito con un valore predefinito di 50.

UNBOUNDED_PERCENT

Amazon ECS si moltiplica value per il numero di servizi desiderati più recente per calcolare la soglia di errore. Non esiste un limite minimo o massimo per il risultato. Utilizzate questo tipo per servizi con un numero elevato di numeri desiderati che richiedono una soglia proporzionale senza il limite di 200.

COUNT

Amazon ECS utilizza value direttamente come soglia di errore. La soglia rimane fissa indipendentemente dal numero di servizi desiderati. Utilizzate questo tipo quando desiderate un numero esatto di errori tollerati, ad esempio una soglia inferiore per un rollback più rapido negli ambienti di sviluppo.

Per i tipi di percentuale (BOUNDED_PERCENTandUNBOUNDED_PERCENT), l'intervallo valido per value è compreso tra 1 e 100. Durante una distribuzione, Amazon ECS utilizza continuamente il conteggio desiderato del servizio più recente nel suo calcolo.

In che modo BOUNDED_PERCENT calcola la soglia

Quando si utilizza il tipo di BOUNDED_PERCENT soglia predefinito, l'interruttore automatico di distribuzione calcola la soglia utilizzando la formula seguente.

Minimum threshold (3) <= (value/100) * desired task count => Maximum threshold (200)

Quando il risultato del calcolo è inferiore a 3, la soglia viene impostata su 3. Quando il risultato è superiore a 200, la soglia è impostata su 200. Altrimenti, la soglia viene impostata sul valore calcolato (arrotondato per eccesso).

La tabella seguente fornisce esempi che utilizzano il valore predefinito di 50.

Conteggio attività desiderato Calcolo Threshold

1

3 <= 0.5 * 1 => 200
3 (il valore calcolato è inferiore al minimo)

25

3 <= 0.5 * 25 => 200
13 (il valore viene arrotondato per eccesso)

400

3 <= 0.5 * 400 => 200
200 (il valore calcolato è superiore al massimo)

800

3 <= 0.5 * 800 => 200
200 (il valore calcolato è superiore al massimo)

ConUNBOUNDED_PERCENT, si applica lo stesso calcolo ma senza i limiti minimo e massimo. Ad esempio, un servizio con un conteggio desiderato di 800 e un valore di 50 avrebbe una soglia di 400.

Esistono due fasi per il controllo dello stato dell'implementazione.

  1. L'interruttore automatico di implementazione monitora i processi che fanno parte dell'implementazione e verifica la presenza di attività con stato RUNNING. Il pianificatore ignora i criteri di errore quando un processo nell'implementazione corrente si trova nello stato RUNNING e procede alla fase successiva. Quando le attività non raggiungono lo RUNNING stato desiderato, l'interruttore automatico di installazione aumenta il numero di guasti di uno. Quando il numero di errori è uguale alla soglia, l'implementazione viene contrassegnata come FAILED.

  2. Questa fase viene inserita in presenza di uno o più processi nello stato RUNNING. L'interruttore automatico di implementazione esegue controlli dell'integrità delle seguenti risorse per i processi nell'implementazione corrente:

    • Load balancer Elastic Load Balancing

    • AWS Cloud Map servizio

    • Controlli dell'integrità dei container di Amazon ECS

    Quando un controllo dell'integrità di un processo HA ESITO NEGATIVO, l'interruttore automatico di implementazione aumenta di uno il numero di errori. Quando il numero di errori è uguale alla soglia, l'implementazione viene contrassegnata come FAILED.

Ad esempio, quando la soglia è 3, l'interruttore si avvia con il numero di errori impostato su 0. Quando un'attività non riesce a raggiungere lo stato RUNNING, l'interruttore automatico di implementazione aumenta di uno il numero di errori. Quando il numero di errori è uguale a 3, l'implementazione viene contrassegnata come FAILED.

Per altri esempi sull'utilizzo dell'opzione di rollback, consulta Annuncio dell'interruttore automatico di implementazione di Amazon ECS.