Limites de rentabilité d'AWS et stratégie de sortie d'un fournisseur spécifique
Calculer le seuil de rentabilité entre Lambda et Fargate
Le choix d'une architecture d'infrastructure ne relève pas de la supériorité technique, mais du calcul mathématique des profils de trafic. Le cas de l'équipe d'exploitation d'Amazon Prime Video, qui a subi une "facture explosive" après avoir réparti ses services de surveillance de la qualité vidéo sur un grand nombre d'AWS Lambda et de Step Functions, est emblématique. À mesure que le trafic augmentait, les coûts de transition d'état ont explosé de manière linéaire ; ils ont alors intégré la logique dans des processus en mémoire sur un nœud de calcul unique et ont effectué une migration inverse vers un environnement de conteneurs Amazon ECS. Le résultat fut une réduction de 90 % de la facture totale d'infrastructure.
Le seuil de rentabilité entre les fonctions serverless et les runtimes de conteneurs est clair. Si l'on considère une latence de réponse moyenne de 118 ms pour AWS Lambda et une allocation mémoire de 1 Go, et que l'on suppose que les conteneurs AWS Fargate de remplacement sont exploités en permanence avec 2 tâches (spécifications de 2 vCPU, 4 Go de RAM) pour garantir une disponibilité minimale, le seuil de rentabilité entre les deux services converge à environ 96 millions de requêtes par mois. En dessous de ce seuil, le modèle de facturation proportionnelle à l'utilisation du serverless est avantageux, mais dès que cette ligne est franchie, le rapport coût-efficacité d'un runtime de conteneur Fargate, qui pré-alloue des ressources sous forme de coûts fixes, augmente.
Dans une architecture à fonctionnement continu, le calcul précis du seuil de rentabilité doit impérativement inclure les coûts réseau, qui représentent 30 % de la facture : les frais de NAT Gateway lors de l'isolation des conteneurs dans un sous-réseau privé (0,045 parheure,soit32,40 par mois pour une zone de disponibilité unique), les frais de base de l'Application Load Balancer (16,20 parmois)etlescou^tsd′allocationd′adressesIPpubliquesfixes(3,60 par mois et par tâche).
La formule de calcul pour déterminer la migration de l'infrastructure via un tableur est la suivante :
- Créez des lignes dans un tableur Google pour les variables suivantes : nombre total d'appels API mensuels (R), temps d'exécution moyen par appel API (D), taille de la mémoire virtuelle allouée au serverless (M), coût unitaire du vCPU par heure, et coûts fixes de maintenance de l'infrastructure (somme des équilibreurs de charge, NAT Gateways, etc.).
- Saisissez la formule suivante dans la cellule de calcul des coûts AWS Lambda :
=( (R / 1000000) * prix_unitaire_appel_base ) + ( R * D * (M / 1024) * taux_facturation_par_Go_seconde )
- Saisissez la formule suivante dans la cellule de calcul des coûts AWS Fargate :
=( nombre_conteneurs_en_service * ( (nombre_vCPU * prix_vCPU_par_heure) + (Go_mémoire * prix_mémoire_par_heure) ) * 720 ) + coûts_fixes_maintenance_infra
- Si les résultats de la simulation indiquent que le trafic mensuel dépasse 96 millions, effectuez la migration de l'infrastructure vers un environnement de conteneurs. Vous pouvez réduire les coûts de maintenance de l'infrastructure cloud de 20 % chaque mois.
Réduire le temps de migration grâce à l'abstraction du code
Si vous liez étroitement votre logique métier à une bibliothèque SDK ou à une interface propriétaire d'un cloud spécifique, votre application devient prisonnière de cette plateforme. Une erreur fréquente consiste à injecter le package de serveur web Express.js dans un runtime AWS Lambda et à l'envelopper dans une bibliothèque d'adaptateurs (par exemple, @codegenie/serverless-express) pour le coupler aux événements de proxy API Gateway. Cette structure gaspille les ressources CPU de la machine virtuelle FaaS en imposant à chaque requête une émulation de flux de socket virtuel et un processus de conversion de tampon. De plus, elle augmente la taille du déploiement des node_modules, ce qui déclenche des démarrages à froid (cold starts) et empêche toute migration de plateforme.
Pour contourner ce risque de couplage et réduire de 80 % le temps de migration vers un autre cloud, vous devez adopter l'Architecture Hexagonale (Hexagonal Architecture) comme principe de conception de la disposition de votre domaine. Isolez le domaine, qui contient la logique métier principale, des canaux de communication externes tels qu'API Gateway, les moteurs de base de données et les files d'attente de messages. Faites en sorte que le domaine ne dépende que des interfaces de ports (Ports), qui constituent une limite abstraite, et concevez une structure de plug-in où les composants adaptateurs (Adapters) se chargent de la mise en œuvre technologique spécifique de l'infrastructure réelle, permettant ainsi une interchangeabilité mutuelle.
Pour étendre la portabilité de la plateforme, vous pouvez introduire l'AWS Lambda Web Adapter (LWA). Il suffit d'ajouter une seule ligne de code de couche binaire dans la spécification de construction du Dockerfile.