Dépannage d’CloudFormation StackSets - AWS CloudFormation

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Dépannage d’CloudFormation StackSets

Cette rubrique présente certains problèmes courants liés aux StackSets et propose des suggestions de solutions pour les résoudre.

Raisons les plus courantes de l'échec de l'opération de pile

Problème : Une opération de pile a échoué et l'instance de pile a le statut OUTDATED.

Cause : Plusieurs causes courantes sont associées à l'échec d'une opération de pile.

  • Autorisations insuffisantes dans un compte de destination pour la création des ressources spécifiées dans votre modèle.

  • Le modèle CloudFormation peut contenir des erreurs. Vérifiez le modèle dans CloudFormation et corrigez les erreurs avant de tenter de créer votre StackSet.

  • Le modèle effectue peut-être une tentative de création de ressources globales qui doivent être uniques et qui ne le sont, par exemple des compartiments S3.

  • Un numéro de compte de destination spécifié n'existe pas. Vérifiez les numéros de compte de destination que vous avez spécifiés sur la page Set deployment options (Définir les options de déploiement) de l'assistant.

  • Le compte d'administrateur de compte n'a pas de relation d'approbation avec le compte de destination.

  • Le nombre maximal d'une ressource spécifiée dans votre modèle est déjà atteint dans votre compte de destination. Par exemple, vous avez peut-être atteint le nombre limite de rôles IAM autorisés dans un compte de destination, mais le modèle crée d'autres rôles IAM.

  • Vous avez atteint le nombre maximal de piles autorisé dans un StackSet. Pour connaître le nombre maximal de piles par StackSet, consultez Compréhension des quotas CloudFormation.

Solution : pour plus d’informations sur les autorisations requises pour les comptes cibles et administrateurs avant de pouvoir créer des StackSets, consultez Autorisation accordée à tous les utilisateurs du compte administrateur de gérer les piles dans tous les comptes cibles.

Nouvelle tentative non réussie de création ou mise à jour de pile

Problème : Une création ou mise à jour de pile a échoué, et l'instance de pile a le statut OUTDATED. Pour résoudre les problèmes liés à l’échec de la création ou de la mise à jour d’une pile, veuillez ouvrir la console CloudFormation et afficher les événements de la pile, qui auront le statut DELETED (pour les opérations de création ayant échoué) ou FAILED (pour les opérations de mise à jour ayant échoué). Dans les événements de la pile, recherchez la colonne Motif du statut. La valeur de Motif du statut explique pourquoi l'opération de pile a échoué.

Une fois que vous éliminé la cause sous-jacente de l'échec de la création de la pile et que vous êtes prêt à réessayer de créer la pile, effectuez les étapes suivantes.

Solution : Effectuez les étapes suivantes pour recommencer votre opération de pile.

  1. Dans la console, sélectionnez le StackSet qui contient la pile sur laquelle l’opération a échoué.

  2. Dans le menu Actions, choisissez Edit StackSet details (Modifier les détails de l'ensemble de piles) pour réessayer de créer ou de mettre à jour des piles.

  3. Sur la page Spécifier le modèle, pour utiliser le même modèle CloudFormation, conservez l’option par défaut, Utiliser le modèle actuel. Si votre opération de pile a échoué car le modèle nécessitait des modifications, et que vous souhaitez charger un modèle révisé, choisissez Upload a template to Amazon S3 (Télécharger un modèle sur Amazon S3) à la place, puis Browse (Parcourir) pour sélectionner votre modèle mis à jour. Lorsque vous avez fini de charger votre modèle révisé, cliquez sur Next (Suivant).

  4. Sur la page Spécifier les détails de la pile, si vous ne modifiez aucun paramètre spécifique à votre modèle, sélectionnez Suivant.

  5. Sur la page Set deployment options (Définir les options de déploiement), modifiez les valeurs par défaut de Maximum concurrent accounts (Nombre maximal de comptes en parallèle) et Failure tolerance (Tolérance aux pannes) si vous le souhaitez. Pour plus d’informations sur ces paramètres, consultez la page StackSet options de fonctionnement.

  6. Sur la page Vérification, vérifiez vos sélections et cochez la case pour reconnaître les fonctions IAM requises. Sélectionnez Envoyer.

  7. Si votre pile n'est pas mise à jour avec succès, répétez cette procédure après avoir résolu les problèmes sous-jacents qui empêchent la création de la pile.

Echec de la suppression de l'instance de pile

Problème : échec de la suppression d'une pile.

Cause : la suppression échoue pour n'importe quelle pile dont la protection contre la résiliation a été activée.

Solution : déterminez si la protection contre la résiliation a été activée pour la pile. Si c'est le cas, désactivez la protection contre la résiliation, puis effectuez à nouveau l'opération de suppression de l'instance de pile.

L'opération d'importation de pile échoue

Problème : une opération d’importation de pile échoue à importer des piles existantes dans des StackSets nouveaux ou existants. L'instance de pile se trouve à l'état INOPERABLE.

Solution : annulez l'opération d'importation de pile en procédant comme suit.

  1. Utilisez l’option Supprimer les piles de StackSets et activez RetainStacks pendant la configuration, puis procédez à la suppression des instances de pile de votre StackSet. Pour plus d’informations, consultez Supprimer les piles des StackSets CloudFormation.

  2. Vous constaterez que les instances de pile du StackSet sont mises à jour pour supprimer l’instance de pile INOPERABLE.

  3. Corrigez les instances de pile en fonction de l'erreur d'échec de l'importation et recommencez l'opération d'importation de la pile.

Nombre d'instances de pile défaillantes lors des opérations liées aux ensembles de piles

Le nombre d'instances de pile défaillantes vous avertit en cas d'échec de la mise en service ou la mise à jour des instances de pile. Ces instances de pile n'ont pas été déployées pour une ou plusieurs des raisons suivantes :

  • Ressource(s) existante(s) dotée(s) d'une configuration similaire

  • Dépendances manquantes, telles que les rôles Gestion des identités et des accès AWS (IAM)

  • Autres facteurs de conflit

Si vous souhaitez effectuer un déploiement avec une simultanéité maximale, la valeur maximale de simultanéité est, au maximum, supérieure d'une unité à la valeur de tolérance aux pannes. Par exemple, si la valeur de tolérance aux pannes est de 9, la valeur maximale de simultanéité ne peut pas être supérieure à 10. Ainsi l'opération renvoie SUCCEEDED même si certaines instances de pile ne sont pas mises à jour. Le nouveau nombre d'instances de pile défaillantes vous permet de déterminer si l'opération n'a abouti que de manière conditionnelle parce que la valeur de tolérances aux pannes est définie pour autoriser toutes les défaillances.

Vous pouvez utiliser la AWS Management Console, le kit SDK AWS ou la AWS CLI pour obtenir le nombre de défaillances et filtrer les instances de pile afin de déterminer lesquelles doivent être redéployées.

Utilisation de la console

Pour afficher le nombre d'instances de pile défaillantes :
  1. Ouvrez la console CloudFormation et sélectionnez StackSets.

  2. Sélectionnez votre ensemble de piles, puis l'onglet Operations (Opérations).

  3. Sélectionnez un état dans la colonne Status (État) pour afficher les détails relatifs à l'état. Vous trouverez le nombre d'instances de pile défaillantes d'une opération particulière dans les détails relatifs à l'état.

Pour consulter le nombre, la région et l'état des instances de pile associées à l'opération :
  1. Dans les détails relatifs à l'état, sélectionnez le nombre d'instances de pile défaillantes. Exemple : Instances de pile : <number of failed stack instances>.

  2. Développez le panneau latéral en sélectionnant l'en-tête de celui-ci. Les résultats affichés dans le panneau latéral indiquent l'état des instances de pile une fois l'opération sélectionnée terminée.

Pour afficher les détails de l'instance de pile actuelle d'une opération :
  1. Sélectionnez l'onglet Stack Instances (Instances de pile).

  2. Utilisez le filtre suivant : Last operation ID (ID de la dernière opération). Les résultats indiquent l'état actuel et le motif de cet état depuis la dernière opération de modification de l'instance. Vous pouvez utiliser ce filtre en combinaison avec compte AWS, région AWS, état détaillé, et état d’écart pour affiner davantage vos résultats de recherche.

Utilisation de l’AWS CLI

Pour connaître le nombre d'instances de pile défaillantes, appelez describe-stack-set-operation ou list-stack-set-operations et consultez StatusDetails.

aws cloudformation describe-stack-set-operation --stack-set-name ss1 \ --operation-id 5550e62f-c822-4331-88fa-21c1d7bafc60
{ "StackSetOperation": { "OperationId": "5550e62f-c822-4331-88fa-21c1d7bafc60", "StackSetId": "ss1:9101ca57-49fc-4a61-a5a6-4c97b8adb08f", "Action": "CREATE", "Status": "SUCCEEDED", "OperationPreferences": { "RegionOrder": [], "FailureToleranceCount": 10, "MaxConcurrentCount": 10 }, "AdministrationRoleARN": "arn:aws:iam::123456789012:role/AWSCloudFormationStackSetAdministrationRole", "ExecutionRoleName": "AWSCloudFormationStackSetExecutionRole", "CreationTimestamp": "2022-10-26T17:18:53.947000+00:00", "EndTimestamp": "2022-10-26T17:19:35.304000+00:00", "StatusDetails": { "FailedStackInstancesCount": 3 } } }
aws cloudformation list-stack-set-operations --stack-set-name ss1
{ "Summaries": [ { "OperationId": "5550e62f-c822-4331-88fa-21c1d7bafc60", "Action": "CREATE", "Status": "SUCCEEDED", "CreationTimestamp": "2022-10-26T17:18:53.947000+00:00", "EndTimestamp": "2022-10-26T17:19:35.304000+00:00", "StatusDetails": { "FailedStackInstancesCount": 3 }, "OperationPreferences": { "RegionOrder": [], "FailureToleranceCount": 10, "MaxConcurrentCount": 10 } } ] }

Pour obtenir un aperçu de l'historique d'une opération particulière, utilisez list-stack-set-operation-results afin d'afficher l'état et le motif de l'état de chaque instance de pile au terme de l'opération. Consultez l'exemple suivant pour trouver l'état (Status) et le motif de l'état (StatusReason) :

aws cloudformation list-stack-set-operation-results --stack-set-name ss1 \ --operation-id 5550e62f-c822-4331-88fa-21c1d7bafc60 --filters Name=OPERATION_RESULT_STATUS,Values=FAILED
{ "Summaries": [ { "Account": "123456789012", "Region": "us-west-2", "Status": "FAILED", "StatusReason": "Account 123456789012 should have 'AWSCloudFormationStackSetExecutionRole' role with trust relationship to Role 'AWSCloudFormationStackSetAdministrationRole'.", "AccountGateResult": { "Status": "SKIPPED", "StatusReason": "Account 123456789012 should have 'AWSCloudFormationStackSetExecutionRole' role with trust relationship to Role 'AWSCloudFormationStackSetAdministrationRole'." }, "OrganizationalUnitId": "" }, { "Account": "123456789012", "Region": "us-west-1", "Status": "FAILED", "StatusReason": "Account 123456789012 should have 'AWSCloudFormationStackSetExecutionRole' role with trust relationship to Role 'AWSCloudFormationStackSetAdministrationRole'.", "AccountGateResult": { "Status": "SKIPPED", "StatusReason": "Account 123456789012 should have 'AWSCloudFormationStackSetExecutionRole' role with trust relationship to Role 'AWSCloudFormationStackSetAdministrationRole'." }, "OrganizationalUnitId": "" }, { "Account": "123456789012", "Region": "us-east-1", "Status": "FAILED", "StatusReason": "Account 123456789012 should have 'AWSCloudFormationStackSetExecutionRole' role with trust relationship to Role 'AWSCloudFormationStackSetAdministrationRole'.", "AccountGateResult": { "Status": "SKIPPED", "StatusReason": "Account 123456789012 should have 'AWSCloudFormationStackSetExecutionRole' role with trust relationship to Role 'AWSCloudFormationStackSetAdministrationRole'." }, "OrganizationalUnitId": "" } ] }

Utilisez list-stack-instances avec les filtres DETAILED_STATUS et LAST_OPERATION_ID pour obtenir la liste des instances de pile qui ont échoué lors de la dernière opération au cours de laquelle un déploiement de celles-ci a été tenté. Voir l'indicateur --filters dans l'exemple comportant DETAILED_STATUS et LAST_OPERATION_ID :

aws cloudformation list-stack-instances --stack-set-name ss1 \ --filters Name=DETAILED_STATUS,Values=FAILED Name=LAST_OPERATION_ID,Values=5550e62f-c822-4331-88fa-21c1d7bafc60
{ "Summaries": [ { "StackSetId": "ss1:9101ca57-49fc-4a61-a5a6-4c97b8adb08f", "Region": "us-east-1", "Account": "123456789012", "Status": "OUTDATED", "StatusReason": "Account 123456789012 should have 'AWSCloudFormationStackSetExecutionRole' role with trust relationship to Role 'AWSCloudFormationStackSetAdministrationRole'.", "StackInstanceStatus": { "DetailedStatus": "FAILED" }, "OrganizationalUnitId": "", "DriftStatus": "NOT_CHECKED", "LastOperationId": "5550e62f-c822-4331-88fa-21c1d7bafc60" }, { "StackSetId": "ss1:9101ca57-49fc-4a61-a5a6-4c97b8adb08f", "Region": "us-west-1", "Account": "123456789012", "Status": "OUTDATED", "StatusReason": "Account 123456789012 should have 'AWSCloudFormationStackSetExecutionRole' role with trust relationship to Role 'AWSCloudFormationStackSetAdministrationRole'.", "StackInstanceStatus": { "DetailedStatus": "FAILED" }, "OrganizationalUnitId": "", "DriftStatus": "NOT_CHECKED", "LastOperationId": "5550e62f-c822-4331-88fa-21c1d7bafc60" }, { "StackSetId": "ss1:9101ca57-49fc-4a61-a5a6-4c97b8adb08f", "Region": "us-west-2", "Account": "123456789012", "Status": "OUTDATED", "StatusReason": "Account 123456789012 should have 'AWSCloudFormationStackSetExecutionRole' role with trust relationship to Role 'AWSCloudFormationStackSetAdministrationRole'.", "StackInstanceStatus": { "DetailedStatus": "FAILED" }, "OrganizationalUnitId": "", "DriftStatus": "NOT_CHECKED", "LastOperationId": "5550e62f-c822-4331-88fa-21c1d7bafc60" } ] }

Pour trouver l'ID de la dernière opération afin de modifier une instance de pile, utilisez list-stack-instances ou describe-stack-instance de manière à obtenir LastOperationId :

aws cloudformation describe-stack-instance --stack-set-name ss1 \ --stack-instance-account 123456789012 --stack-instance-region us-east-2
{ "StackInstance": { "StackSetId": "ss1:9101ca57-49fc-4a61-a5a6-4c97b8adb08f", "Region": "us-west-2", "Account": "123456789012", "ParameterOverrides": [], "Status": "OUTDATED", "StackInstanceStatus": { "DetailedStatus": "FAILED" }, "StatusReason": "Account 123456789012 should have 'AWSCloudFormationStackSetExecutionRole' role with trust relationship to Role 'AWSCloudFormationStackSetAdministrationRole'.", "OrganizationalUnitId": "", "DriftStatus": "NOT_CHECKED", "LastOperationId": "5550e62f-c822-4331-88fa-21c1d7bafc60" } }