Du code Terraform vraiment factorisé avec Terragrunt 👹 !

~$ whoami

Denis GERMAIN

@zwindler

#geek 👨‍💻 #SF 🤖👽 #courseAPied 🏃‍♂️


*Les slides de ce talk sont sur le blog

Du code Terraform vraiment factorisé avec Terragrunt 👹 !

Pourquoi parler de Terragrunt ?

  • Utile chez
  • Un outil utilisé par pas mal de monde
  • Très peu de ressources en dehors de la documentation officielle

Mais... c'est quoi Terraform déjà ?

  • Décrit l'état souhaité de notre infrastructure avec un DSL
  • L'infrastructure devient
    • collaborative
    • versionnée
    • reproductible (répétable)

Terraform is an open-source infrastructure as code software tool that provides a consistent CLI workflow to manage cloud services.

A quoi ressemble le code ?

  • Hashicorp utilise son propre DSL (le HCL) pour décrire l'infra

center

A quoi le "plan" ?

  • Terraform stocke l'état actuel de l'infra (fichier state)
  • Au "plan" : fait la différence entre le state et l'état souhaité

center

Terraform chez

On utilise beaucoup terraform !

  • 900 fichiers terraform (“.tf”)
  • 35k+ lignes de code
  • ~4000 commits
  • 1400+ pull requests
  • ~40 contributeurs (SREs, devs, prestas, ...)

@zwindler

Les limites de Terraform

  • Monorepo avec un seul state

    • Blocage régulier du state
    • Temps de "plan" longs
  • Plurirepo (un repo par projet)

    • Code copié/collé d'un projet/équipe à l'autre
    • Erreurs humaines
    • Mauvaises pratiques potentiellement dupliquées

Les limites de Terraform

  • Monorepo avec plusieurs states

    • chaque dossier contient un "projet"
  • On peut factoriser :

  • Il reste encore du code dupliqué (variables)

Padok - Terraform Workspaces

Terragrunt à la rescousse




Github.com - Code source et distributions

It's time to D-D-D-D-D-DEMO !

center

Objectif de la démo

  • Déployer des folders/projects sur GCP avec terraform
  • Factoriser la totalité des variables de mon projet
    • Soit en les mutualisant dans l'arborescence
    • Soit en utilisant des fonctionnalités de Terragrunt

center

Récap'

  • Factorisé toutes les variables
    • soit en les mutualisant dans l'arborescence
    • soit en utilisant des fonctions de Terragrunt pour les "deviner"
  • Factorisé la conf du remote state
  • Appliqué des modifications à plusieurs projets en une commande

Conclusion

  • Parfois c'est un peu de la "bidouille"
    • mais aussi avec Terraform
  • Utile à partir d'une certaine taille
    • nécessite rigueur et réflexion préalable
  • Pas tellement complexe
    • mais peu de ressources sur le net

@zwindler
Slides et sources sur blog.zwindler.fr

Sources

Quelques billets de blogs qui en parle

Quelques dépôts git d'examples