Diagrams as Code
Diagrams sont deux librairies, une en Python l’autre en Go, permettant de créer rapidement des schémas d’architecture. Le gros avantage est qu’il n’y ouva pas besoin de recourir à un éditeur pour les créer, si ce n’est la présence de Graphviz sur votre poste de travail. On peut aussi imaginer d’ajouter un petit bout de code dans votre CI pour les générer automatiquement à chaque détection de sa modification.
Diagrams permet de créer des schémas pour la plupart des systèmes de Cloud : AWS, Azure, GCP, AlibabaCloud,… mais aussi pour le On-Premise et même pour les clusters Kubernetes.
Installation de Graphviz
Dans un premier procédons à l’installation de Graphviz :
Debian et dérivées :
Rhel et dérivées :
Arch et dérivées :
Sur macOS :
Sur windows :
Ecrire des schémas en Go Python
Installation de la librairie
Personnellement j’utilise pour gérer mes dépendances python sur la grande majorité de mes projets écrits en python. Pour ne pas ajouter de librairies non indispensables à mes projets, ce genre de librairies je l’installe au niveau des dépendances dev :
Plus classiquement avec pip
:
Ecrire un schéma
En plus de la librairie principale, il faut importer celles prenant en charge
votre système de cloud et qui permettra d’instancier des Nodes
.
Prenons par exemple le schéma suivant :
Ensuite, on instancie un Diagram, dans lequel on ajoute des instances des nodes.
Pour connecter les nodes entre eux il faut utiliser les opérateurs <<
, >>
en
fonction de la direction ou -
pour une connexion sans direction. Ici notre
ELB est connecté aux cinq instances EC2.
On peut utiliser les options suivantes au moment de l’instanciation de la classe diagrams :
format="jpg"
: pour choisir un format d’image parmi :png
,jpg
,svg
etpdf
.filename="nom-de-limage"
l’extension est fonction de celle choisie.show="False"
permet de dire qu’il ne faut pas ouvrir l’image une fois générée.graph_attr
,node_attr
andedge_attr
permet de définir des propriétés de rendu comme la couleur du fond, la taille des polices de caractère…
Pour regrouper des nodes en cluster on utilisera la librairie Cluster :
Pour regrouper les nodes en fonction par exemple de leur réseau, ou de leur utilité on utilisera les edges :
En plus des librairies de base il est possible de créer des classes custom utilisant des icones externes (en local, ou en ligne) :
Un autre exemple :
Toutes les classes sont décrites dans la documentation en ligne ↗. Cette documentation est très complète et regorge d’exemples, d’ailleurs je les ai utilisé pour écrire ce billet.
Ecrire des schémas en Go
Pour installer la version go de Diagrams :
Créez votre premier diagramme d’architecture en Go
Cette librairie reprend le même principe que celle en python :
Par contre, pas de trace de documentation ! Il faudra s’inspirer des exemples présent sur le projet ↗.
Conclusion
Vraiment sympathique ces Diagrams as Code
non ? Personnellement, je vais
l’utiliser dans mes futurs projets. Reste juste à créer une image de container
pour l’utiliser dans vos CI. Je l’ajouterai rapidement d’ailleurs.