Retour aux articles
5 min de lecture

Anticipe ta facture AWS avec Infracost, arrête les surprises

Vois ce que tes changements Terraform coûtent avant de les appliquer. Fini les factures surprises de 10k€.

TerraformFinOpsDevOpsCost

Tu ajoutes une instance RDS dans Terraform. Le mois suivant AWS te facture 847€. T’avais oublié de vérifier le type d’instance!

Tu passes de gp2 à gp3 pour économiser. Sauf que tu t’es trompé dans les paramètres d’IOPS et maintenant ça coûte plus cher

Un collègue déploie une NAT Gateway pour des tests. Elle reste up 3 mois. Ça fait 300€ de gaspillés!

Infracost te montre ce que tes changements coûtent avant de les appliquer. Direct dans ton terminal, direct dans tes pull requests

Essayer de comprendre ta facture AWS

La facture AWS surprise dont personne parle

Tu sais qu’elle arrive. Tu fais des changements d’infra, t’attends la facture, tu croises les doigts pour que ça passe

J’ai vu des équipes passer 20 minutes en réunion à débattre s’il faut ajouter un load balancer. Personne sait ce que ça coûte. Quelqu’un dit ‘50€ par mois?’ C’est 200€ en vrai!

Le classique: tu spins des ressources pour une démo, tu oublies, tu les redécouvres 6 mois plus tard quand quelqu’un lit enfin le Cost Explorer

Le FinOps existe comme discipline parce que les factures cloud sont impossibles à prédire. La solution c’est pas d’embaucher une équipe FinOps, c’est de mettre la visibilité des coûts là où ça compte: dans le code review

Ce qu’Infracost fait vraiment

Tu écris du Terraform. Infracost le lit et te dit combien ça coûte

# Installation
curl -fsSL https://raw.githubusercontent.com/infracost/infracost/master/scripts/install.sh | sh

# Affiche le coût du plan actuel
infracost breakdown --path .

Le résultat ressemble à ça:

Project: my-infrastructure

 Name                                     Monthly Qty  Unit   Monthly Cost

 aws_instance.web
 ├─ Instance usage (Linux/UNIX, on-demand, t3.large)  730  hours       $60.74
 └─ root_block_device
    └─ Storage (general purpose SSD, gp3)             50  GB            $4.00

 aws_lb.main
 ├─ Application load balancer                         730  hours       $16.43
 └─ Load balancer capacity units                                       $5.84

 OVERALL TOTAL                                                         $87.01

Pas de devinettes. Pas de ‘laisse-moi checker la page de pricing.’ Juste des chiffres!

Le vrai pouvoir: le diff entre l’infra actuelle et celle proposée

infracost diff --path . --compare-to main

Te montre exactement ce que ta PR va ajouter à la facture mensuelle. J’ai chopé une erreur à 400€/mois parce que quelqu’un avait sélectionné la mauvaise classe d’instance RDS

Dans la CI/CD, là où ça doit être

Chaque PR Terraform reçoit un commentaire Infracost qui montre l’impact sur le budget

# .github/workflows/infracost.yml
name: Infracost
on: [pull_request]
jobs:
  infracost:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: infracost/actions/setup@v2
        with:
          api-key: ${{ secrets.INFRACOST_API_KEY }}
      - run: infracost breakdown --path . --format json --out-file /tmp/infracost.json
      - uses: infracost/actions/comment@v1
        with:
          path: /tmp/infracost.json

Les commentaires de PR ressemblent à ça:

💰 Infracost estimate: le coût mensuel va augmenter de 245€ 📈

  + aws_rds_cluster.postgres
    +215€  instance db.r5.large
    +30€   stockage 500GB

  ~ aws_instance.api
    -61€   t3.medium -> t3.large
    +61€

Total: 2847€ -> 3092€ (+245€/mois)

La personne qui review la PR voit ça. Elle demande ‘on a vraiment besoin de r5.large?’ En fait r5.xlarge était une typo. On corrige avant de merger!

C’est ça le FinOps. Pas des spreadsheets et des reviews trimestrielles. La visibilité des coûts dans le workflow où les changements se font!

Setup réel pour les projets clients

J’ajoute ça dans tous les repos Terraform de mes clients

D’abord, tu récupères une clé API chez Infracost (gratuit pour l’open source, ils ont un free tier pour les repos privés aussi)

Tu l’ajoutes dans les secrets GitHub comme INFRACOST_API_KEY

Tu crées le fichier workflow. Tu le configures pour tourner sur les PRs vers main

Résultat: chaque changement d’infra montre combien ça coûte. Pas de surprises

Un client ajoutait des clusters Elasticache dans tous les environnements. Dev, staging, prod, et trois failovers régionaux différents. Infracost a montré 1200€/mois. On est passés à Redis sur EC2 pour le non-prod. Réduit à 400€

Ce que ça attrape que tu rates

Mauvais types d’instance: Tu tapes t3.2xlarge au lieu de t3.large. Infracost montre +800€/mois. Tu corriges avant d’apply

Ressources oubliées: Cette base de test que t’as créée y’a 3 mois? Toujours là. Toujours à 215€/mois. Infracost breakdown te montre tout

NAT Gateway partout: Chaque VPC a une NAT Gateway. C’est 32€/mois par AZ. Multi-AZ sur 3 environnements? 288€/mois pour un accès internet dont t’as peut-être pas besoin

Stockage pas optimisé: T’utilises gp2 au lieu de gp3 pour les EBS. Infracost montre la différence. Tu switch et tu économises 20%

Load balancers pour une instance: T’as créé un ALB pour un seul container. C’est 16€/mois + les charges LCU. Utilise juste un target group ou l’accès direct à l’instance pour le dev

Marche avec Terragrunt aussi

Ça fonctionne nickel avec Terragrunt. Tu le lances dans chaque répertoire de module:

# root.hcl peut pas estimer, mais les modules individuels marchent
cd dev/vpc
infracost breakdown --path .

cd ../database
infracost breakdown --path .

Ou tu utilises infracost breakdown --config-file infracost.yml avec une config:

version: 0.1
projects:
  - path: dev/vpc
  - path: dev/database
  - path: dev/app

Ça montre l’estimation combinée de tous les modules

J’ai ça dans un Makefile: make cost lance Infracost sur tous les environnements et montre le total

Quand ça vaut le coup

N’importe quelle équipe qui fait tourner Terraform en prod. Si ta facture cloud mensuelle dépasse 1000€, ça se rentabilise immédiatement

Particulièrement utile quand:

  • Plusieurs personnes font des changements d’infra
  • T’as des juniors qui apprennent Terraform
  • T’as déjà eu des surprises sur les factures
  • Tu veux des reviews de coût intégrées dans ton process

Pas la peine si tu tournes une seule instance EC2 qui change jamais. Le coût est évident

La discipline FinOps que personne veut

Le FinOps c’est des spreadsheets, des politiques de tagging, des reviews trimestrielles, et quelqu’un qui te dit de rightsizer tes instances 6 mois après les avoir créées

C’est terrible. Personne veut une réunion de plus sur les coûts cloud

Le vrai FinOps: montrer les coûts au moment où se prennent les décisions. Dans la PR, avant le merge, quand tu peux encore changer sans redéployer

Infracost fait ça. Ça remplace pas le monitoring des coûts, mais ça prévient les erreurs qui rendent le monitoring nécessaire

Une erreur à 500€ choppée en code review coûte 0€. La même erreur choppée dans la facture du mois suivant coûte 500€ plus le temps de la corriger

Commencer

Installe-le:

# Linux
curl -fsSL https://raw.githubusercontent.com/infracost/infracost/master/scripts/install.sh | sh

# macOS
brew install infracost

# Arch
yay -S infracost

Récupère une clé API:

infracost auth login

Lance-le sur ton Terraform:

cd ton-projet-terraform
infracost breakdown --path .

Tu vois les chiffres. Tu l’ajoutes dans la CI. Tu arrêtes de deviner ce que les trucs coûtent

J’ai passé 6 mois à dire aux clients ‘on devrait checker ce que ça coûte.’ Maintenant Infracost leur montre. Ils voient le chiffre, ils prennent des décisions éclairées, personne se fait surprendre par la facture

La visibilité des coûts devrait être automatique, pas un truc que tu dois penser à vérifier. Infracost rend ça automatique

La réalité est souvent plus nuancée. Moi, la nuance ça m'ennuie. Je préfère la clarté.

Commentaires