Terraform - Attention à for_each
Utiliser for_each à la place de count peut avoir un impact important sur le graphe orienté acyclique généré par Terraform.
Démonstration avec un exemple.
Je construis actuellement un cluster Kubernetes dans lequel chaque noeud se doit d’avoir son propre enregistrement DNS. Dans mon cas, il s’agit ici d’une relation avec une cardinalité 1,1. Chaque enregistrement DNS est associé avec un seul neul et chaque noeud est associé avec un seul enregistrement DNS.
Le code ci dessus permet la création de 5 noeuds, accessibles avec digitalocean_droplet.nodes.
Créer les enregistrements DNS
Intuitivement, utiliser for_each peut sembler simple et évident pour réaliser cette tâche, mais cela peut poser problème, voyons pourquoi.
Le problème avec cette solution c’est que chaque enregistrement a pour dépendance implicite tous les noeuds. Il est possible de générer un graphe de dépendances avec le tout récent outil Pluralith (actuellement en version Alpha).
Ces dépendances supplémentaires sont complètement inutiles, pollue le graphe et viennent avec un coût sur les performances.
Utiliser count à la place de for_each
Plutôt que d’utiliser une solution itérative, il est possible de récupérer les propriétés d’un noeud avec une complexité O(1).
Maintenant chaque noeud est récupéré par indexation, sans itérer, ce qui se reflète dans le graphe par l’absence de dépendances inutiles et a un impact positif sur les performances et la lisibilité.
Bien plus lisible et optimisé! Attention toute fois à ne pas complétement abandonner for_each qui a d’autres avantages.