Introduction
L'allocation des coûts cloud est devenue critique pour les entreprises multi-comptes. Une mauvaise visibilité conduit à des surcoûts de 30 à 40 %. Ce tutoriel advanced vous guide dans la mise en place d'un système complet : tagging stratégique, automatisation via AWS SDK et reporting en temps réel. Vous apprendrez à associer chaque ressource à des centres de coûts, projets ou équipes avec une précision granulaire. L'approche combine infrastructure as code et scripts analytiques pour une gouvernance financière robuste.
Prérequis
- Compte AWS avec permissions Cost Explorer et Billing
- Terraform 1.7+
- Python 3.11 avec boto3
- Connaissances avancées en tagging et IAM
- Node.js optionnel pour dashboards
Configuration des tags de base
variable "cost_center" {
type = string
}
locals {
common_tags = {
Environment = "production"
CostCenter = var.cost_center
Project = "api-v2"
Owner = "finance-team"
CreatedBy = "terraform"
AllocationKey = "${var.cost_center}-${var.environment}"
}
}Ce module Terraform définit des tags standards obligatoires pour l'allocation. Chaque ressource héritera de ces tags permettant un filtrage précis dans Cost Explorer.
Déploiement ressources tagguées
resource "aws_lambda_function" "api_handler" {
function_name = "cost-allocated-api"
role = aws_iam_role.lambda_role.arn
handler = "index.handler"
runtime = "python3.11"
tags = merge(local.common_tags, {
Service = "api"
})
}Application concrète des tags sur une Lambda. Les tags AllocationKey permettent de regrouper les coûts par centre de coût dans les rapports mensuels.
Script d'allocation avancée
import boto3
from datetime import datetime, timedelta
def allocate_costs(cost_center: str):
ce = boto3.client('ce')
end = datetime.now().strftime('%Y-%m-%d')
start = (datetime.now() - timedelta(days=30)).strftime('%Y-%m-%d')
response = ce.get_cost_and_usage(
TimePeriod={'Start': start, 'End': end},
Granularity='DAILY',
Metrics=['BlendedCost'],
Filter={'Tags': {'Key': 'CostCenter', 'Values': [cost_center]}},
GroupBy=[{'Type': 'TAG', 'Key': 'Project'}]
)
return response['ResultsByTime']Script Python fonctionnel qui interroge Cost Explorer et filtre par CostCenter. Retourne les coûts quotidiens ventilés par projet pour reporting automatisé.
Génération rapport CSV
import csv
from cost_allocator import allocate_costs
def export_to_csv(cost_center: str, filename: str):
data = allocate_costs(cost_center)
with open(filename, 'w', newline='') as f:
writer = csv.writer(f)
writer.writerow(['Date', 'Project', 'Cost'])
for day in data:
for group in day['Groups']:
writer.writerow([
day['TimePeriod']['Start'],
group['Keys'][0],
group['Metrics']['BlendedCost']['Amount']
])Fonction complète qui exporte les résultats en CSV. Peut être planifiée via EventBridge pour des rapports hebdomadaires automatiques.
Configuration IAM minimale
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ce:GetCostAndUsage",
"ce:GetCostAndUsageWithResources",
"ce:GetTags"
],
"Resource": "*"
}
]
}Politique IAM minimale permettant aux scripts d'accéder uniquement aux données de coûts sans droits de modification.
Bonnes pratiques
- Toujours imposer les tags AllocationKey et CostCenter via SCP
- Utiliser des tags techniques et métier distincts
- Automatiser la validation des tags avec Lambda
- Exporter les rapports vers S3 et Athena pour requêtes SQL
- Revoir mensuellement les règles d'allocation avec les équipes finance
Erreurs courantes à éviter
- Oublier d'appliquer les tags sur les ressources créées manuellement
- Utiliser des valeurs de tags incohérentes entre environnements
- Ignorer les coûts des services partagés (support, management)
- Ne pas versionner les scripts d'allocation
Pour aller plus loin
Approfondissez ces concepts avec nos formations dédiées au FinOps et à l'optimisation cloud : https://learni-group.com/formations