Accueil Nos publications Blog Intégrez vos analyses FinOps dans vos CI/CD

Intégrez vos analyses FinOps dans vos CI/CD

article-blog-finops

Sommaire

  1. Qu’est-ce que l’approche FinOps ?
  2. La mise en place technique d’analyse FinOps
  3. Conclusion

Les infrastructures cloud jouent un rôle central dans la transformation numérique des entreprises, maîtriser les coûts liés à ces environnements devient de plus en plus une priorité. Si le cloud offre une flexibilité et une scalabilité inégalées, il est aussi synonyme de dépenses qui peuvent rapidement échapper à tout contrôle sans une gestion proactive.

Avec l’adoption croissante des outils d’Infrastructure as Code (IaC) tels que Terraform ou Ansible, les équipes DevOps automatisent le déploiement de leurs infrastructures, gagnant ainsi en efficacité. Cependant, cette automatisation s’accompagne d’un défi majeur : la visibilité sur les coûts. Lorsque des modifications d’infrastructure sont intégrées dans un pipeline CI/CD, leurs implications financières sont souvent découvertes bien trop tard, une fois les ressources provisionnées.

C’est dans ce contexte qu’émerge l’approche FinOps ainsi que l’intégration des outils d’analyse financière directement dans les pipelines CI/CD. Ces solutions permettent d’estimer les coûts en amont, offrant maîtrise totale de leur budget cloud.

Cet article explore ce qu’est l’approche FinOps et comment des outils peuvent être intégrés efficacement dans vos pipelines pour vous aider dans vos analyses, avec un focus particulier sur Infracost, une solution dédiée à l’analyse des coûts des infrastructures cloud définies avec Terraform, nous verrons également l’ensemble des bonnes pratiques à mettre en place sur vos cloud provider.


Qu’est-ce que l’approche FinOps ?

Contraction du mot « Finance » et « Opérations », l’approche FinOps est une méthodologie qui vise à optimiser la gestion des coûts du cloud en favorisant le lien entre équipe techniques et financières.

Elle repose sur trois principes :

  • La visibilité
  • La responsabilisation
  • L’optimisation continue

Dans les projets portant sur le cloud cela se traduit par la mise en place de processus et d’outils permettant d’aligner les objectifs opérationnels avec les contraintes budgétaires.

Une approche FinOps efficace permet une transparence totale sur les dépenses cloud. Les équipes techniques doivent avoir une vue clair des coûts générés par chaque composant de l’infrastructure, tandis que les décideurs financiers doivent pouvoir anticiper l’impact budgétaire des décisions technologiques.

En parallèle, la responsabilisation joue un rôle clé dans la réussite d’une approche FinOps, il s’agit de faire en sorte que chaque équipe, qu’elle soit technique ou financière, prenne conscience de l’impact de ses décisions sur le coût global du projet. Cette responsabilisation ne se limite pas aux équipes de gestion budgétaire : les développeurs, les architectes cloud, et même les chefs de projet doivent intégrer une réflexion sur les coûts dans leurs pratiques quotidiennes.

Enfin, l’optimisation continue implique de réévaluer régulièrement les choix d’architecture, la suppression des actifs inutilisés, ou encore l’utilisation d’instances réservées lorsque cela est pertinent. L’objectif ultime est de maximiser la valeur des investissements cloud tout en minimisant les coûts superflus.

La mise en place technique d’analyse FinOps

Infracost est un outil qui permet de fournir des estimations précises des coûts cloud en analysant les fichiers d’infrastructure as code (IaC), en particulier ceux créés avec Terraform. L’objectif principal d’Infracost est d’aider les équipes DevOps, SRE, et FinOps à comprendre l’impact financier de leurs décisions avant même que l’infrastructure ne soit déployée.

Caractéristiques principales :

  • Analyse des configurations Terraform et estimation des coûts associés.
  • Support multi-cloud : AWS, Azure, Google Cloud, et d’autres fournisseurs majeurs.
  • Intégration dans les pipelines CI/CD pour automatiser l’analyse financière lors des revues de code.
  • Comparaison des changements de coûts entre différentes versions d’une infrastructure.

Fonctionnement :

  • Infracost analyse les fichiers .tf ou les plans Terraform générés (terraform plan) pour identifier les ressources cloud spécifiées.
  • L’outil interroge les API des fournisseurs cloud pour récupérer les tarifs des services utilisés. Il applique ensuite ces tarifs aux configurations pour fournir une estimation précise des coûts mensuels.
  • Infracost génère un rapport clair et lisible, présentant les coûts par ressource, ainsi que les éventuelles variations si des modifications sont apportées.
  • Commentaires automatiques dans les Pull Requests : Infracost ajoute un commentaire dans les PR, montrant les différences de coûts entre la branche actuelle et la branche de base.
  • Alertes automatisées : Les équipes peuvent définir des seuils pour identifier rapidement les changements significatifs de coûts.
logo infracost

Infracost propose une intégration native avec les plateformes de contrôle de version comme GitHub, GitLab, et Azure Repository. Cette méthode simplifie l’analyse des coûts en ajoutant automatiquement des commentaires détaillés sur les Pull Requests (PR). Une fois configuré, Infracost compare les modifications dans vos fichiers Terraform et affiche les impacts financiers directement dans la PR. Cette approche favorise la collaboration entre les équipes en rendant les implications financières transparentes dès la phase de développement.

Pour mettre en place cette intégration, il suffit de connecter votre dépôt à la plateforme Infracost, d’ajouter un fichier de configuration infracost.yml, et le bot Infracost se charge du reste : il analyse chaque modification et guide les développeurs dans leurs choix. C’est une solution rapide, non invasive et idéale pour une visibilité immédiate des coûts.

Article finops néo

Exemple de script CI/CD Gitlab :

infracost:
  stage: infracost
  image:
    name: infracost/infracost:ci-0.10
    entrypoint:
      - ''
  dependencies:
    - plan_json
  script:
    - >-
      find examples -type f  -name '*.tf' -o -name '*.hcl' -o -name '*.tfvars' |
      xargs sed -i 's/m5.4xlarge/m5.8xlarge/g'
    - >-
      find examples -type f  -name '*.tf' -o -name '*.hcl' -o -name '*.tfvars' |
      xargs sed -i 's/t2.micro/t2.medium/g'
    - |
      infracost diff --path=${TF_ROOT}/full-plan.json \
                     --format=json \
                     --out-file=infracost.json
    - >-
      infracost comment gitlab --path=infracost.json --repo=$CI_PROJECT_PATH
      --merge-request=1 --gitlab-server-url=$CI_SERVER_URL
      --gitlab-token=$GITLAB_TOKEN --behavior=update --dry-run >
      /tmp/infracost_comment.md
    - >-
      [ "$UPDATE_GOLDEN_FILES" = true ] && cp /tmp/infracost_comment.md
      testdata/plan-json-gitlab-terraform_comment_golden.md
    - >-
      [ "$UPDATE_GOLDEN_FILES" != true ] && diff
      testdata/plan-json-gitlab-terraform_comment_golden.md
      /tmp/infracost_comment.md
  variables:
    INFRACOST_API_KEY: $INFRACOST_API_KEY
    GITLAB_TOKEN: $GITLAB_TOKEN

Exemple script CI/CD Github Action

name: Infracost Cost Analysis

on:
  pull_request:
    branches:
      - main
      - dev

jobs:
  infracost:
    name: Analyze Infrastructure Costs
    runs-on: ubuntu-latest

    steps:
      # Vérifier le code
      - name: Checkout code
        uses: actions/checkout@v3

      # Configurer Terraform
      - name: Setup Terraform
        uses: hashicorp/setup-terraform@v2
        with:
          terraform_version: 1.5.7  # Remplacez par la version appropriée

      # Installer Infracost
      - name: Install Infracost
        run: |
          curl -fsSL https://raw.githubusercontent.com/infracost/infracost/master/scripts/install.sh | sh
          echo "$INFRACOST_API_KEY" > ~/.infracost_api_key

      # Initialiser Terraform
      - name: Terraform Init
        run: terraform init

      # Créer un plan Terraform en format JSON
      - name: Terraform Plan
        run: terraform plan -out=tfplan.binary
      - name: Convert Terraform Plan to JSON
        run: terraform show -json tfplan.binary > plan.json

      # Analyser les coûts avec Infracost
      - name: Run Infracost
        run: infracost breakdown --path=plan.json --format=json --out-file=infracost.json

      # Poster les résultats dans la Pull Request
      - name: Post Infracost Comment
        uses: infracost/infracost-gh-action@v2
        with:
          path: infracost.json
          behavior: update  # Met à jour le commentaire si un existe déjà
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          INFRACOST_API_KEY: ${{ secrets.INFRACOST_API_KEY }}

L’intégration d’Infracost via un script dans votre pipeline CI/CD offre une grande flexibilité pour analyser les coûts de votre infrastructure directement dans vos workflows d’automatisation. Cette approche repose sur l’ajout d’étapes spécifiques à votre pipeline pour générer un plan Terraform, analyser les coûts associés avec Infracost, et afficher les résultats dans les logs ou les Pull Requests.

Pour GitLab, par exemple, vous pouvez configurer un job dans le fichier .gitlab-ci.yml pour exécuter les commandes nécessaires : initialisation de Terraform, génération d’un plan (plan.json), analyse avec Infracost, et ajout d’un commentaire sur la Pull Request via l’API GitLab. Avec GitHub Actions, un workflow similaire peut être configuré pour intégrer l’analyse dans vos actions.

Ce fonctionnement repose sur trois étapes clés :

  • Préparation : Terraform génère un plan détaillant les modifications prévues.
  • Analyse : Infracost utilise ce plan pour calculer l’impact financier des modifications.
  • Affichage : Les résultats sont affichés dans les logs CI/CD ou injectés directement dans les Pull Requests.

Consulter vos rapports

Les rapports générés par Infracost offrent une visibilité immédiate et détaillée sur les coûts liés aux changements d’infrastructure avant leur déploiement. En affichant directement dans les Pull Request les variations de prix entre l’état actuel et le plan proposé, ils permettent aux équipes de DevOps et FinOps de prendre des décisions éclairées.

infracost dashboard

Exemple d’affichage de resultat dans une Pull request (Sur un projet Terraform de déploiement d’un EKS sur AWS)

Le rapport permet également une décomposition des prix élément par élément ainsi qu’une recette finale qui permet de vous donner un idée des coûts.

──────────────────────────────────
Project: ProjectTerraform
Module path: ProjectTerraform

+ aws_eks_cluster.eks_cluster
  +$73

    + EKS cluster
      +$73

+ module.core_compute.aws_nat_gateway.nat_gw
  +$35

    + NAT gateway
      +$35

    + Data processed
      Monthly cost depends on usage
        +$0.048 per GB

+ aws_eks_node_group.eks_node_group
  +$25

    + Instance usage (Linux/UNIX, on-demand, t2.micro)
      +$20

    + Storage (general purpose SSD, gp2)
      +$5

+ aws_lb.alb
  +$18

    + Application load balancer
      +$18

    + Load balancer capacity units
      Monthly cost depends on usage
        +$5.84 per LCU

+ module.core_compute.aws_instance.ec2_ubuntu
  +$11

    + Instance usage (Linux/UNIX, on-demand, t2.micro)
      +$10

    + root_block_device
    
        + Storage (general purpose SSD, gp2)
          +$0.96

+ module.core_compute.aws_instance.ec2_ubuntu_pub
  +$11

    + Instance usage (Linux/UNIX, on-demand, t2.micro)
      +$10

    + root_block_device
    
        + Storage (general purpose SSD, gp2)
          +$0.96

- module.eks.module.eks.aws_cloudwatch_log_group.this[0]
  Monthly cost depends on usage

    - Data ingested
      Monthly cost depends on usage
        -$0.57 per GB

    - Archival Storage
      Monthly cost depends on usage
        -$0.03 per GB

    - Insights queries data scanned
      Monthly cost depends on usage
        -$0.0057 per GB

- module.eks.module.eks.module.kms.aws_kms_key.this[0]
  -$1

    - Customer master key
      -$1

    - Requests
      Monthly cost depends on usage
        -$0.03 per 10k requests

    - ECC GenerateDataKeyPair requests
      Monthly cost depends on usage
        -$0.10 per 10k requests

    - RSA GenerateDataKeyPair requests
      Monthly cost depends on usage
        -$0.10 per 10k requests

- module.core_compute.aws_instance.ec2
  -$10

    - Instance usage (Linux/UNIX, on-demand, t2.micro)
      -$9

    - root_block_device
    
        - Storage (general purpose SSD, gp2)
          -$0.88

- module.eks.module.eks.module.eks_managed_node_group["default"].aws_eks_node_group.this[0]
  -$23

    - module.eks.module.eks.module.eks_managed_node_group["default"].aws_launch_template.this[0]
    
        - Instance usage (Linux/UNIX, on-demand, t2.micro)
          -$18
    
        - EC2 detailed monitoring
          -$4

- module.eks.module.eks.aws_eks_cluster.this[0]
  -$438

    - EKS cluster (extended support)
      -$438

Monthly cost change for ProjectTerraform (Module path: ProjectTerraform)
Amount:  -$298 ($472 → $173)
Percent: -63%

Cette transparence favorise la collaboration en intégrant les considérations budgétaires dès la phase de développement, évitant ainsi les mauvaises surprises en production, en intégrant ces rapports dans les pipelines CI/CD, les équipes bénéficient d’un outil puissant pour maintenir une infrastructure efficace et économiquement viable.

Gestion financière des providers

Une gouvernance financière optimale dans le cloud nécessite l’adoption de pratiques universelles, indépendamment du fournisseur. Voici une exploration approfondie de ces pratiques :

  • Surveillance continue des dépenses et de l’utilisation des ressources

La surveillance en temps réel permet de détecter rapidement les anomalies, d’identifier les opportunités d’optimisation et de prévenir les dépassements budgétaires. Vous pouvez configuré des alertes pour être informé des dépassements de seuils prédéfinis et intégrez ces outils de surveillance aux tableaux de bord pour une visibilité centralisée :

- AWS : AWS Cost Explorer & CloudWatch
- Azure : Azure Monitor & Azure Cost Management and Billing
- GCP : Google Cloud Operations Suite & GCP Billing Reports
  • Politiques de Tagging

L’implémentation de politiques de tagging efficaces est essentielle pour une gestion financière précise des ressources cloud. Les tags, constitués de paires clé-valeur, permettent de catégoriser et d’identifier les ressources, facilitant ainsi l’attribution des coûts aux différentes unités organisationnelles, projets ou environnements.

- AWS : Implémentez des Tag Policies via AWS Organizations
- Azure : Resource Groups
- GCP : Labels

Définissez une convention de nommage claire et uniforme pour les balises et assurez-vous que les balises sont appliquées dès la création des ressources.​

  • Formation et sensibilisation aux pratiques FinOps

Une équipe formée est essentielle pour une gestion financière efficace du cloud, même si encouragez une culture de responsabilité financière au sein des équipes techniques est utile, il est également possible de se former a ce sujet

Par exemple avec une formation numérique sur la gestion financière du cloud proposés par AWS.

Ou pour les équipes DevOps/Cloud Architect une certification DevOps

  • L’Autoscaling pour l’optimisation des ressources

L’automatisation réduit les erreurs humaines, assure une utilisation optimale des ressources et contribue significativement à la maîtrise des coûts, automatisez l’extinction des environnements de développement/test en dehors des heures de travail, mettez en place des scripts pour identifier et supprimer les ressources orphelines ou non utilisées.

- AWS : AWS Auto Scaling
- Azure: Automation Runbooks
- GCP : Autoscaler

Pour aller plus loin sur la maitrise des coûts du cloud je vous renvoie vers l’excellent article à ce sujet de Théau Paty.

En intégrant ces pratiques et en tirant parti des outils spécifiques à chaque provider, vous êtes en mesure d’établir une gouvernance financière robuste. Cela permet d’aligner les opérations cloud sur les objectifs économiques.

Conclusion

Dans cet article, nous avons exploré comment intégrer une approche FinOps efficace, en commençant par l’analyse financière dans les pipelines CI/CD avec Infracost, puis en élargissant notre réflexion aux solutions offertes par les fournisseurs cloud directement, et les bonnes pratiques à retenir !

L’approche Infracost nous a montré comment intégrer l’analyse des coûts dès la phase de développement, grâce à des bots et des scripts CI/CD, permettant aux équipes d’anticiper l’impact budgétaire des modifications d’infrastructure avant leur déploiement. Ensuite, nous avons détaillé les stratégies spécifiques à AWS, Azure et GCP pour assurer une meilleure maîtrise financière des ressources cloud. La mise en place d’alertes budgétaires, de politiques de tagging rigoureuses, de plans d’optimisation, d’autoscaling, et d’outils analytiques avancés est cruciale pour garantir un suivi efficace des dépenses.

Mettre en place une gouvernance FinOps ne se limite donc pas à un simple suivi des coûts, mais passe par une approche outillée, automatisée et intégrée à toutes les phases du cycle de vie des infrastructures cloud. En combinant observabilité, automatisation et bonnes pratiques, vous pouvez optimiser votre usage du cloud tout en maîtrisant vos dépenses.

Vous souhaitez en savoir plus ? Contactez-nous !

Aller au contenu principal