Cold starts Lambda et leur impact sur la facture AWS

kgilles 14/07/2024
RÉSOLU
kgilles
Auteur Actif
Avatar de kgilles
kgilles
Auteur Actif

Salut la tech ! On a une app serverless sur AWS Lambda et la facture monte en flèche. J'ai l'impression que les cold starts sont en grande partie responsables, surtout quand on a des pics de trafic. Genre ma lambda prend 3-5s au lieu des 200ms habituelles. Des astuces pour réduire ça sans ruiner le budget ?

14/07/2024 à 17:27

17 commentaires

leveque-jerome
Membre Actif
Avatar de leveque-jerome
leveque-jerome
Membre Actif

Hello ! C'est quoi ton runtime ? Java .NET ou Python/Node.js ? Les cold starts sont bien pires avec les JVM. Et tu es en VPC ?

15/07/2024 à 16:59
cparent
Membre Actif
Avatar de cparent
cparent
Membre Actif

Directement, t'as regardé la Provisioned Concurrency pour tes fonctions critiques ? Ça coûte un bras mais ça élimine quasiment les cold starts.

16/07/2024 à 16:07
kgilles
Auteur Actif
Avatar de kgilles
kgilles
Auteur Actif

On est en Python. Et oui toutes nos lambdas sont dans un VPC pour accéder à des ressources internes. C'est ça qui doit faire mal, non ?

17/07/2024 à 15:37
nberger
Membre
Avatar de nberger
nberger
Membre

Ah oui, VPC + Python, c'est une combo connue pour les cold starts pénibles. Le temps que l'ENI s'attache à l'instance, ça prend du temps. Tu peux activer l'option VPC Access pour un démarrage plus rapide (prends quelques secondes pour l'activation)

Modifié le 23/05/2026 à 16:20
leveque-jerome
Membre Actif
Avatar de leveque-jerome
leveque-jerome
Membre Actif

Pense aussi à optimiser ton package de déploiement. Moins de libs, moins de code, plus rapide le chargement. Tu as une taille de package raisonnable ?

19/07/2024 à 09:37
kgilles
Auteur Actif
Avatar de kgilles
kgilles
Auteur Actif

Le package est déjà hyper optimisé, on est sur du 20-30Mo max. VPC Access est déjà activé. Pour la Provisioned Concurrency on essaie d'éviter, ça coûte super cher sur la durée.

Modifié le 23/05/2026 à 16:20
becker-aime
Membre
Avatar de becker-aime
becker-aime
Membre

C'est quoi la mémoire allouée à tes fonctions ? Augmenter la RAM allouée peut aussi booster le CPU de la Lambda et donc accélérer le boot, même si ça augmente le coût par ms.

21/07/2024 à 03:10
cparent
Membre Actif
Avatar de cparent
cparent
Membre Actif

pour python, si tu as des imports coûteux, essaie de faire du lazy loading, genre n'importe pas tout au niveau global mais à l'intérieur de ta fonction handler quand c'est nécessaire. ça peut aider pas mal.

22/07/2024 à 01:36
kgilles
Auteur Actif
Avatar de kgilles
kgilles
Auteur Actif

On est à 512MB de RAM, on a testé 1GB sur certaines fonctions mais sans effet révolutionnaire sur les cold starts. Le lazy loading c'est une bonne piste, faut que je refactorise un peu.

23/07/2024 à 01:32
nberger
Membre
Avatar de nberger
nberger
Membre

Le problème avec les VPC c'est aussi que si tu as pas mal de security groups ou des règles réseau complexes ça peut impacter le temps de démarrage de l'ENI. Simplifier l'infra réseau si possible.

23/07/2024 à 19:50
leveque-jerome
Membre Actif
Avatar de leveque-jerome
leveque-jerome
Membre Actif

Tu utilises EFS pour des dépendances partagées ou du code lourd ? Des fois EFS peut rajouter sa propre latence au démarrage, contre-productif pour les cold starts.

24/07/2024 à 15:21
kgilles
Auteur Actif
Avatar de kgilles
kgilles
Auteur Actif

non pas d'efs. je vais regarder le lazy loading de plus près. et j'ai pas mal d'accès à rds et sqs dès le début du handler, ptete que les clients sont instanciés trop tôt.

25/07/2024 à 14:47
becker-aime
Membre
Avatar de becker-aime
becker-aime
Membre

C'est exactement ça, si tes clients RDS ou SQS sont dans le scope global, ils s'initialisent à chaque cold start. Mets-les hors du handler mais assure-toi qu'ils sont réutilisés pour les warm invocations.

26/07/2024 à 09:55
cparent
Membre Actif
Avatar de cparent
cparent
Membre Actif

Un pattern classique c'est d'initialiser les clients et les connexions DB dans le global scope mais de vérifier si l'objet existe déjà avant de le recréer pour les invocations suivantes.

27/07/2024 à 06:11
kgilles
Auteur Actif
Avatar de kgilles
kgilles
Auteur Actif

Ok je vais refactoriser pour que les clients soient instanciés une seule fois au lieu d'à chaque fois. Ça semble être le gros point faible. Merci pour le coup de main !

28/07/2024 à 03:58
leveque-jerome
Membre Actif
Avatar de leveque-jerome
leveque-jerome
Membre Actif

Et pense à CloudWatch Lambda Insights pour avoir des métriques plus fines sur l'étape d'initialisation de ta fonction, ça t'aidera à identifier les vrais goulots d'étranglement.

29/07/2024 à 02:35
kgilles
Auteur Actif
Avatar de kgilles
kgilles
Auteur Actif

j'ai réécrit les init de clients comme suggéré et les init duration dans insights ont bien baissé. la facture devrait suivre. pour les gros pics on mettra un peu de provisioned concurrency, ça sera moins cher que de laisser les cold starts s'envoler. thx à tous !

Modifié le 23/05/2026 à 16:20

Laisser une réponse

Vous devez être connecté pour poster un message !

Rejoindre la communauté

Recevoir les derniers articles gratuitement en créant un compte !

S'inscrire