1. Introduction : La crise de la facture cloud et la culture FinOps
Pour les startups technologiques en pleine croissance, la facture mensuelle AWS, Azure ou GCP devient rapidement le deuxième poste de dépenses après la masse salariale. Durant la phase initiale de MVP, la priorité absolue est accordée à la vitesse de mise sur le marché, ce qui conduit à surprovisionner massivement les infrastructures sans surveillance.
Cependant, lors des levées de fonds en Série A ou B, ou lorsque la marge brute devient déterminante, des coûts cloud incontrôlés menacent directement la pérennité financière de l’entreprise.
Cycle typique de la dérive des coûts cloud
==========================================
1. Phase MVP ──► Choix de serveurs surdimensionnés (« tant que ça fonctionne »)
2. Mise en prod ──► Seuils minimaux d'Auto-scaling trop élevés par crainte de pics
3. Croissance vive ──► Environnements de test oubliés, volumes EBS orphelins, snapshots obsolètes
4. Choc budgétaire ──► Érosion des marges et injonction de la direction de réduire les coûts
Éteindre des serveurs au hasard n’est pas une stratégie. L’optimisation réelle relève d’une démarche FinOps (Cloud Financial Operations) pérenne qui concilie haute disponibilité, SLA exigeants et élimination continue du gaspillage.
2. Optimisation du Compute : Juste dimensionnement et autoscaling dynamique
1. Éliminer le surprovisionnement (Rightsizing)
La majorité des startups font tourner des instances avec un taux moyen d’utilisation du CPU inférieur à 10%. L’analyse des métriques p95 permet de réajuster les gabarits :
- Processeurs ARM de dernière génération : L’adoption de processeurs ARM (tels qu’AWS Graviton3/4) offre de meilleures performances par cœur tout en réduisant le coût horaire d’environ 20%.
- Instances à capacité extensible (Burstable) : Pour les services internes et charges intermittentes, privilégiez les instances basées sur des crédits CPU (série t4g).
2. Autoscaling dynamique avec KEDA sous Kubernetes
Les métriques CPU classiques réagissent souvent trop lentement. En intégrant KEDA (Kubernetes Event-driven Autoscaling), les pods s’adaptent instantanément à la profondeur réelle des files d’attente (Kafka, RabbitMQ, SQS) et descendent à zéro lors des creux d’activité.
3. Stratégie d’instances Spot et d’engagements pluriannuels
Pyramide d'approvisionnement des calculs
---------------------------------------
▲
│ [Instances Spot] ──► API sans état, batchs de calcul, runners CI/CD (60 à 90% de rabais)
│ [Savings Plans / RI] ──► Bases de données cœur, clusters Kafka (engagements de 1 à 3 ans)
│ [Instances On-Demand] ──► Tampon minimal pour absorber les imprévus
▼
Flotte Spot résiliente avec Karpenter
Sous Kubernetes, Karpenter gère dynamiquement un groupe d’instances Spot combinant plusieurs familles de processeurs, assurant un remplacement sans coupure en cas de révocation de capacité :
apiVersion: karpenter.sh/v1beta1
kind: NodePool
metadata:
name: stateless-spot-workers
spec:
template:
spec:
requirements:
- key: "karpenter.sh/capacity-type"
operator: In
values: ["spot", "on-demand"]
- key: "kubernetes.io/arch"
operator: In
values: ["arm64", "amd64"]
- key: "node.kubernetes.io/instance-category"
operator: In
values: ["c", "m", "r"]
disruption:
consolidationPolicy: WhenUnderutilized
expireAfter: 720h
4. Maîtrise des coûts cachés de stockage et de réseau
1. Optimisation du stockage bloc (EBS)
- Transition de gp2 vers gp3 : Les volumes gp3 découplent les IOPS de la taille de stockage, abaissant le coût de base de 20%.
- Purge des disques orphelins : Suppression automatisée des volumes EBS détachés et des snapshots obsolètes via des scripts Lambda programmés.
2. Archivage hiérarchique S3
Les journaux d’application ne doivent pas demeurer indéfiniment dans la classe S3 Standard. Définissez des règles de cycle de vie avec Terraform :
resource "aws_s3_bucket_lifecycle_configuration" "app_logs_lifecycle" {
bucket = aws_s3_bucket.app_logs.id
rule {
id = "auto-archive-logs"
status = "Enabled"
transition {
days = 30
storage_class = "STANDARD_IA"
}
transition {
days = 90
storage_class = "GLACIER"
}
expiration {
days = 365
}
}
}
5. Efficience des bases de données et pooling de connexions
Les bases de données managées (Amazon RDS, Cloud SQL) représentent souvent plus de 30% des dépenses. Le besoin d’augmenter la taille d’une base découle fréquemment de la saturation mémoire provoquée par des centaines de connexions concurrentes mal gérées.
Déploiement de PgBouncer en mode transactionnel
L’interposition d’un gestionnaire de connexions léger (PgBouncer) mutualise des milliers de requêtes clientes issues des conteneurs applicatifs vers quelques dizaines de sessions physiques actives sur le serveur de base de données.
6. Culture FinOps et indicateurs de rentabilité unitaire
- Étiquetage rigoureux (Inform) : Appliquer des balises de coûts (Cost Allocation Tags) par équipe, service et environnement.
- Revues d’optimisation (Optimize) : Vérifier régulièrement les taux de couverture des instances Spot et Savings Plans.
- Rentabilité unitaire (Operate) : Suivre le coût d’infrastructure moyen par utilisateur actif (MAU) comme métrique de pilotage technique et financière.