110 votes

Comment puis-je déboguer rapidement et efficacement les modèles CloudFormation ?

CloudFormation est une offre puissante d'AWS qui permet la création programmatique de piles de ressources AWS, telles que le système de gestion de l'information (SGI). le niveau web d'une application, a cluster de calcul haute performance, o une pile d'applications complète, avec un seul appel API. C'est un outil extrêmement puissant. L'utiliser est sûrement considéré comme une bonne pratique AWS, surtout lorsqu'elle est combinée avec Chef, Marionnette, o cloud-init. Le déboguer me pousse au vice.

Prenons un exemple de production : Le stock modèles de cluster mongodb ne fonctionnera pas pour moi. Je ne sais pas vraiment pourquoi. Je suis sûr que c'est quelque chose de simple, comme c'est presque toujours le cas. Mon problème n'est pas que je n'arrive pas à comprendre ce qui ne va pas. C'est qu'il faut à la pile entre 20 et 30 minutes pour échouer, puis encore trois ou quatre minutes pour supprimer, en supposant qu'elle supprime les ressources correctement.

Qu'est-ce que je rate ? Je suis au courant de la --disable-rollback et l'utiliser comme de l'oxygène. J'ai appris il y a longtemps à emballer les messages de sortie avec cfn-signal et de les jeter comme du lest sur un bateau qui coule. Comment puis-je accélérer le processus de débogage des modèles, ou suis-je condamné à constater mes erreurs une demi-heure après les avoir commises ?

54voto

Luciano Issoe Points 96

Utilisez le aws cloudformation validate-template dans l'outil AWS CLI. Elle valide uniquement si votre modèle est un JSON ou YAML valide, et non si vos clés et valeurs sont correctes (par exemple, elle ne vérifie pas les fautes de frappe dans les clés).

25voto

Christopher Points 9715

Une autre option, un an plus tard, est d'abstraire ces modèles vers une bibliothèque tierce, telle que troposphère . Cette bibliothèque construit la charge utile JSON pour vous, et effectue de nombreuses validations en cours de route. Cela résout également le problème de "Wow gérer un fichier JSON de 1000 lignes est vraiment triste" problème.

14voto

wjordan Points 11

Comment puis-je accélérer le processus de débogage des modèles, ou suis-je condamné à toujours remarquer mes erreurs une demi-heure après les avoir commises ?

Voici quelques suggestions de meilleures pratiques, axées spécifiquement sur l'amélioration de la vitesse d'itération du développement de modèles CloudFormation complexes :

Utiliser les outils CloudFormation pour valider les modèles et les mises à jour des piles.

AWS les a déjà soulignés dans sa propre Meilleures pratiques document, donc je ne les répéterai pas :

Cette étape a pour but de détecter les erreurs évidentes de syntaxe ou de logique avant d'effectuer la création ou la mise à jour d'une pile.

Tester les ressources de manière isolée

Avant d'utiliser une ressource CloudFormation individuelle dans une pile complexe, assurez-vous de bien comprendre toute l'étendue du comportement de création/mise à jour/suppression de cette ressource, y compris les limites d'utilisation et les temps de démarrage/arrêt typiques, en testant d'abord leur comportement dans des piles autonomes plus petites.

  • Si vous développez ou utilisez des ressources personnalisées tierces, écrivez des tests unitaires en utilisant les bibliothèques appropriées pour la plate-forme linguistique, afin de vous assurer que la logique de l'application se comporte comme prévu dans tous les cas d'utilisation.
  • Sachez que le temps nécessaire à la création/mise à jour/suppression d'une ressource individuelle peut varier considérablement d'un type de ressource à l'autre, en fonction du comportement des appels API sous-jacents. Par exemple, une ressource complexe AWS::CloudFront::Distribution ressource peut parfois prendre 30 à 60 minutes à créer/mettre à jour/supprimer, tandis qu'une AWS::EC2::SecurityGroup mises à jour en secondes.
  • Les ressources individuelles peuvent présenter des bogues/problèmes/limitations dans leur mise en œuvre, qui sont beaucoup plus faciles à déboguer et à développer des solutions de contournement lorsqu'elles sont testées isolément, plutôt que dans une pile beaucoup plus grande. Gardez à l'esprit les limitations telles que Limites des services AWS selon les paramètres de votre compte AWS individuel, ou Région Disponibilité des services en fonction de la région dans laquelle vous créez votre pile.

Construisez des piles compliquées par petits incréments

Lors de la création ou de la mise à jour d'une pile, l'échec d'une seule ressource entraîne le retour en arrière de l'ensemble des modifications apportées à la ressource, ce qui peut détruire inutilement d'autres ressources créées avec succès et prendre beaucoup de temps lors de la construction d'une pile complexe avec un long graphe de dépendance des ressources associées.

La solution consiste à construire votre pile progressivement, par petits lots de mise à jour, en ajoutant des ressources une (ou quelques) fois à la fois. De cette façon, si un échec survient lors de la création ou de la mise à jour d'une ressource, le retour en arrière n'entraîne pas la destruction de l'ensemble des ressources de votre pile, mais uniquement de l'ensemble des ressources modifiées lors de la dernière mise à jour.

Suivre l'évolution des mises à jour de la pile

Veillez à Suivez l'évolution de la mise à jour de votre pile en visualisant les événements de la pile pendant qu'une création/mise à jour est effectuée. Ce sera le point de départ pour déboguer d'autres problèmes avec les ressources individuelles.

10voto

Wade Matveyenko Points 2018

Avez-vous regardé l'éditeur de modèles AWS CloudFormation qui est inclus dans l'application Boîte à outils AWS pour Eclipse ? Il dispose de la coloration syntaxique, de la complétion des déclarations et du déploiement vers AWS CloudFormation.

8voto

Pat Myron Points 620

En AWS CloudFormation linter fournit une analyse statique supplémentaire au-delà de aws cloudformation validate-template

Il vous indiquera quels types de ressources et d'instances ne sont pas disponibles dans certaines régions, validera les valeurs des propriétés par rapport aux valeurs autorisées, détectera les dépendances circulaires des ressources, les erreurs de syntaxe, les limites des modèles, et bien plus encore

En plus du CLI, l'un des mécanismes les plus populaires pour se souvenir d'exécuter le linter est l'installation d'un plugin d'éditeur comme le Extension de Visual Studio Code qui s'exécute sur chaque fichier sauvegardé

D'autres mécanismes comme Les hooks Git de pré-commit sont décrits ici.

Visual Studio Code extension example screenshot

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X