Scegli in che modo gestire gli errori durante il provisioning delle risorse - AWS CloudFormation

Scegli in che modo gestire gli errori durante il provisioning delle risorse

Se l’operazione dello stack fallisce, non è necessario ripristinare le risorse con provisioning riuscito e ricominciare da capo ogni volta. È invece possibile risolvere i problemi relativi alle risorse con stato CREATE_FAILED o UPDATE_FAILED e quindi riprendere il provisioning dal punto in cui si è verificato il problema.

A tale scopo, è necessario abilitare l’opzione Mantieni le risorse con il provisioning riuscito. Questa opzione è disponibile per tutte le implementazioni di stack e le operazioni di set di modifica.

  • Per la creazione di stack, se scegli l’opzione Mantieni le risorse con il provisioning riuscito, CloudFormation mantiene lo stato delle risorse in cui l’operazione è riuscita, mentre le risorse in cui l’operazione non è riuscita continuano a presentare lo stato di esito negativo fino all’aggiornamento successivo.

  • Durante le operazioni di impostazione di aggiornamento e modifica, l’opzione Mantieni le risorse con il provisioning riuscito mantiene lo stato delle risorse riuscite durante il rollback delle risorse non riuscite all’ultimo stato stabile noto. Le risorse non riuscite presenteranno lo stato UPDATE_FAILED. Le risorse per le quali non è disponibile un ultimo stato stabile noto verranno eliminate in occasione della successiva operazione stack.

Panoramica delle opzioni di errore degli stack

Prima di eseguire un’operazione dalla console CloudFormation, dall’API o da AWS CLI, specifica il comportamento per l’errore delle risorse con provisioning effettuato correttamente. Quindi, procedi con il processo di implementazione delle risorse senza altre modifiche. In caso di guasto operativo, CloudFormation si arresta al primo errore in ogni percorso di provisioning indipendente. CloudFormation identifica le dipendenze tra le risorse per parallelizzare le operazioni di provisioning indipendenti. Quindi procede al provisioning delle risorse su ogni percorso di provisioning indipendente fino a quando non si verifica un errore. Un errore in un percorso non influisce sugli altri percorsi di provisioning. CloudFormation continuerà a eseguire il provisioning delle risorse fino al completamento o all'arresto in caso di guasto diverso.

Risolvi eventuali problemi per continuare il processo di implementazione. CloudFormation esegue gli aggiornamenti necessari prima di riprovare le azioni di provisioning su risorse il cui provisioning ha avuto esito negativo in precedenza. Puoi risolvere i problemi inviando un'operazione Retry (Riprova), Update (Aggiorna) o Rollback. Ad esempio, se stai effettuando il provisioning di un'istanza Amazon EC2 e l'istanza EC2 non riesce durante un'operazione di creazione, potresti voler indagare sull'errore, piuttosto che eseguire immediatamente il rollback della risorsa non riuscita. Puoi rivedere le verifiche dello stato del sistema e dello stato delle istanze, quindi seleziona l'operazione Retry (Riprova) operazione una volta risolti i problemi.

Quando un'operazione di stack ha esito negativo e hai specificato Preserve successfully provisioned resources (Mantieni le risorse con provisioning effettuato correttamente) dal menu Stack failure options (Opzioni di errore dello stack), puoi selezionare le seguenti opzioni.

  • Retry (Riprova): riprova l'operazione di provisioning sulle risorse non riuscite e continua il provisioning del modello fino al completamento dell'operazione di stack o al successivo errore. Seleziona questa opzione se non è stato possibile effettuare il provisioning della risorsa a causa di un problema che non richiede modifiche al modello, ad esempio l'autorizzazione AWS Identity and Access Management (IAM).

  • Update (Aggiorna): le risorse con provisioning effettuato correttamente vengono aggiornate in base agli aggiornamenti dei modelli. Le risorse che non sono state create o aggiornate verranno riprovate. Seleziona questa opzione se il provisioning della risorsa non è riuscito a causa di errori del modello e questo è stato modificato. Quando aggiorni uno stack con stato FAILED, devi selezionare Preserve successfully provisioned resources (Mantieni risorse con provisioning effettuato correttamente) per Stack failure options (Opzioni di errore dello stack) per continuare ad aggiornare lo stack.

  • Roll back (Rollback): CloudFormation esegue il rollback dello stack all'ultimo stato stabile noto.

Condizioni richieste per sospendere il rollback dello stack

Per evitare che CloudFormation esegua automaticamente il rollback e l’eliminazione delle risorse che sono state create correttamente, devono essere soddisfatte le seguenti condizioni.

  1. Quando crei o aggiorni lo stack, devi scegliere l’opzione Mantieni le risorse con il provisioning riuscito. In questo modo, indichi a CloudFormation di non eliminare le risorse create correttamente, anche se l’operazione complessiva dello stack fallisce.

  2. L’operazione dello stack è probabilmente fallita, il che significa che lo stato dello stack è CREATE_FAILED o UPDATE_FAILED.

Nota

I tipi di aggiornamento non modificabili non sono supportati.

Mantieni risorse con provisioning effettuato correttamente (console)

Create stack
Per mantenere le risorse con provisioning effettuato correttamente durante un'operazione di creazione dello stack
  1. Accedere alla Console di gestione AWS e aprire la console di CloudFormation all'indirizzo https://console.aws.amazon.com/cloudformation.

  2. Nella pagina Stack, scegli Crea stack in alto a destra, poi scegli Con nuove risorse (standard).

  3. In Prerequisito - Prepara modello, seleziona Scegli un modello esistente.

  4. In Specify template (Specifica modello), scegliere di specificare l'URL per il bucket S3 che contiene il modello di stack oppure caricare un file modello di stack. Quindi, seleziona Next (Successivo).

  5. Nella pagina Specify stack details (Specifica dettagli stack), immetti il nome dello stack nella casella Stack name (Nome stack).

  6. Nella sezione Parameters (Parametri), specifica i parametri definiti nel modello di stack.

    È possibile utilizzare o modificare qualsiasi parametro con i valori predefiniti.

  7. Una volta definiti i valori dei parametri, seleziona Next (Avanti).

  8. Nella pagina Configure stack options (Configura opzioni stack), puoi impostare ulteriori opzioni per lo stack.

  9. Per Stack failure options (Opzioni di errore dello stack), seleziona Preserve successfully provisioned resources (Mantieni risorse con provisioning effettuato correttamente).

  10. Una volta definite le opzioni di stack, seleziona Next (Avanti).

  11. Rivedi lo stack nella pagina Review (Rivedi) e seleziona Create stack (Crea stack).

Results (Risultati): risorse che non sono riuscite a creare la transizione dello stato dello stack in CREATE_FAILED per impedire il rollback dello stack quando l'operazione di stack riscontra un errore. Le risorse con provisioning effettuato correttamente presentano lo stato CREATE_COMPLETE. Puoi monitorare lo stack nella scheda Stack events (Eventi stack).

Update stack
Per mantenere le risorse con provisioning effettuato correttamente durante un'operazione di aggiornamento dello stack
  1. Accedere alla Console di gestione AWS e aprire la console di CloudFormation all'indirizzo https://console.aws.amazon.com/cloudformation.

  2. Seleziona lo stack che desideri aggiornare, quindi seleziona Update (Aggiorna).

  3. Nella pagina Update stack (Aggiorna stack), scegli un modello di stack utilizzando una delle opzioni seguenti:

    • Usa modello esistente

    • Replace current template (Sostituisci modello corrente

    • Modifica modello in Infrastructure Composer

    Accetta le impostazioni desiderate e seleziona Next (Avanti).

  4. Nella pagina Specify stack details (Specifica dettagli stack), specifica i parametri definiti nel modello di stack.

    È possibile utilizzare o modificare qualsiasi parametro con i valori predefiniti.

  5. Una volta definiti i valori dei parametri, seleziona Next (Avanti).

  6. Nella pagina Configure stack options (Configura opzioni stack), puoi impostare ulteriori opzioni per lo stack.

  7. Per Behavior on provisioning failure (Comportamento con errore di provisioning), seleziona Preserve successfully provisioned resources (Mantieni risorse con provisioning effettuato correttamente).

  8. Una volta definite le opzioni di stack, seleziona Next (Avanti).

  9. Rivedi lo stack nella pagina Review (Rivedi) e seleziona Update stack (Aggiorna stack).

Risultati: le risorse che non sono riuscite ad aggiornare la transizione dello stato dello stack in UPDATE_FAILED ed eseguire il rollback all'ultimo stato stabile noto. Le risorse senza un ultimo stato stabile noto verranno eliminate da CloudFormation all'operazione di stack successiva. Le risorse di cui è stato eseguito il provisioning presentano lo stato CREATE_COMPLETE o UPDATE_COMPLETE. Puoi monitorare lo stack nella scheda Stack events (Eventi stack).

Change set
Nota

Puoi avviare un set di modifiche per uno stack con stato CREATE_FAILED o UPDATE_FAILED, ma non per uno stato UPDATE_ROLLBACK_FAILED.

Per mantenere le risorse con provisioning effettuato correttamente durante un'operazione di modifica del set
  1. Accedere alla Console di gestione AWS e aprire la console di CloudFormation all'indirizzo https://console.aws.amazon.com/cloudformation.

  2. Seleziona lo stack che contiene il set di modifiche che desideri avviare, quindi scegli la scheda Change sets (Set di modifiche).

  3. Seleziona il set di modifiche, quindi scegli Execute (Esegui).

  4. Per Execute change set (Esegui set di modifiche), seleziona l'opzione Preserve successfully provisioned resources (Mantieni risorse con provisioning effettuato correttamente).

  5. Seleziona Execute change set (Esegui set di modifiche).

Risultati: le risorse che non sono riuscite ad aggiornare la transizione dello stato dello stack in UPDATE_FAILED ed eseguire il rollback all'ultimo stato stabile noto. Le risorse senza un ultimo stato stabile noto verranno eliminate da CloudFormation all'operazione di stack successiva. Le risorse di cui è stato eseguito il provisioning presentano lo stato CREATE_COMPLETE o UPDATE_COMPLETE. Puoi monitorare lo stack nella scheda Stack events (Eventi stack).

Mantieni risorse con provisioning effettuato correttamente (AWS CLI)

Create stack
Per mantenere le risorse con provisioning effettuato correttamente durante un'operazione di creazione dello stack

Specifica l'opzione --disable-rollback o l'enumerazione on-failure DO_NOTHING durante un'operazione create-stack.

  1. Fornisci un nome e un modello di stack per il comando create-stack con l'opzione --disable-rollback.

    aws cloudformation create-stack --stack-name myteststack \ --template-body file://template.yaml \ --disable-rollback

    Questo comando restituisce il seguente output.

    {     "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896" }
  2. Descrivi lo stato dello stack utilizzando il comando describe-stacks.

    aws cloudformation describe-stacks --stack-name myteststack

    Questo comando restituisce il seguente output.

    {     "Stacks":  [         {             "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896",             "Description": "AWS CloudFormation Sample Template",             "Tags": [],             "Outputs": [],             "StackStatusReason": “The following resource(s) failed to create: [MyBucket]”,             "CreationTime": "2013-08-23T01:02:15.422Z",             "Capabilities": [],             "StackName": "myteststack",             "StackStatus": "CREATE_FAILED",             "DisableRollback": true         }     ] }
Update stack
Per mantenere le risorse con provisioning effettuato correttamente durante un’operazione di aggiornamento dello stack
  1. Fornisci un nome e un modello di stack esistenti per il comando update-stack con l'opzione --disable-rollback.

    aws cloudformation update-stack --stack-name myteststack \ --template-url https://s3.amazonaws.com/amzn-s3-demo-bucket/updated.template --disable-rollback

    Questo comando restituisce il seguente output.

    {     "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896" }
  2. Descrivi lo stato dello stack utilizzando i comandi describe-stacks o describe-stack-events.

    aws cloudformation describe-stacks --stack-name myteststack

    Questo comando restituisce il seguente output.

    { "Stacks":  [         {             "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896",             "Description": "AWS CloudFormation Sample Template",             "Tags": [],             "Outputs": [],             "CreationTime": "2013-08-23T01:02:15.422Z",             "Capabilities": [],             "StackName": "myteststack",             "StackStatus": "UPDATE_COMPLETE",             "DisableRollback": true         }     ] }
Change set
Nota

Puoi avviare un set di modifiche per uno stack con stato CREATE_FAILED o UPDATE_FAILED, ma non per uno stato UPDATE_ROLLBACK_FAILED.

Per mantenere le risorse con provisioning effettuato correttamente durante un'operazione di modifica del set

Specifica l'opzione --disable-rollback durante un'operazione execute-change-set.

  1. Fornisci un nome e un modello di stack per il comando execute-change-set con l'opzione --disable-rollback.

    aws cloudformation execute-change-set --stack-name myteststack \ --change-set-name my-change-set --template-body file://template.yaml

    Questo comando restituisce il seguente output.

    {  "Id": "arn:aws:cloudformation:us-east-1:123456789012:changeSet/my-change-set/bc9555ba-a949-xmpl-bfb8-f41d04ec5784",  "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896" }
  2. Avvia il set di modifiche con l'opzione --disable-rollback.

    aws cloudformation execute-change-set --stack-name myteststack \ --change-set-name my-change-set -–disable-rollback
  3. Determina lo stato dello stack utilizzando i comandi describe-stacks o describe-stack-events.

    aws cloudformation describe-stack-events --stack-name myteststack

    Questo comando restituisce il seguente output.

    { "StackEvents": [ { "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896", "EventId": "49c966a0-7b74-11ea-8071-024244bb0672", "StackName": "myteststack", "LogicalResourceId": " MyBucket", "PhysicalResourceId": "myteststack-MyBucket-abcdefghijk1", "ResourceType": "AWS::S3::Bucket", "Timestamp": "2020-04-10T21:43:17.015Z", "ResourceStatus": "UPDATE_FAILED" "ResourceStatusReason": "User XYZ is not allowed to perform S3::UpdateBucket on MyBucket" } }
  4. Correggi gli errori di autorizzazione e riprova l'operazione.

    aws cloudformation update-stack --stack-name myteststack \ --use-previous-template --disable-rollback

    Questo comando restituisce il seguente output.

    {     "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896" }
  5. Descrivi lo stato dello stack utilizzando i comandi describe-stacks o describe-stack-events.

    aws cloudformation describe-stacks --stack-name myteststack

    Questo comando restituisce il seguente output.

    {     "Stacks":  [         {             "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896",             "Description": "AWS CloudFormation Sample Template",             "Tags": [],             "Outputs": [],             "CreationTime": "2013-08-23T01:02:15.422Z",             "Capabilities": [],             "StackName": "myteststack",             "StackStatus": "UPDATE_COMPLETE",             "DisableRollback": true         }     ] }

Rollback di uno stack

Puoi utilizzare il comando rollback-stack per eseguire il rollback di uno stack con lo stato CREATE_FAILED o UPDATE_FAILED al suo ultimo stato stabile.

Il comando rollback-stack seguente esegue il rollback allo stack specificato.

aws cloudformation rollback-stack --stack-name myteststack

Questo comando restituisce il seguente output.

{ "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896" }
Nota

L'operazione rollback-stack eliminerà uno stack se non contiene un ultimo stato stabile noto.