Depuis quelques années, la spécification FOCUS (FinOps Open Cost and Usage Specification) s’impose comme le format commun pour normaliser les exports de facturation des majors comme AWS, Azure et GCP. Un seul modèle de données pour analyser ses coûts cloud, quel que soit le fournisseur.

Il existe déjà des outils qui exploitent ce format pour mettre en place une stratégie FinOps, mais souvent sous forme de Saas. Je n’ai pas trouvé d’alternative Open Source répondant à mes besoins, c’est pourquoi j’ai décidé de le développer moi même.

Le projet

Objectif

Obtenir un diagnostic rapide de la maturité FinOps d’une organisation, en m’appuyant sur des exports FOCUS. A partir de ce diagnostic il est ensuite plus simple de prioriser les actions à mener pour réduire le gaspillage et améliorer la visibilité des coûts.

Utilisation

Le script se lance en ligne de commande avec un export FOCUS (csv, parquet ou JSON) en entrée et produit un rapport console, un export JSON et un rapport HTML.

uv run focus_analyzer my_focus_export.csv

ou après un uv tool install --editable .

focus-analyzer my_focus_export.csv

Les features

  • Concentration (Pareto) : quelles ressources concentrent 80 % de la facture ?
  • Commitments sous-utilisés : quelle part des Reserved Instances / CUDs est billée comme Unused ?
  • Hygiène de tagging : quel pourcentage du coût est billé sur des ressources sans tag exploitable ?
  • Anomalies de coût : détection de pics/chutes journaliers par service via un z-score sur moyenne mobile.

Le rapport

Aperçu du rapport HTML généré en sortie du script :

La stack technique

Même si ma stack de prédilection est plutot NodeJS j’ai choisi de développer cet outil en Python (avec l’aide de Claude Code) pour me familiariser avec l’écosystème Python grandissant.

Je suis parti sur les derniers standard d’Astral :

  • uv pour la gestion des dépendances et l’environnement virtuel
  • ruff pour le linting et le formatage
  • pytest pour les tests unitaires
  • python-semantic-release pour la release sémantique automatique

Limitations

  • FOCUS 1.2 : Je me suis limité à l’analyse FOCUS 1.2 qui est la version actuellement supportée par GCP, AWS et Azure. J’envisage de faire évoluer le projet pour supporter les prochaines versions.

  • Format des données : selon le provider le script peut encore être capricieux, en effet, les majors respectent FOCUS mais se permettent d’ajouter des propriétés supplémentaires.

  • Volume de données : Je n’ai pas encore l’occasion de tester le script sur plusieurs millions de lignes.

  • PyPi : le projet n’est pas encore publié sur PyPi, je le distribue pour l’instant via GitHub.

Ce que ce projet montre

Au-delà de l’outil lui-même, c’est un exercice complet : compréhension d’un référentiel métier (FOCUS), architecture modulaire pensée pour évoluer sans dette, et un pipeline de qualité outillé de bout en bout.

Le code est disponible sur GitHub.