Poursuite de la restauration d'une mise à jour - AWS CloudFormation

Poursuite de la restauration d'une mise à jour

Parfois, lorsque CloudFormation tente de restaurer une mise à jour de pile, il ne parvient pas à restaurer toutes les modifications apportées pendant le processus de mise à jour. C’est ce qu’on appelle l’état UPDATE_ROLLBACK_FAILED. Par exemple, la restauration d'une pile est lancée dans une ancienne instance de base de données qui a été supprimée en dehors de CloudFormation. Parce que CloudFormation ne sait pas que la base de données a été supprimée, il suppose que l'instance de base de données existe toujours et tente de l'utiliser pour effectuer la restauration, ce qui entraîne l'échec de l'opération.

Une pile dans l’état UPDATE_ROLLBACK_FAILED ne peut pas être mise à jour, mais elle peut être restaurée à un état fonctionnel (UPDATE_ROLLBACK_COMPLETE). Après avoir rétabli les paramètres d’origine de la pile, vous pouvez essayer de la mettre à jour à nouveau.

Dans la plupart des cas, vous devez corriger l'erreur qui entraîne l'échec de la restauration de la mise à jour avant de pouvoir continuer à restaurer la pile. Dans d'autres cas, vous pouvez poursuivre la restauration de la mise à jour sans aucune modification (par exemple, lorsqu'une opération de la pile arrive à expiration).

Note

Si vous utilisez des piles imbriquées, la restauration de la pile parent tente de restaurer également toutes les piles enfants.

Pour poursuivre la restauration d'une mise à jour (console)
  1. Connectez-vous à la AWS Management Console et ouvrez la console CloudFormation à l’adresse https://console.aws.amazon.com/cloudformation.

  2. Dans la barre de navigation en haut de l’écran, choisissez la Région AWS où se trouve la pile.

  3. Sur la page Piles, sélectionnez la pile que vous voulez mettre à jour, sélectionnez Actions de pile, puis sélectionnez Continuer la restauration de la mise à jour.

    Si aucune des solutions de l’état Résolution des erreurs n’a fonctionné, vous pouvez utiliser l’option avancée pour ignorer les ressources que CloudFormation ne parvient pas à restaurer. Vous devez rechercher et saisir les ID logiques des ressources que vous souhaitez ignorer. Spécifiez uniquement les ressources qui sont passées à l’état UPDATE_FAILED pendant l’état UpdateRollback et non pendant la mise à jour directe.

    Avertissement

    CloudFormation attribue aux ressources spécifiées l'état UPDATE_COMPLETE et continue en vue de restaurer la pile. Une fois la restauration terminée, l'état des ressources ignorées ne correspond pas à celui des ressources contenues dans le modèle de pile. Avant de procéder à une autre mise à jour de pile, vous devez mettre à jour la pile ou les ressources de façon à les rendre cohérentes les unes par rapport aux autres. A défaut, les futures mises à jour de la pile risquent d'échouer et la pile deviendra irrécupérable.

    Spécifiez le nombre minimum de ressources requises pour restaurer votre pile avec succès. Par exemple, une mise à jour de ressource ayant échoué peut entraîner l'échec de ressources dépendantes. Dans ce cas, il n'est peut-être pas nécessaire d'ignorer les ressources dépendantes.

    Pour ignorer des ressources faisant partie de piles imbriquées, utilisez le format suivant : NestedStackName.ResourceLogicalID. Si vous souhaitez spécifier l'ID logique d'une ressource de pile (Type: AWS::CloudFormation::Stack) dans la liste ResourcesToSkip, sa ressource de pile imbriquée correspondante doit être à l'un des états suivants : DELETE_IN_PROGRESS, DELETE_COMPLETE ou DELETE_FAILED.

Pour poursuivre la restauration d'une mise à jour (AWS CLI)
  • Utilisez la commande continue-update-rollback avec l’option --stack-name pour spécifier l’ID de la pile que vous voulez continuer à restaurer.

Continuer la restauration à partir des mises à jour de piles imbriquées ayant échoué

Lorsque vous avez plusieurs piles imbriquées les unes dans les autres, vous devrez peut-être ignorer les ressources sur plusieurs niveaux imbriqués pour que la pile complète revienne à un état fonctionnel.

Par exemple, vous avez une pile racine appelée WebInfra qui contient deux piles plus petites à l’intérieur : WebInfra-Compute et WebInfra-Storage. Ces deux piles ont également leurs propres piles imbriquées à l’intérieur.

Si un problème survient pendant une mise à jour et que le processus de mise à jour échoue, toute la hiérarchie de la pile peut se retrouver dans l’état UPDATE_ROLLBACK_FAILED, comme illustré dans le diagramme suivant.

Schéma illustrant une hiérarchie de piles imbriquées à trois niveaux.
Note

Les noms de pile de cet exemple sont tronqués par souci de simplification. Les noms de pile enfant sont généralement générés par CloudFormation et contiennent des chaînes aléatoires uniques. Les noms réels peuvent donc ne pas être conviviaux.

Pour que la pile racine redevienne opérationnelle à l’aide de la commande continue-update-rollback, vous devez utiliser l’option --resources-to-skip pour ignorer les ressources dont la restauration a échoué.

L’exemple continue-update-rollback suivant reprend une opération de restauration suite à un échec antérieur de la mise à jour de la pile. Dans cet exemple, l’option --resources-to-skip inclut les éléments suivants :

  • myCustom

  • WebInfra-Compute-Asg.myAsg

  • WebInfra-Compute-LB.myLoadBalancer

  • WebInfra-Storage.DB

Pour les ressources de la pile racine, il suffit de fournir l’ID logique, par exemple myCustom. Cependant, pour les ressources contenues dans des piles imbriquées, vous devez fournir à la fois le nom de la pile imbriquée et son ID logique, séparés par un point. Par exemple, WebInfra-Compute-Asg.myAsg.

aws cloudformation continue-update-rollback --stack-name WebInfra \ --resources-to-skip myCustom WebInfra-Compute-Asg.myAsg WebInfra-Compute-LB.myLoadBalancer WebInfra-Storage.DB
Pour trouver le nom d’une pile imbriquée

Vous pouvez le localiser dans l’ID de pile ou le nom de ressource Amazon Resource Name (ARN) de la pile enfant.

L’exemple d’ARN suivant fait référence à une pile nommée WebInfra-Storage-Z2VKC706XKXT.

arn:aws:cloudformation:us-east-1:123456789012:stack/WebInfra-Storage-Z2VKC706XKXT/ea9e7f90-54f7-11e6-a032-028f3d2330bd
Pour trouver l’ID logique d’une pile imbriquée

Vous pouvez trouver l'ID logique d'une pile enfant dans le définition de modèle de son parent. Dans le diagramme, le LogicalId de la pile enfant WebInfra-Storage-DB est DB dans sa pile parent WebInfra-Storage.

Dans la console CloudFormation, vous pouvez également trouver l'ID logique dans la colonne ID logique pour la ressource de pile dans l'onglet Ressources ou l'onglet Événements. Pour de plus amples informations, consultez Affichage des informations d’une pile à partir de la console CloudFormation.