Choisissez comment gérer les défaillances lors de l’approvisionnement des ressources - AWS CloudFormation

Choisissez comment gérer les défaillances lors de l’approvisionnement des ressources

Si votre opération de stack échoue, vous n’avez pas à annuler les ressources déjà correctement provisionnées et à recommencer depuis le début à chaque fois. Au lieu de cela, vous pouvez dépanner les ressources dans un état CREATE_FAILED ou UPDATE_FAILED, puis reprendre le provisionnement à partir du point où le problème s’est produit.

Pour ce faire, vous devez activer l’option Conserver les ressources correctement provisionnées. Cette option est disponible pour tous les déploiements de pile et les opérations d’ensembles de modifications.

  • Pour la création de piles, si vous choisissez l’option Conserver les ressources provisionnées avec succès, CloudFormation conserve l’état des ressources qui ont été créées avec succès et laisse celles qui ont échoué dans un état d’échec jusqu’à la prochaine opération de mise à jour.

  • Lors des opérations de mise à jour et de modification, choisir Préserver les ressources provisionnées avec succès permet de conserver l’état des ressources qui ont été provisionnées avec succès tout en rétablissant les ressources qui ont échoué à leur dernier état stable connu. Les ressources en échec se trouveront à l'état UPDATE_FAILED. Les ressources sans dernier état stable connu seront supprimées lors de la prochaine opération de pile.

Présentation des options d'échec de pile

Avant de lancer une opération à partir de la console CloudFormation, de l’API ou AWS CLI, spécifiez le comportement à adopter en cas de défaillance des ressources provisionnées. Passez ensuite au processus de déploiement de vos ressources sans aucune autre modification. En cas de défaillance opérationnelle, CloudFormation s'arrête au premier échec de chaque chemin d'allocation indépendant. CloudFormation identifie les dépendances entre les ressources afin de paralléliser les actions d'allocation indépendantes. Il procède ensuite à l'allocation des ressources sur chaque chemin d'allocation indépendant jusqu'à ce qu'il rencontre un échec. L'échec d'un chemin n'affecte pas les autres chemins d'allocation. CloudFormation continuera d'allouer les ressources jusqu'à la fin ou s'arrêtera en cas d'échec différent.

Corrigez tous les problèmes afin de poursuivre le processus de déploiement. CloudFormation effectue les mises à jour nécessaires avant de relancer les actions d'allocation sur des ressources qui n'ont pas pu être correctement allouées auparavant. Vous résolvez les problèmes en soumettant les opérations Retry (Réessayer), Update (Mettre à jour) ou Roll back (Restaurer). Par exemple, si vous allouez une instance Amazon EC2 et que l'instance EC2 échoue lors d'une opération de création, vous pouvez rechercher l'erreur, plutôt que de restaurer immédiatement la ressource ayant échoué. Vous pouvez passer en revue les contrôles d'état du système et les contrôles d'état des instances, puis sélectionner l'opération Retry (Réessayer) une fois que les problèmes sont résolus.

Lorsqu'une opération de pile échoue et que vous avez spécifié Preserve successfully provisioned resources (Préserver les ressources correctement allouées) à partir du menu Stack failure options (Options d'échec de pile), vous pouvez sélectionner les options suivantes.

  • Retry (Réessayer) : relance l'opération d'allocation sur les ressources en échec et continue d'allouer le modèle jusqu'à la fin de l'opération de pile ou jusqu'à l'échec suivant. Sélectionnez cette option si la ressource n'a pas pu être allouée en raison d'un problème qui ne nécessite pas de modifications du modèle, tel qu'une autorisation AWS Identity and Access Management (IAM).

  • Update (Mettre à jour) : les ressources qui ont été allouées sont mises à jour lors des mises à jour des modèles. Les ressources qui n'ont pas pu être créées ou mises à jour seront relancées. Sélectionnez cette option si la ressource n'a pas pu être allouée en raison d'erreurs de modèle et si vous avez modifié le modèle. Lorsque vous mettez à jour une pile qui se trouve à l'état FAILED, vous devez sélectionner Preserve successfully provisioned resources (Préserver les ressources correctement allouées) pour Stack failure options (Options d'échec de pile) afin de poursuivre la mise à jour de votre pile.

  • Roll back (Restaurer) : CloudFormation restaure la pile au dernier état stable connu.

Conditions requises pour suspendre la restauration de la pile

Pour empêcher CloudFormation de restaurer et de supprimer automatiquement les ressources qui ont été créées avec succès, les conditions suivantes doivent être remplies.

  1. Lorsque vous créez ou mettez à jour la pile, vous devez choisir l’option Préserver les ressources correctement provisionnées. Cela indique à CloudFormation de ne pas supprimer les ressources qui ont été créées avec succès, même si l’opération globale de la pile échoue.

  2. L’opération de pile doit avoir échoué, ce qui signifie que l’état de la pile est soit CREATE_FAILED soit UPDATE_FAILED.

Note

Les types de mise à jour immuables ne sont pas pris en charge.

Préserver les ressources correctement allouées (console)

Create stack
Pour préserver les ressources correctement allouées lors d'une opération de création de pile
  1. Connectez-vous à la AWS Management Console et ouvrez la console CloudFormation à l’adresse https://console.aws.amazon.com/cloudformation.

  2. Depuis la page CloudFormation, choisissez Piles, puis Créer une pile avec de nouvelles ressources (standard).

  3. Pour la Condition préalable – Préparer le modèle, sélectionnez Choisir un modèle existant.

  4. Sous Spécifier le modèle, choisissez soit de spécifier l'URL du compartiment S3 qui contient votre modèle de pile, soit de charger un fichier de modèle de pile. Ensuite, choisissez Suivant.

  5. Sur la page Spécifier les détails de la pile, saisissez un nom pour la pile dans la zone Stack name (Nom de la pile).

  6. Dans la section Paramètres, spécifiez les paramètres définis dans votre modèle de pile.

    Vous pouvez utiliser ou modifier n'importe quel paramètre contenant des valeurs par défaut.

  7. Lorsque vous êtes satisfait de vos paramètres, choisissez Next (Suivant).

  8. Sur la page Configurer les options de la pile, vous pouvez définir des options supplémentaires pour votre pile.

  9. Pour Stack failure options (Options d'échec de pile), sélectionnez Preserve successfully provisioned resources (Préserver les ressources correctement allouées).

  10. Lorsque vous êtes satisfait de vos options de pile, choisissez Next (Suivant).

  11. Passez en revue votre pile sur la page Révision et sélectionnez Create stack (Créer une pile).

Résultats : les ressources qui n'ont pas pu être créées font passer l'état de la pile à CREATE_FAILED pour empêcher la restauration de la pile lorsque l'opération de pile échoue. Les ressources qui sont correctement allouées se trouvent à l'état CREATE_COMPLETE. Vous pouvez surveiller la pile dans l'onglet Stack events (Événements de la pile).

Update stack
Pour préserver les ressources correctement allouées lors d'une opération de mise à jour de pile
  1. Connectez-vous à la AWS Management Console et ouvrez la console CloudFormation à l’adresse https://console.aws.amazon.com/cloudformation.

  2. Sélectionnez la pile que vous souhaitez mettre à jour, puis cliquez sur Update (Mettre à jour).

  3. Sur la page Mettre à jour une pile, choisissez un modèle de pile en utilisant l'une des options suivantes :

    • Utiliser le modèle existant

    • Replace current template (Remplacer le modèle actuel

    • Modifier le modèle dans Infrastructure Composer

    Acceptez vos paramètres et sélectionnez Next (Suivant).

  4. Sur la page Définir les détails de la pile, spécifiez les paramètres définis dans votre modèle de pile.

    Vous pouvez utiliser ou modifier n'importe quel paramètre contenant des valeurs par défaut.

  5. Lorsque vous êtes satisfait de vos paramètres, choisissez Next (Suivant).

  6. Sur la page Configurer les options de la pile, vous pouvez définir des options supplémentaires pour votre pile.

  7. Pour Comportement en cas d'échec de l'allocation, sélectionnez Preserve successfully provisioned resources (Préserver les ressources correctement allouées).

  8. Lorsque vous êtes satisfait de vos options de pile, choisissez Next (Suivant).

  9. Passez en revue votre pile sur la page Révision et sélectionnez Update stack (Mettre à jour une pile).

Résultats : les ressources qui n'ont pas pu être mises à jour passent l'état de la pile à UPDATE_FAILED et reviennent au dernier état stable connu. Les ressources sans dernier état stable connu seront supprimées par CloudFormation lors de la prochaine opération de pile. Les ressources qui sont correctement allouées se trouvent à l'état CREATE_COMPLETE ou UPDATE_COMPLETE. Vous pouvez surveiller la pile dans l'onglet Stack events (Événements de la pile).

Change set
Note

Vous pouvez initier un jeu de modifications pour une pile dont l'état est CREATE_FAILED ou UPDATE_FAILED, mais pas pour un état UPDATE_ROLLBACK_FAILED.

Pour préserver les ressources correctement allouées lors d'une opération de modification de pile
  1. Connectez-vous à la AWS Management Console et ouvrez la console CloudFormation à l’adresse https://console.aws.amazon.com/cloudformation.

  2. Sélectionnez la pile qui contient le jeu de modifications que vous souhaitez initier, puis choisissez l'onglet Change sets (Jeux de modifications).

  3. Sélectionnez le jeu de modifications, puis cliquez sur Execute (Exécuter).

  4. Pour Execute change set (Exécuter le jeu de modifications), sélectionnez l'option Preserve successfully provisioned resources (Préserver les ressources correctement allouées).

  5. Sélectionnez Execute change set (Exécuter le jeu de modifications).

Résultats : les ressources qui n'ont pas pu être mises à jour passent l'état de la pile à UPDATE_FAILED et reviennent au dernier état stable connu. Les ressources sans dernier état stable connu seront supprimées par CloudFormation lors de la prochaine opération de pile. Les ressources qui sont correctement allouées se trouvent à l'état CREATE_COMPLETE ou UPDATE_COMPLETE. Vous pouvez surveiller la pile dans l'onglet Stack events (Événements de la pile).

Préserver les ressources correctement allouées (AWS CLI)

Create stack
Pour préserver les ressources correctement allouées lors d'une opération de création de pile

Spécifiez l'option --disable-rollback ou l'énumération on-failure DO_NOTHING au cours d'une opération create-stack.

  1. Fournissez un nom de pile et un modèle à la commande create-stack avec l'option --disable-rollback.

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

    La commande renvoie le résultat suivant.

    {     "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896" }
  2. Décrivez l’état de la pile à l’aide de la commande describe-stacks.

    aws cloudformation describe-stacks --stack-name myteststack

    La commande renvoie le résultat suivant.

    {     "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
Pour préserver les ressources provisionnées avec succès pendant une opération de mise à jour de la pile
  1. Fournissez un nom de pile et un modèle existants à la commande update-stack avec l'option --disable-rollback.

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

    La commande renvoie le résultat suivant.

    {     "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896" }
  2. Décrivez l’état de la pile à l’aide de la commande describe-stacks ou describe-stack-events.

    aws cloudformation describe-stacks --stack-name myteststack

    La commande renvoie le résultat suivant.

    { "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
Note

Vous pouvez initier un jeu de modifications pour une pile dont l’état est CREATE_FAILED ou UPDATE_FAILED, mais pas pour un état UPDATE_ROLLBACK_FAILED.

Pour préserver les ressources correctement allouées lors d'une opération de modification de pile

Spécifiez l'option --disable-rollback au cours d'une opération execute-change-set.

  1. Fournissez un nom de pile et un modèle à la commande execute-change-set avec l'option --disable-rollback.

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

    La commande renvoie le résultat suivant.

    {  "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. Lancez le jeu de modifications à l'aide de l'option --disable-rollback.

    aws cloudformation execute-change-set --stack-name myteststack \ --change-set-name my-change-set -–disable-rollback
  3. Déterminez l’état de la pile à l’aide de la commande describe-stacks ou describe-stack-events.

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

    La commande renvoie le résultat suivant.

    { "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. Corrigez les erreurs d'autorisation et réessayez l'opération.

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

    La commande renvoie le résultat suivant.

    {     "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896" }
  5. Décrivez l’état de la pile à l’aide de la commande describe-stacks ou describe-stack-events.

    aws cloudformation describe-stacks --stack-name myteststack

    La commande renvoie le résultat suivant.

    {     "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         }     ] }

Rétablissement d’une pile

Vous pouvez utiliser la commande rollback-stack pour restaurer une pile avec un état CREATE_FAILED ou UPDATE_FAILED pile à son dernier état stable.

La commande rollback-stack suivante annule la pile spécifiée.

aws cloudformation rollback-stack --stack-name myteststack

La commande renvoie le résultat suivant.

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

L'opération rollback-stack supprimera une pile si elle ne contient pas un dernier état stable connu.