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:
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.
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.
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.
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.
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.
La simultaneità effettiva rimane pari a 10 anche dopo altri 2 errori dell’istanza di stack.
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à.
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.
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-nameexample-stackset\ --accounts123456789012\ --regionseu-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: