Aujourd’hui on vous parle d’un petit outil en ligne de commande pour piloter vos stacks CloudFormation.

Si vous êtes utilisateur de CloudFormation, je pense que vous serez d’accord pour dire qu’on n’est pas vraiment aidé par le CLI AWS pour gérer nos stacks. Que cela soit pour le “package” et le “deploy” mais surtout pour aller chercher vos erreurs de déploiement, à moins de se construire des alias alambiqués et des wrappers scriptés, c’est assez fastidieux et parfois peu portable.

Here comes the rain

Rain...Cloud...ça y est ? (non parce que moi j’ai pas capté direct)

Rain est un outil en ligne de commande écrit en Go, développé par Steve Engledow, ingénieur solution chez AWS. Il est construit pour gérer vos templates et stacks CloudFormation.

https://github.com/aws-cloudformation/rain

rain interactive command line interface
rain interactive command line interface

Un des premiers avantages qu’on retrouve avec Rain c’est de l’interactivité et de la couleur. Il se base sur les commandes natives de la CLI d’AWS mais va vous demander de remplir les paramètres de stack manquants en vous proposant leur valeur par défaut si elle est spécifiée dans le template. Lors d'une mise à jour de stack, les valeurs précédentes de vos paramètres vous sont proposées. Un résumé des changements qui seront faits sur vos ressources (après création d’un changeset) vous est présenté avec une demande d’approbation de ces changements. On pourrait voir ça comme un terraform plan. Pendant l’exécution, les statuts des sous-stacks et des ressources sont affichés et mis à jour en temps réel, puis un résumé des outputs finaux une fois l’exécution terminée.

À noter également que si votre déploiement échoue, vous verrez les détails du rollback ainsi que l’erreur qui l’a déclenché au lieu du simple message d’erreur de déploiement de la commande native. Dans le cas d’une stack vide dans l’état ROLLBACK_COMPLETE, Rain a aussi la courtoisie de la supprimer automatiquement, ce que ne sait pas faire la commande aws CloudFormation deploy.

Deuxième intérêt de ce petit outil, comme je vous le disais, la consultation des logs de vos déploiements. Rain affiche les logs combinés de votre stack avec ceux des sous-stacks et filtre les messages moins intéressants (e.g. “Resource creation Initiated”, “REVIEW_IN_PROGRESS”, “CREATE_COMPLETE”...) en se concentrant sur les messages d’erreur ou ceux qui vous indiquent qu’une ressource doit être remplacée. L’option --all vous permet d’en récupérer l’intégralité. Cependant, les logs restent les logs fournis par CloudFormation et vous n’aurez pas plus d’information si jamais vous croisez les fameuses “internal failure” ou autres messages d’erreur encodés mais tronqués et indécodables du service AWS.

Enfin, Rain vous apporte une gestion des templates assez cool. Premièrement, vous retrouvez un formateur de templates pour une cohérence d'écriture, il privilégie notamment les syntaxes courtes pour les fonctions CloudFormation (Join, Sub, GetAtt…). C’est bien pratique, surtout quand on connaît le nombre de copier/coller qui sont faits dans les langages déclaratifs comme celui-là.

rain command line help
rain command line help

D’autres sous-commandes sont également à découvrir. Vous pouvez faire des diff de templates, lister les dépendances d’un template, générer un squelette de template en fonction des ressources que vous aurez sélectionnées ou encore gérer des stacks existantes sur votre compte. Vous avez également des options “--yes” et “--detach” qui vous permettent d’automatiser vos déploiements avec Rain. Retrouvez la documentation ici.

Le projet est plutôt actif, il a démarré en mai 2019 et la version 1.0.0 date de fin octobre 2020. Il n’y a qu’un seul vrai contributeur, à voir pour la pérennité du projet, mais son envergure n’exige pas non plus une grosse communauté. Je nuancerai tout de même sur le fait que malgré toute l’aide que Rain peut vous apporter sur vos stacks et templates CloudFormation, AWS CDK se dessine aujourd’hui comme l’outil de référence côté AWS. Les langages proposés pour l'écriture de votre IaC sont déjà largement matures en termes d’outillage, et la CLI de CDK vient également avec des fonctionnalités similaires de génération de templates, de diff et de gestion du cycle de vie de vos stacks.

Je vous invite d’ailleurs à visiter ce post de Teddy Ferdinand pour un peu plus de recul sur AWS CDK vis à vis de CloudFormation et Terraform.