Scegli la modalità di concorrenza per gli StackSet CloudFormation - AWS CloudFormation

Scegli la modalità di concorrenza per gli StackSet CloudFormation

La modalità di concorrenza è un parametro per StackSetOperationPreferences che consente di scegliere il comportamento del livello di simultaneità durante le operazioni relative a StackSet. Puoi scegliere tra le seguenti modalità:

  • Tolleranza rigorosa ai guasti: questa opzione riduce dinamicamente il livello di simultaneità per garantire che il numero di account non riusciti non superi mai il valore della tolleranza ai guasti +1. La simultaneità effettiva iniziale viene impostata sul valore più basso tra quello degli account simultanei massimi e quello della tolleranza ai guasti +1. La simultaneità effettiva viene quindi ridotta proporzionalmente in base al numero di errori. Questo è il comportamento che segue di default.

  • Tolleranza flessibile ai guasti: questa opzione disaccoppia la tolleranza ai guasti dalla simultaneità effettiva. Ciò consente l’esecuzione delle operazioni di StackSet al livello di concorrenza impostato dal valore numero massimo di account simultanei, indipendentemente dal numero di errori.

La tolleranza rigorosa ai guasti riduce la velocità di implementazione quando si verificano errori nelle operazioni dello StackSet, poiché la concorrenza diminuisce per ogni errore. La tolleranza flessibile ai guasti dà priorità alla velocità di implementazione sfruttando al contempo le funzionalità di sicurezza di CloudFormation. Ciò consente di esaminare e risolvere gli errori comuni operativi nello StackSet, come quelli relativi alle risorse esistenti, alle quote di servizio e alle autorizzazioni.

Per ulteriori informazioni sugli errori nelle operazioni di stack StackSets, consulta la sezione Motivi comuni per operazioni di stack non riuscite.

Per ulteriori informazioni sul numero massimo di account simultanei e sulla tolleranza ai guasti, consulta la sezione Opzioni per le operazioni dello StackSet.

Come funziona ogni modalità di simultaneità

Le immagini seguenti forniscono una rappresentazione visiva del funzionamento di ciascuna modalità di concorrenza durante un’operazione dello StackSet. La stringa di nodi rappresenta una implementazione su Regione AWS singole e ogni nodo è un Account AWS target.

Tolleranza rigorosa ai guasti

Quando un’operazione dello StackSet che utilizza la tolleranza rigorosa ai guasti ha il valore di tolleranza ai guasti impostato su 5 e il valore Numero massimo di account simultanei impostato su 10, la concorrenza effettiva è pari a 6. La simultaneità effettiva è 6 perché il valore di tolleranza ai guasti di 5 +1 è inferiore al valore del numero massimo di account simultanei.

L’immagine seguente mostra l’impatto che il valore di tolleranza ai guasti ha sul valore numero massimo di account simultanei e l’impatto che entrambi hanno sulla concorrenza effettiva dell’operazione dello StackSet:

In’operazione StackSet con tolleranza rigorosa ai guasti. La tolleranza di errore è 5, il numero massimo di account simultanei è 10 e la concorrenza è 6.

Quando inizia l’implementazione e si verificano istanze di stack non riuscite, la simultaneità effettiva si riduce per offrire un’esperienza di implementazione sicura. La simultaneità effettiva si riduce da 6 a 5 quando StackSets non riesce a distribuire 1 istanza di stack.

L’operazione StackSet che utilizza la tolleranza rigorosa ai guasti ha 2 implementazioni riuscite e 1 errore.
L’operazione StackSet che utilizza la tolleranza rigorosa ai guasti ha ridotto la concorrenza effettiva a 5 ora che si è verificato un errore.

La modalità di tolleranza rigorosa ai guasti riduce la simultaneità effettiva proporzionalmente al numero di istanze di stack non riuscite. Nell’esempio seguente, la simultaneità effettiva si riduce da 5 a 3 quando StackSets non riesce a implementare altre 2 istanze di stack, portando il totale delle istanze di stack non riuscite a 3.

L’operazione StackSet che utilizza la tolleranza rigorosa ai guasti adesso ha 3 implementazioni non riuscite. La concorrenza è stata ridotta a 3.

StackSets non riesce a eseguire l’operazione dello stesso quando il numero di istanze di stack non riuscite equivale al valore di tolleranza ai guasti definito +1. Nell’esempio seguente, StackSets non riesce a eseguire l’operazione quando ci sono 6 istanze di stack non riuscite e il valore di tolleranza ai guasti è pari a 5.

L’operazione StackSet che utilizza la tolleranza rigorosa ai guasti presenta ora 6 implementazioni non riuscite. L’operazione dello StackSet non riesce.

In questo esempio, CloudFormation ha implementato 9 istanze di stack (3 riuscite e 6 non riuscite) prima di interrompere l’operazione dello StackSet.

Tolleranza flessibile ai guasti

Quando un’operazione dello StackSet che utilizza la tolleranza flessibile ai guasti ha il valore di tolleranza ai guasti impostato su 5 e il valore numero massimo di account simultanei impostato su 10, la simultaneità effettiva è pari a 10.

Un’operazione dello StackSet con tolleranza flessibile ai guasti. Il massimo della tolleranza di errore è di 5 account simultanei e la concorrenza attuale è 10.

Quando inizia l’implementazione e si verificano istanze di stack non riuscite, la simultaneità effettiva non cambia. Nell’esempio seguente, 1 operazione di stack non è riuscita, ma la simultaneità effettiva rimane a 10.

L’operazione dello StackSet con tolleranza flessibile ai guasti rileva il primo errore. La concorrenza effettiva rimane pari a 10.

La simultaneità effettiva rimane pari a 10 anche dopo altri 2 errori dell’istanza di stack.

L’operazione dello StackSet con tolleranza flessibile ai guasti presenta ora 2 successi e 3 errori, ma la concorrenza effettiva è ancora 10.

StackSets non riesce a eseguire l’operazione di StackSet quando le istanze di stack non riuscite superano il valore di tolleranza ai guasti. Nell’esempio seguente, StackSets non riesce a eseguire l’operazione quando ci sono 6 istanze di stack non riuscite e il conteggio di tolleranza ai guasti è pari a 5. Tuttavia, l’operazione non terminerà fino alla fine delle operazioni rimanenti nella coda di simultaneità.

L’operazione dello StackSet con tolleranza flessibile ai guasti raggiunge i 6 errori, ma deve completare ciò che rimane nella coda di concorrenza.

StackSets continua a distribuire istanze di stack già presenti nella coda di simultaneità. Ciò significa che il numero delle istanze di stack non riuscite può essere superiore alla tolleranza ai guasti. Nell’esempio seguente, ci sono 8 istanze di stack non riuscite perché la coda di simultaneità aveva ancora 7 operazioni da eseguire, anche se l’operazione dello StackSet aveva raggiunto la tolleranza ai guasti pari a 5.

L’operazione dello StackSet ha un totale di 8 errori perché erano rimaste 7 implementazioni in coda dopo aver raggiunto la soglia di errore.

In questo esempio, StackSets ha distribuito 15 istanze di stack (7 riuscite e 8 non riuscite) prima di interrompere l’operazione dello stack.

Scelta tra Tolleranza rigorosa ai guasti e Tolleranza flessibile ai guasti in base alla velocità di implementazione

La scelta tra la modalità di Tolleranza rigorosa ai guasti e quella di Tolleranza flessibile ai guasti dipende dalla velocità di implementazione dello StackSet preferita e dal numero di errori di implementazione consentito.

Le tabelle seguenti mostrano come ciascuna modalità di simultaneità gestisce un’operazione dello StackSet che non riesce durante il tentativo di implementare 1.000 istanze di stack in totale. In ogni scenario, il valore di tolleranza ai guasti è impostato su 100 istanze di stack e il valore numero massimo di account simultanei è impostato su 250 istanze di stack.

Sebbene StackSets in realtà metta in coda gli account come una finestra scorrevole (come illustrato in Come funziona ogni modalità di simultaneità), questo esempio mostra l’operazione in batch per dimostrare la velocità di ciascuna modalità.

Tolleranza rigorosa ai guasti

Questo esempio, che utilizza la modalità di tolleranza rigorosa ai guasti, riduce la simultaneità effettiva rispetto al numero di errori che si verificano in ogni batch precedente. Ogni batch ha 20 istanze non riuscite, il che riduce quindi la simultaneità effettiva del batch successivo di 20 fino a quando l’operazione dello StackSet raggiunge un valore di tolleranza ai guasti pari a 100.

Nella tabella seguente, la simultaneità effettiva iniziale del primo batch è pari a 101 istanze di stack. La simultaneità effettiva è 101 perché è il valore più basso tra quello del numero massimo di account simultanei (250) e quello della tolleranza ai guasti (100) +1. Ogni batch contiene 20 distribuzioni di istanze di stack non riuscite, il che riduce quindi la simultaneità effettiva di ogni batch successivo di 20 istanze di stack.

Tolleranza rigorosa ai guasti Batch 1 Batch 2 Batch 3 Batch 4 Batch 5 Batch 6
Conteggio effettivo della simultaneità 101 81 61 41 21 -
Numero di istanze non riuscite 20 20 20 20 20 -
Numero di istanze di stack riuscite 81 61 41 21 1 -

L’operazione che utilizza la tolleranza rigorosa ai guasti ha completato 305 implementazioni di istanze di stack in 5 batch quando l’operazione dello StackSet ha raggiunto la tolleranza ai guasti di 100 istanze di stack. L’operazione dello StackSet implementa correttamente 205 istanze di stack prima che si verifichi un errore.

Tolleranza flessibile ai guasti

Questo esempio, che utilizza la modalità di tolleranza flessibile ai guasti, mantiene lo stesso conteggio effettivo di simultaneità definito dal valore numero massimo di account simultanei di 250 istanze di stack, indipendentemente dal numero di istanze non riuscite. Le operazioni dello StackSet mantengono la stessa simultaneità effettiva fino a raggiungere il valore di tolleranza ai guasti di 100 istanze.

Nella tabella seguente, la simultaneità effettiva iniziale del primo batch è pari a 250 istanze di stack. La simultaneità effettiva è 250 perché il numero massimo di account simultanei è impostato su 250 e la modalità di tolleranza flessibile ai guasti consente a StackSets di utilizzare questo valore come simultaneità effettiva, indipendentemente dal numero di errori. Anche se in questo esempio sono presenti 50 errori in ciascuno dei batch, la simultaneità effettiva rimane inalterata.

Tolleranza flessibile ai guasti Batch 1 Batch 2 Batch 3 Batch 4 Batch 5 Batch 6
Conteggio effettivo della simultaneità 250 250 - - - -
Numero di istanze non riuscite 50 50 - - - -
Numero di istanze di stack riuscite 200 200 - - - -

Utilizzando lo stesso valore numero massimo di account simultanei e tolleranza ai guasti, l’operazione che utilizza la modalità di tolleranza flessibile ai guasti ha completato 500 implementazioni di istanze di stack in 2 batch. L’operazione dello StackSet implementa correttamente 400 istanze di stack prima che si verifichi un errore.

Scelta della modalità di concorrenza (console)

Quando si crea o si aggiorna uno StackSet, nella pagina Set deployment options, per la modalità concorrenza, seleziona Tolleranza rigorosa ai guasti o Tolleranza flessibile ai guasti.

Scelta della modalità di concorrenza (AWS CLI)

Puoi utilizzare il parametro ConcurrencyMode con i comandi StackSets seguenti:

Questi comandi hanno un parametro esistente chiamato --operation-preferences che può utilizzare l’impostazione ConcurrencyMode. ConcurrencyMode può essere impostata su uno dei seguenti valori:

  • STRICT_FAILURE_TOLERANCE

  • SOFT_FAILURE_TOLERANCE

L’esempio seguente crea un’istanza stack utilizzando la ConcurrencyMode STRICT_FAILURE_TOLERANCE, con un FailureToleranceCount impostato su 10 e un MaxConcurrentCount impostato su 5.

aws cloudformation create-stack-instances \ --stack-set-name example-stackset \ --accounts 123456789012 \ --regions eu-west-1 \ --operation-preferences ConcurrencyMode=STRICT_FAILURE_TOLERANCE,FailureToleranceCount=10,MaxConcurrentCount=5
Nota

Per procedure dettagliate per la creazione e l’aggiornamento di uno StackSet, vedere i seguenti argomenti: