Dépannage CloudFormation - AWS CloudFormation

Dépannage CloudFormation

Lorsque vous utilisez CloudFormation, vous pouvez rencontrer des problèmes lors de la création, de la mise à jour ou de la suppression de piles CloudFormation. Les sections suivantes peuvent vous aider à résoudre les problèmes courants qui peuvent se poser.

Pour consulter une liste des questions fréquentes concernant CloudFormation, reportez-vous à la FAQ CloudFormation. Vous pouvez également rechercher des réponses et poser des questions dans la communauté CloudFormation sur AWS re:Post.

Guide de dépannage

Si CloudFormation ne parvient pas à créer, mettre à jour ou supprimer votre pile, vous pouvez consulter les messages d’erreur ou les journaux pour en savoir plus sur le problème. Les tâches suivantes décrivent des méthodes générales permettant de résoudre un problème CloudFormation. Pour plus d'informations sur des erreurs spécifiques et les solutions, consultez Résolution des erreurs.

  • Utilisez la console CloudFormation pour consulter le statut de votre pile. Cette console vous permet de voir une liste des événements liés à une pile pendant que cette dernière est créée, mise à jour ou supprimée. Recherchez dans cette liste l'événement qui a échoué, puis consultez la raison du statut correspondant. La raison du statut peut contenir un message d’erreur provenant de CloudFormation ou d’un service particulier, lequel peut vous aider à résoudre votre problème. Pour plus d'informations sur l'affichage des événements d'une pile, consultez Afficher les événements de la pile CloudFormation.

  • Pour les problèmes liés à Amazon EC2, consultez les journaux cloud-init et cfn. Ces journaux sont publiés dans le répertoire /var/log/ de l'instance Amazon EC2. Ces journaux capturent les processus et les sorties de commande lorsque CloudFormation configure l’instance. Pour Windows, consultez le service EC2Configure dans %ProgramFiles%\Amazon\EC2ConfigService, EC2 Launch dans%ProgramData%\Amazon\EC2-Windows\Launch\Logs, EC2 Launch v2 dans %ProgramData%\Amazon\EC2Launch\log et les journaux cfn dans C:\cfn\log.

    Vous pouvez également configurer votre modèle CloudFormation de manière à ce que les journaux soient publiés dans Amazon CloudWatch, qui affiche les journaux dans la AWS Management Console afin que vous n’ayez pas à vous connecter à votre instance Amazon EC2. Pour plus d'informations, consultez la section Affichage des journaux CloudFormation dans la console dans le blog de gestion des applications.

Résolution des erreurs

Lorsque vous rencontrez les erreurs suivantes avec une pile CloudFormation, vous pouvez recourir aux méthodes suivantes pour trouver plus facilement la cause des problèmes et les corriger.

Échec de la suppression de la pile

Pour résoudre ce problème, essayez la méthode suivante :

  • Certaines ressources doivent être vides avant de pouvoir être supprimées. Par exemple, vous devez supprimer tous les objets d'un compartiment Amazon S3 ou supprimer toutes les instances d'un groupe de sécurité Amazon EC2 avant de pouvoir supprimer ce compartiment ou ce groupe de sécurité.

  • Vérifiez que vous disposez des autorisations IAM nécessaires pour supprimer les ressources de la pile. En plus des autorisations CloudFormation, vous devez être autorisé à utiliser les services sous-jacents, tels qu’Amazon S3 ou Amazon EC2.

  • Lorsque les piles sont dans l’état DELETE_FAILED parce que CloudFormation n’a pas pu supprimer une ressource, relancez la suppression avec le paramètre RetainResources et spécifiez la ressource que CloudFormation ne peut pas supprimer. CloudFormation supprime la pile sans supprimer la ressource conservée. La conservation des ressources s'avère utile lorsque vous ne pouvez pas supprimer une ressource, telle qu'un compartiment S3 qui contient les objets que vous souhaitez conserver, mais que vous voulez supprimer la pile.

    Une fois que vous supprimez la pile, vous pouvez supprimer manuellement les ressources conservées à l'aide du service AWS associé.

    Vous pouvez également envisager d’utiliser l’option FORCE_DELETE_STACK avec le paramètre DeletionMode. Pour plus d’informations sur la suppression forcée d’une pile, consultez Suppression d’une pile à partir de la console CloudFormation.

  • Vous ne pouvez pas supprimer des piles pour lesquelles la protection contre la résiliation est activée. Si vous essayez de supprimer une pile pour laquelle la protection contre la résiliation est activée, la suppression échoue et la pile, et son statut, restent inchangés. Désactivez la protection contre la résiliation sur la pile, puis effectuez à nouveau l'opération de suppression.

    Cela concerne également les piles imbriquées dont les piles racine sont protégées contre la résiliation. Désactivez la protection contre la résiliation sur la pile racine, puis effectuez à nouveau l'opération de suppression. Il est fortement recommandé de ne pas supprimer les piles imbriquées directement, mais de les supprimer uniquement dans le cadre de la suppression de la pile racine et de l'ensemble de ses ressources.

    Pour de plus amples informations, consultez Protéger les piles CloudFormation contre la suppression.

  • Pour toute autre question, si vous avez souscrit un plan AWS Support, vous pouvez créer une demande Support. Consultez Contacter l'assistance.

Erreur de dépendance

Pour résoudre une erreur de dépendance, ajoutez un attribut DependsOn aux ressources qui dépendent d'autres ressources dans votre modèle. Dans certains cas, vous devez déclarer explicitement les dépendances pour que CloudFormation puisse créer ou supprimer les ressources dans l’ordre correct. Par exemple, si vous créez une adresse IP Elastic et un VPC avec une passerelle Internet dans la même pile, l'adresse IP Elastic dépend de l'association à cette passerelle Internet. Pour plus d'informations, voir la section consécrée à l'Attribut DependsOn.

Conflits entre AWS Config et AWS Systems Manager

AWS Config et AWS Systems Manager peuvent automatiser les tâches de gestion de l’infrastructure, ce qui peut entraîner des conflits avec le déploiement d’une pile CloudFormation. Procédez comme suit pour éviter tout conflit potentiel :

  • Vérifiez la configuration d’AWS Config et de Systems Manager dans le Compte AWS et la Région AWS associés.

  • Vérifiez les règles actives ou les documents d’automatisation qui pourraient être déclenchés lors d’un déploiement CloudFormation. Ceux-ci peuvent potentiellement causer des conflits ou des dépendances de ressources qui entrent en conflit avec votre déploiement.

  • Vérifiez votre modèle CloudFormation pour toute ressource gérée par AWS Config et Systems Manager. Vérifiez les chevauchements ou interdépendances potentiels et envisagez d’ajuster le modèle ou la configuration de l’automatisation pour éviter les conflits.

  • Désactivez ou suspendez temporairement toute règle AWS Config ou automatisation Systems Manager associée pendant le déploiement CloudFormation. N’oubliez pas de restaurer les configurations d’origine après le déploiement réussi afin de maintenir le niveau souhaité d’automatisation et de conformité.

  • Vérifiez les journaux CloudFormation et les messages d’erreur pour toute référence à des problèmes liés à AWS Config et Systems Manager afin d’identifier la source du conflit.

Pour plus d’informations sur les règles AWS Config, consultez Évaluation des ressources avec AWS Config Rules.

Pour plus d’informations sur les automatisations Systems Manager, consultez AWS Systems Manager Automation.

Erreur d'analyse d'un paramètre lors de la transmission d'une liste

Lorsque vous utilisez l’AWS CLI ou CloudFormation pour transmettre une liste, ajoutez le caractère d’échappement (\) avant chaque virgule. L'exemple suivant montre comment spécifier un paramètre d'entrée avec l' AWS CLI.

ParameterKey=CIDR,ParameterValue='10.10.0.0/16\,10.10.0.0/24\,10.10.1.0/24'

Autorisations IAM insuffisantes

Lorsque vous travaillez avec une pile CloudFormation, vous devez non seulement disposer de l’autorisation nécessaire pour utiliser CloudFormation, mais également de l’autorisation pour utiliser les services sous-jacents décrits dans votre modèle. Par exemple, si vous créez un compartiment Amazon S3 ou si vous lancez une instance Amazon EC2, vous devez être autorisé à accéder à Amazon S3 ou à Amazon EC2. Passez en revue votre politique IAM et vérifiez que vous disposez des autorisations nécessaires avant d’utiliser les piles CloudFormation. Pour plus d’informations, consultez Contrôle de l’accès CloudFormation avec AWS Identity and Access Management.

Valeur non valide ou propriété de ressource non prise en charge

Lorsque vous créez ou mettez à jour une pile CloudFormation, cette opération peut échouer en raison de paramètres d’entrée non valides ou en raison de la non-prise en charge des noms de propriétés de ressources ou des valeurs de propriétés. Pour les paramètres d'entrée, vérifiez que la ressource existe. Par exemple, lorsque vous spécifiez une paire de clés Amazon EC2 ou un ID de VPC, la ressource doit exister dans votre compte et dans la région dans laquelle vous créez ou mettez à jour la pile. Pour vous assurer que les valeurs sont valides, vous pouvez utiliser les types de paramètres spécifiques à AWS.

Pour les noms et les valeurs des propriétés de ressource, mettez à jour le modèle pour qu'il utilise des noms et des valeurs valides. Pour plus d’informations, veuillez consulter la référence des types de ressources et de propriétés AWS.

Quota dépassé

Vérifiez que vous n'avez pas atteint un quota de ressource. Par exemple, le nombre maximal d'instances à la demande Amazon EC2 que vous pouvez lancer par défaut est de 5. Si vous essayez de créer plus d'instances à la demande Amazon EC2 que le quota défini dans votre compte, l'opération échoue et vous recevez l'erreur Status=start_failed. Pour afficher les quotas AWS par défaut et par service, veuillez consulter la rubrique AWS service quotas dans Références générales AWS.

Pour les quotas CloudFormation et les stratégies d’ajustement, consultez Compréhension des quotas CloudFormation.

Par ailleurs, pendant une mise à jour, si une ressource est remplacée, CloudFormation crée une autre ressource avant de supprimer l’ancienne. Ce remplacement pourrait entraîner le dépassement du quota de ressources associé à votre compte, ce qui provoquerait l'échec de la mise à jour. Vous pouvez supprimer des ressources inutilisées ou demander une augmentation de quota.

Les piles imbriquées restent bloquées à l'état UPDATE_COMPLETE_CLEANUP_IN_PROGRESS, UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS ou UPDATE_ROLLBACK_IN_PROGRESS

La restauration d'une pile imbriquée a échoué. En raison des dépendances potentielles de ressources entre les piles imbriquées, CloudFormation ne nettoie pas les ressources d’une pile imbriquée tant que toutes les piles imbriquées n’ont pas été mises à jour ou restaurées. Lorsque la restauration d’une pile imbriquée échoue, CloudFormation annule toutes les opérations, quel que soit l’état des autres piles. Lorsqu’une pile imbriquée dont la mise à jour ou la restauration a réussi ne reçoit pas de signal de CloudFormation l’invitant à commencer le nettoyage en raison de l’échec de restauration d’une autre pile imbriquée, son état indique UPDATE_COMPLETE_CLEANUP_IN_PROGRESS ou UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS. Lorsqu'une pile imbriquée dont la mise a jour a échoué ne reçoit pas le signal pour commencer sa restauration, son état indique UPDATE_ROLLBACK_IN_PROGRESS.

La restauration d’une pile imbriquée peut échouer en raison de modifications apportées en dehors de CloudFormation, lorsque le modèle de la pile ne reflète pas précisément l’état de la pile. Une pile imbriquée peut également échouer si le délai d'expiration du signal pour son groupe Auto Scaling n'était pas suffisant lorsque ce dernier a été créé ou mis à jour.

Pour réparer la pile, contactez AWS Support.

Aucune mise à jour à effectuer

Pour mettre à jour une pile CloudFormation, vous devez soumettre les modifications apportées au modèle ou aux valeurs des paramètres à CloudFormation. Cependant, CloudFormation ne reconnaîtra pas certaines modifications du modèle comme une mise à jour, telles que les modifications apportées à une politique de suppression, à une politique de mise à jour, à une déclaration de condition ou à une déclaration de sortie. Si vous avez besoin d'effectuer uniquement ces modifications, vous pouvez ajouter ou modifier les attributs de métadonnées de vos ressources. L’attribut de métadonnées peut être n’importe quelle valeur arbitraire, car CloudFormation n’interprète pas son contenu. Pour plus d'informations, voir la section consécrée à l'Attribut Metadata.

La ressource n'a pas pu se stabiliser lors d'une opération de création, de mise à jour ou de suppression de pile

Une ressource n’a pas répondu car l’opération a dépassé le délai d’expiration de CloudFormation ou un service AWS a été interrompu. Pour les interruptions de service, vérifiez que le service AWS concerné est en cours d'exécution, puis tentez à nouveau l'opération de pile.

Si les services AWS s'exécutent correctement, vérifiez si votre pile contient l'une des ressources suivantes :

  • AWS::AutoScaling::AutoScalingGroup pour les opérations de création, de mise à jour et de suppression

  • AWS::CertificateManager::Certificate pour les opérations de création

  • AWS::CloudFormation::Stack pour les opérations de création, de mise à jour et de suppression

  • AWS::ElasticSearch::Domain pour les opérations de mise à jour

  • AWS::RDS::DBCluster pour les opérations de création et de mise à jour

  • AWS::RDS::DBInstance pour les opérations de création, de mise à jour et de suppression

  • AWS::Redshift::Cluster pour les opérations de mise à jour

Pour ces ressources, les opérations peuvent prendre plus de temps que le délai d'expiration par défaut. Le délai d'expiration varie en fonction de la ressource et des informations d'identification que vous utilisez. Pour allonger le délai d'expiration, spécifiez un rôle de service au moment d'effectuer l'opération de pile. Si vous utilisez déjà un rôle de service ou si votre pile contient une ressource qui n'est pas répertoriée, contactez le AWS Support.

Si votre pile indique l'état UPDATE_ROLLBACK_FAILED, consultez Échec de la restauration de la mise à jour.

Le groupe de sécurité n'existe pas dans le VPC

Vérifiez que le groupe de sécurité se trouve dans le VPC que vous avez spécifié. Si tel est le cas, vérifiez que vous avez spécifié l'ID de groupe de sécurité, et pas le nom du groupe de sécurité. Par exemple, la ressource AWS::EC2::SecurityGroupIngress possède les propriétés SourceSecurityGroupName et SourceSecurityGroupId. Pour les groupes de sécurité d'un VPC, vous devez utiliser la propriété SourceSecurityGroupId et définir l'ID du groupe de sécurité.

Échec de la restauration de la mise à jour

Une ressource dépendante ne parvient pas à rétablir son état d'origine, ce qui entraîne l'échec de la restauration (état UPDATE_ROLLBACK_FAILED). Par exemple, vous pouvez avoir une pile qui effectue une restauration vers une ancienne instance de base de données qui a été supprimée en dehors de CloudFormation. Comme 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 restaurer à celle-ci, ce qui entraîne l’échec du restauring de la mise à jour.

Selon l'origine du problème, vous pouvez corriger manuellement l'erreur et poursuivre la restauration. De cette façon, vous pourrez rétablir l'état de fonctionnement de la pile (état UPDATE_ROLLBACK_COMPLETE), puis réessayer de mettre à jour la pile. La liste suivante décrit les solutions à des erreurs courantes qui entraînent l'échec de restauration d'une mise à jour :

  • Le nombre de signaux requis n'a pas été reçu

    Utilisez la commande signal-resource pour envoyer manuellement le nombre de signaux de réussite requis à la ressource qui les attend, puis poursuivez la restauration de la mise à jour. Par exemple, pendant la restauration d'une mise à jour, les instances d'un groupe Auto Scaling ne parviennent pas toujours à signaler la réussite dans le délai spécifié. Dans ce cas, envoyez manuellement les signaux de réussite à ce groupe Auto Scaling. Lorsque vous poursuivez la restauration de la mise à jour, CloudFormation détecte vos signaux et procède à la restauration.

  • Des modifications ont été apportées à une ressource en dehors de CloudFormation

    Synchronisez manuellement les ressources pour qu'elles correspondent au modèle de la pile d'origine, puis poursuivez la restauration de la mise à jour. Par exemple, si vous avez supprimé manuellement une ressource que CloudFormation tente de restaurer, vous devez créer manuellement cette ressource avec le même nom et les mêmes propriétés que ceux de la pile d’origine.

  • Autorisations insuffisantes

    Vérifiez que vous disposez des autorisations IAM suffisantes pour modifier des ressources, puis poursuivez la restauration de la mise à jour. Par exemple, votre politique IAM peut vous permettre de créer un compartiment S3, mais pas de le modifier. Ajoutez les actions de modification à votre politique.

  • Jeton de sécurité non valide

    CloudFormation nécessite un nouvel ensemble d’informations d’identification. Aucune modification n'est requise. Continuez à restaurer la mise à jour, ce qui actualisera les informations d'identification.

  • Erreur de limitation

    Supprimez les ressources dont vous n'avez pas besoin ou demandez une augmentation de quota, puis poursuivez la restauration de la mise à jour. Par exemple, si le quota du nombre d'instances à la demande EC2 s'élève à 5 pour votre compte et si la restauration de la mise à jour dépasse cette valeur, elle échouera.

  • La ressource ne s'est pas stabilisée

    Une ressource n’a pas répondu car l’opération a peut-être dépassé le délai d’expiration de CloudFormation ou un service AWS a peut-être été interrompu. Aucune modification n'est requise. Une fois que l'opération de la ressource est terminée ou que le service AWS fonctionne de nouveau, poursuivez la restauration de la mise à jour.

Pour continuer à restaurer une mise à jour, vous pouvez utiliser la console CloudFormation ou l’interface de ligne de commande AWS (AWS CLI). Pour de plus amples informations, consultez Poursuite de la restauration d'une mise à jour.

Si aucune de ces solutions n’aboutit, vous pouvez ignorer les ressources que CloudFormation ne peut pas restaurer correctement. Pour plus d’informations, consultez le paramètre ResourcesToSkip pour l’opération API ContinueUpdateRollback dans la Référence d’API AWS CloudFormation CloudFormation. 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 modifier les ressources ou mettre à jour la pile 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 votre pile sera irrécupérable.

La condition d'attente n'a pas reçu le nombre de signaux requis à partir d'une instance Amazon EC2

Pour résoudre ce problème, essayez la méthode suivante :

  • Veuillez vous assurer que l’AMI que vous utilisez dispose des scripts d’aide CloudFormation installés. Si l'AMI n'inclut pas les scripts d'assistant, vous pouvez également les télécharger dans votre instance. Pour plus d’informations, consultez la Référence des scripts d’assistance CloudFormation dans le Guide de référence des modèles CloudFormation.

  • Vérifiez que la commande cfn-signal a été correctement exécutée au niveau de l'instance. Vous pouvez consulter des journaux, comme /var/log/cloud-init.log ou /var/log/cfn-init.log, afin de vous aider à déboguer le lancement de l'instance. Pour récupérer ces journaux, connectez-vous à votre instance. Notez toutefois que vous devez désactiver la restauration en cas d’échec pour éviter que CloudFormation ne supprime l’instance après l’échec de la création de la pile. Vous pouvez également publier les journaux dans Amazon CloudWatch. Pour Windows, vous pouvez consulter les journaux cfn dans C:\cfn\log et les journaux du service EC2Config dans %ProgramFiles%\Amazon\EC2ConfigService.

  • Vérifiez que l'instance est connectée à Internet. Si l'instance se trouve dans un VPC, elle doit être pouvoir se connecter à Internet via un périphérique NAT (si elle se trouve dans un sous-réseau privé) ou via une passerelle Internet (s'il s'agit d'un sous-réseau public). Pour tester la connexion Internet de l'instance, essayez d'accéder à une page web publique, tel que http://aws.amazon.com. Par exemple, vous pouvez exécuter la commande suivante au niveau de l'instance. Elle doit retourner un code d'état HTTP 200.

    curl -I https://aws.amazon.com

    Pour obtenir des informations sur la configuration d'un périphérique NAT, consultez NAT dans le Amazon VPC Guide de l'utilisateur.

Ressource retirée de la pile mais non supprimée

Lors d'une mise à jour de la pile, CloudFormation a retiré une ressource d'une pile mais n'a pas supprimé la ressource. La ressource existe toujours mais n'est plus accessible via CloudFormation. Cela peut se produire lors des mises à jour de pile où :

  • CloudFormation doit remplacer une ressource existante, de sorte qu'il crée d'abord une nouvelle ressource, puis tente de supprimer l'ancienne ressource.

  • Vous avez retiré la ressource du modèle de pile, de sorte que CloudFormation tente de supprimer la ressource de la pile.

Cependant, dans certains cas, CloudFormation ne peut pas supprimer la ressource. Par exemple, si l'utilisateur ne dispose pas des autorisations nécessaires pour supprimer une ressource d'un type donné.

CloudFormation tente de supprimer l'ancienne ressource trois fois. Si CloudFormation ne peut pas supprimer l'ancienne ressource, il retire l'ancienne ressource de la pile et continue à mettre à jour la pile. Lorsque la mise à jour de la pile est terminée, CloudFormation émet un événement de pile UPDATE_COMPLETE, mais inclut un StatusReason qui indique qu'une ou plusieurs ressources n'ont pas pu être supprimées. CloudFormation émet également un événement DELETE_FAILED pour la ressource spécifique, avec un StatusReason correspondant qui fournit plus de détails sur la raison pour laquelle CloudFormation n'a pas réussi à supprimer la ressource.

Pour résoudre ce problème, supprimez la ressource directement à l'aide de la console ou de l'API pour le service sous-jacent.

Contacter l'assistance

Si vous avez souscrit un plan AWS Support, vous pouvez créer une demande d'assistance technique à l'adresse https://console.aws.amazon.com/support/home#/. Avant de contacter l'assistance, collectez les informations suivantes :

  • ID de la pile. Vous trouverez l’ID de la pile dans l’onglet Vue d’ensemble de la console CloudFormation. Pour de plus amples informations, consultez Affichage des informations d’une pile à partir de la console CloudFormation.

    Important

    Veuillez ne pas modifier les ressources de la pile en dehors de CloudFormation. La modification des ressources de votre pile en dehors de CloudFormation pourrait rendre votre pile irrécupérable.

  • Messages d'erreur associés à la pile. Pour découvrir comment accéder aux messages d'erreur de la pile, consultez Guide de dépannage.

  • Pour les problèmes liés à Amazon EC2, veuillez rassembler les journaux cloud-init et cfn. Ces journaux sont publiés dans le répertoire /var/log/ de l'instance Amazon EC2. Ces journaux capturent les processus et les sorties de commande lors de la configuration de l'instance. Pour Windows, regroupez les journaux du service EC2Configure et les journaux cfn dans %ProgramFiles%\Amazon\EC2ConfigService et C:\cfn\log.

Vous pouvez également rechercher des réponses et poser des questions dans la communauté CloudFormation sur AWS re:Post.