AWS CostExplorer

AWS API Cost Explorer : une API pour piloter, maîtriser et optimiser ses coûts.

AWS Cost Explorer est un outil qui permet, notamment depuis la console AWS, de suivre l’utilisation des services AWS, les coûts générés ainsi que leur évolution. Pour être utilisé, il doit être préalablement activé sur le compte AWS. Il comporte de nombreuses fonctionnalités permettant notamment de regrouper, et filtrer l’utilisation et les coûts selon des critères multiples. AWS Cost Explorer permet de concevoir des vues et des rapports personnalisables sur les coûts avec une granularité variable qui va d’une vision mensuelle jusqu’à une vision horaire dans certaines conditions, en passant par une vision quotidienne. Il permet aussi de se projeter sur l’évolution de ces coûts, de mesurer l’efficacité des instances réservées, et d’obtenir des recommandations pour optimiser le dimensionnement des ressources et les coûts au travers de plans d’économie (« Savings plans »).

Pourquoi utiliser l’API plutôt que l’interface Web ?

Bien que l’interface Web offre une belle ergonomie, et permette de consulter directement les informations de coûts, de personnaliser les rapports, Il existe plusieurs bonnes raisons qui justifient d’avoir recours à l’API. Voici quelques exemples concrets :

  • La nécessité de conserver et de manipuler les informations de coûts au-delà des 12 derniers mois (AWS Cost Explorer conserve les informations dans la limite de 12 mois)
  • Le besoin d’assurer un suivi fiable et régulier de l’évolution des coûts de manière automatique
  • Le fait de pouvoir créer des alertes en cas d’envolée des coûts (avec plus de flexibilité qu’ AWS Budget)
  • Le besoin d’agréger d’autres coûts, qui peuvent provenir d’autres fournisseurs ou d’autres sources pour produire, par exemple, des éléments de coûts complets
  • Le souhait de centraliser et de consolider les informations de coûts dans des tableaux financiers plus transverses (ex : Dashboards par Equipe/Produit/Service/BU …)
  • Le besoin de remonter les données dans des outils et des processus centraux de l’entreprise (ex : ERP, Business Intelligence)
  • Et enfin, pour anticiper l’évolution des coûts (Forecast) de manière avancée.

Dans un premier temps, nous vous conseillons d’utiliser l’interface Web d’AWS Cost Explorer pour vous familiariser avec les principes de la gestion des coûts AWS avant de concevoir et de mettre en oeuvre vos propres outils et automates.

L’API de Cost Explorer

AWS Cost Explorer dispose d’une vingtaine de fonctions disponibles par API afin de vous permettre de réaliser des opérations de manière programmatique. Ces fonctions sont intégrées dans le SDK AWS pour Python nommé Boto. Ces fonctions sont très bien documentées.

L’utilisation de cette API requière d’appliquer à minima la politique (« policy ») suivante sur le compte IAM utilisé :

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ce:*"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}

L’utilisation de cette API implique un coût de 0,01 $ par requête.

AWS fournit une documentation très complète de l’API.

Pour l’exemple, nous allons explorer une des fonctions de l’API qui permet de récupérer les informations sur les coûts et l’utilisation « get_cost_and_usage » au travers du SDK AWS pour Python (boto).

Exemple de script Python

Nous vous proposons ici un script basique pour appréhender simplement les principes de l’API AWS Cost Explorer. Dans cet exemple, il s’agit tout simplement de collecter les coûts mensuels relatifs à l’utilisation des différents services AWS sur une période donnée. Ce script peut bien évidemment être largement amélioré en vue, notamment, d’intégrer des filtres sur des catégories de coûts, ou des tags afin de découper l’analyse des coûts par projets, par types d’instance ou autre.

import boto3
import argparse

parser = argparse.ArgumentParser(description='Tracking AWS Costs.')
parser.add_argument('--start', help='start date : YYYY-MM-dd')
parser.add_argument('--end', help='end date : YYYY-MM-dd')
parser.add_argument('--granularity', help='Granularity : MONTHLY | DAILY | HOURLY')

args = parser.parse_args()

# Nous vous déconseillons d'inscrire des credentials directement dans les scripts au-delà de cet exemple par soucis de simplicité. Si l'AWS CLI est 
# installée et paramétrée vous pouvez vous dispenser de fournir les paramètres "aws_access_key" et "aws_secret_access_key" dans les lignes suivantes.
client = boto3.client('ce', aws_access_key_id='###################',
    aws_secret_access_key='#######################################')

results = []

token = None
while True:
    if token:
        kwargs = {'NextPageToken': token}
    else:
        kwargs = {}
    data = client.get_cost_and_usage(TimePeriod={'Start': args.start, 'End':  args.end}, Granularity=args.granularity, Metrics=['UnblendedCost'], GroupBy=[{'Type': 'DIMENSION', 'Key': 'LINKED_ACCOUNT'}, {'Type': 'DIMENSION', 'Key': 'SERVICE'}], **kwargs)
    results += data['ResultsByTime']
    token = data.get('NextPageToken')
    if not token:
        break
print(';'.join(['TimePeriod start', 'TimePeriod end','LinkedAccount', 'Service', 'Amount', 'Unit', 'Estimated']))
for result_by_time in results:
    for group in result_by_time['Groups']:
        amount = group['Metrics']['UnblendedCost']['Amount']
        unit = group['Metrics']['UnblendedCost']['Unit']
        print(result_by_time['TimePeriod']['Start'], ';', result_by_time['TimePeriod']['End'],';',';'.join(group['Keys']), ';', amount, ';', unit, ';', result_by_time['Estimated'])

Exploitation des résultats

Dans notre exemple, le script construit les résultats bruts sous la forme CSV , ce qui permet de les intégrer et de les manipuler facilement dans bien des outils.

Une fois les données brutes extraites par le script au format CSV, puis intégrées dans un tableur, pour être ensuite transformées dans un tableau croisé dynamique, nous pouvons produire les éléments graphiques et chiffrés pour suivre l’évolution des coûts. C’est la méthode la plus élémentaire, mais néanmoins efficace surtout dans les premières étapes de construction de vos tableaux de bord.

Nous pourrions tout aussi bien exécuter ce script de manière programmée chaque mois, stocker les informations de coûts datées dans une base de données et produire des rapports automatiques à l’aide d’un outil de reporting, de business intelligence.

Conclusion

L’utilisation de cette API peut vous permettre tout à la fois d’observer les coûts, de les imputer ou de les refacturer, de suivre l’évolution, de détecter des anomalies, ou encore d’identifier des opportunités d’optimisation et de sauvegarde des coûts. L’essentiel étant de mettre en oeuvre une démarche précoce, régulière et systématique, d’où l’intérêt de l’automatiser. La nature variable et parfois imprévisible des coûts dans le Cloud incite fortement à mettre en place au minimum des mécanismes de surveillance et de pilotage efficaces.

1 réflexion sur “AWS API Cost Explorer : une API pour piloter, maîtriser et optimiser ses coûts.”

  1. Ping : API AZURE Cost Management | digitneos

Laisser un commentaire