Rollback di un aggiornamento
A volte, quando CloudFormation cerca di eseguire il rollback dell’aggiornamento di uno stack, non può ripristinare tutte le modifiche effettuate durante il processo di aggiornamento. Questa operazione è chiamata stato UPDATE_ROLLBACK_FAILED. Ad esempio, è possibile disporre di uno stack che inizia a eseguire il rollback a una vecchia istanza database che è stata eliminata al di fuori di CloudFormation. Poiché CloudFormation non sa che il database è stato eliminato, presume che l'istanza database sia ancora disponibile e tenta di eseguire il rollback, provocando un errore nel rollback di aggiornamento.
Uno stack con lo stato UPDATE_ROLLBACK_FAILED non può essere aggiornato, ma è possibile eseguire il rollback a uno stato di funzionamento (UPDATE_ROLLBACK_COMPLETE). Dopo aver ripristinato le impostazioni originali dello stack, puoi provare nuovamente ad aggiornarlo.
Nella maggior parte dei casi, devi correggere l'errore che causa un guasto durante l'aggiornamento del rollback prima di poter continuare a eseguire il rollback dello stack. In altri casi, puoi continuare a eseguire il rollback dell'aggiornamento senza alcuna modifica, ad esempio quando un'operazione stack scade.
Nota
Se utilizzi gli stack nidificati, il rollback dello stack padre cercherà di eseguire il rollback anche su tutti gli stack figlio.
Per continuare il rollback di un aggiornamento (console)
Accedere alla Console di gestione AWS e aprire la console di CloudFormation all'indirizzo https://console.aws.amazon.com/cloudformation
. -
All’interno della barra di navigazione nella parte superiore dello schermo, seleziona la Regione AWS in cui si trova lo stack.
-
Nella pagina Stack, seleziona lo stack che desideri aggiornare, scegli Operazioni stack, poi scegli Continua il ripristino dello stato precedente l’aggiornamento.
Se nessuna delle soluzioni in Risoluzione degli errori ha funzionato, puoi utilizzare l’opzione avanzata per ignorare le risorse sulle quali CloudFormation non è in grado di eseguire il rollback correttamente. Devi ricercare e digitare gli ID logici delle risorse che desideri ignorare. Specifica solo le risorse con stato
UPDATE_FAILEDduranteUpdateRollbacke non durante l’aggiornamento successivo.avvertimento
CloudFormation imposta lo stato delle risorse specificate su
UPDATE_COMPLETEe continua a eseguire il rollback dello stack. Dopo aver completato il rollback, lo stato delle risorse saltate saranno incoerenti con lo stato delle risorse nel modello di stack. Prima di eseguire un altro aggiornamento dello stack, devi aggiornare lo stack o le risorse in modo che siano coerenti. Altrimenti, i successivi aggiornamenti dello stack potrebbero fallire e lo stack diventerà irrecuperabile.Specifica il numero minimo di risorse necessarie per eseguire il rollback dello stack. Ad esempio, un aggiornamento della risorsa non riuscito potrebbe causare errori nelle risorse dipendenti. In questo caso, potrebbe non essere necessario ignorare le risorse dipendenti.
Per ignorare le risorse che fanno parte di stack nidificati, utilizzare il formato seguente:
. Se desideri specificare l'ID logico di una risorsa stack (NestedStackName.ResourceLogicalIDType: AWS::CloudFormation::Stack) nell'elencoResourcesToSkip, lo stack corrispondente incorporato deve essere in uno dei seguenti stati:DELETE_IN_PROGRESSDELETE_COMPLETEoDELETE_FAILED.
Per continuare il rollback di un aggiornamento (AWS CLI)
-
Usa il comando continue-update-rollback con l’opzione
--stack-nameper specificare l’ID dello stack sul quale desideri continuare a eseguire il rollback.
Continuare il rollback da aggiornamenti non riusciti di stack nidificati
Quando disponi di più stack nidificati l’uno all’interno dell’altro, potresti dover ignorare risorse in più livelli nidificati per far tornare l’intera gerarchia dello stack a uno stato di funzionamento.
Ad esempio, disponi di uno stack root chiamato WebInfra che contiene all’interno due stack più piccoli, WebInfra-Compute e WebInfra-Storage. Anche questi due stack hanno altri stack nidificati al loro interno.
Se si verifica un errore durante un aggiornamento e il relativo processo non va a buon fine, l’intera gerarchia dello stack potrebbe entrare nello stato UPDATE_ROLLBACK_FAILED, come illustrato nel seguente diagramma.
Nota
I nomi di stack in questo esempio vengono troncati per semplicità. I nomi di stack figlio sono in genere generati da CloudFormation e contengono stringhe casuali univoche, perciò i nomi effettivi potrebbero non essere intuitivi.
Per fare in modo che lo stack root torni in uno stato di funzionamento con il comando continue-update-rollback, devi utilizzare l’opzione --resources-to-skip per ignorare le risorse per le quali il rollback non è riuscito.
L’esempio continue-update-rollback seguente riprende un’operazione di rollback da un aggiornamento dello stack precedentemente non riuscito. In questo esempio, l’opzione --resources-to-skip include i seguenti elementi:
-
myCustom -
WebInfra-Compute-Asg.myAsg -
WebInfra-Compute-LB.myLoadBalancer -
WebInfra-Storage.DB
Per le risorse dello stack root, devi fornire solamente l’ID logico, ad esempio . Tuttavia, per le risorse contenute negli stack nidificati, devi fornire sia il nome che l’ID logico dello stack nidificato, separati da un punto. Ad esempio, myCustom.WebInfra-Compute-Asg.myAsg
aws cloudformation continue-update-rollback --stack-nameWebInfra\ --resources-to-skipmyCustom WebInfra-Compute-Asg.myAsg WebInfra-Compute-LB.myLoadBalancer WebInfra-Storage.DB
Per trovare il nome dello stack di uno stack nidificato
Puoi trovarlo all’interno dell’ID stack o nel nome della risorsa Amazon (ARN) dello stack figlio.
Il seguente ARN di esempio fa riferimento a uno stack chiamato WebInfra-Storage-Z2VKC706XKXT.
arn:aws:cloudformation:us-east-1:123456789012:stack/WebInfra-Storage-Z2VKC706XKXT/ea9e7f90-54f7-11e6-a032-028f3d2330bd
Per trovare l’ID logico di uno stack nidificato
Puoi trovare l'ID logico dello stack figlio nella definizione del modello del padre. Nel diagramma, il LogicalId dello stack figlio WebInfra-Storage-DB è DB nel padre WebInfra-Storage.
Nella console CloudFormation, è possibile anche trovare l'ID logico nella colonna Logical ID (ID logico) per la risorsa stack nella scheda Resources (Risorse) o Events (Eventi). Per ulteriori informazioni, consulta Visualizza le informazioni sullo stack dalla console CloudFormation.