Améliorer les performances de démarrage avec Lambda SnapStart - AWS Lambda

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Améliorer les performances de démarrage avec Lambda SnapStart

Lambda SnapStart pour Java peut améliorer les performances de démarrage des applications sensibles à la latence jusqu'à 10 fois sans frais supplémentaires, généralement sans modifier votre code de fonction. Le principal facteur de latence au démarrage (souvent appelé temps de démarrage à froid) est le temps que Lambda passe à initialiser la fonction, ce qui inclut le chargement du code de la fonction, le démarrage de l’environnement d’exécution et l’initialisation du code de la fonction.

Avec SnapStart, Lambda initialise votre fonction lorsque vous publiez une version de fonction. Lambda prend un instantané Firecracker microVM de l’état de la mémoire et du disque de l’environnement d’exécution initialisé, chiffre l’instantané et le met en cache pour un accès à faible latence. Lorsque vous invoquez la version de la fonction pour la première fois, et au fur et à mesure que les invocations augmentent, Lambda reprend les nouveaux environnements d’exécution à partir de l’instantané mis en cache au lieu de les initialiser à partir de zéro, ce qui améliore la latence au démarrage.

Important

Si vos applications dépendent de l’unicité de l’état, vous devez évaluer votre code de fonction et vérifier qu’il est résilient aux opérations instantanées. Pour plus d’informations, consultez Gérer l'unicité avec Lambda SnapStart.

Fonctions prises en charge et limitations

SnapStart prend en charge les environnements d'exécution gérés par Java 11 et versions ultérieures. Les autres environnements d'exécution gérés (tels que nodejs20.x et python3.12), Exécutions uniquement basées sur le système d'exploitationet les images de conteneurs ne sont pas pris en charge.

SnapStart ne prend pas en charge la simultanéité provisionnée, l'architecture arm64, Amazon Elastic File System (Amazon EFS) ou le stockage éphémère supérieur à 512 Mo.

Pour travailler avec SnapStart, vous pouvez utiliser la console Lambda, le AWS Command Line Interface (AWS CLI), l'API Lambda, le AWS SDK for Java AWS CloudFormation, AWS Serverless Application Model (AWS SAM) et. AWS Cloud Development Kit (AWS CDK) Pour plus d’informations, consultez Activation et gestion de Lambda SnapStart.

Note

Vous ne pouvez l'utiliser SnapStart que sur des versions de fonctions publiées et des alias pointant vers des versions. Vous ne pouvez pas l'utiliser SnapStart sur la version non publiée d'une fonction ($LATEST).

Régions prises en charge

SnapStart est disponible dans les versions suivantes Régions AWS :

  • USA Est (Virginie du Nord)

  • USA Est (Ohio)

  • USA Ouest (Californie du Nord)

  • USA Ouest (Oregon)

  • Afrique (Le Cap)

  • Asie-Pacifique (Hong Kong)

  • Asie-Pacifique (Mumbai)

  • Asie-Pacifique (Hyderabad)

  • Asie-Pacifique (Tokyo)

  • Asie-Pacifique (Séoul)

  • Asie-Pacifique (Osaka)

  • Asie-Pacifique (Singapour)

  • Asie-Pacifique (Sydney)

  • Asie-Pacifique (Jakarta)

  • Asie-Pacifique (Melbourne)

  • Canada (Centre)

  • Europe (Stockholm)

  • Europe (Francfort)

  • Europe (Zurich)

  • Europe (Irlande)

  • Europe (Londres)

  • Europe (Paris)

  • Europe (Milan)

  • Europe (Espagne)

  • Moyen-Orient (EAU)

  • Moyen-Orient (Bahreïn)

  • Amérique du Sud (Sao Paulo)

Considérations de compatibilité

Avec SnapStart, Lambda utilise un seul instantané comme état initial pour plusieurs environnements d'exécution. Si votre fonction utilise l'un des éléments suivants pendant la phase d'initialisation, vous devrez peut-être apporter quelques modifications avant de l'utiliser SnapStart :

Unicité

Si votre code d’initialisation génère un contenu unique qui est inclus dans l’instantané, ce contenu peut ne pas être unique lorsqu’il est réutilisé dans plusieurs environnements d’exécution. Pour conserver l'unicité lors de l'utilisation SnapStart, vous devez générer un contenu unique après l'initialisation. Cela inclut les identifiants uniques, les secrets uniques et l’entropie utilisée pour générer un pseudo aléatoire. Pour savoir comment restaurer l’unicité, consultez Gérer l'unicité avec Lambda SnapStart.

Connexions réseau

L’état des connexions que votre fonction établit pendant la phase d’initialisation n’est pas garanti lorsque Lambda reprend votre fonction à partir d’un instantané. Validez l’état de vos connexions réseau et rétablissez-les si nécessaire. Dans la plupart des cas, les connexions réseau établies par un AWS SDK reprennent automatiquement. Pour les autres connexions, consultez les bonnes pratiques.

Données temporaires

Certaines fonctions téléchargent ou initialisent des données éphémères, telles que des informations d’identification temporaires ou des horodatages mis en cache, pendant la phase d’initialisation. Actualisez les données éphémères dans le gestionnaire de fonctions avant de les utiliser, même lorsque vous ne les utilisez pas. SnapStart

SnapStart tarification

Il n'y a aucun coût supplémentaire pour SnapStart. Vous êtes facturé en fonction du nombre de demandes pour vos fonctions, de la durée d’exécution de votre code et de la mémoire configurée pour votre fonction. La durée est calculée à partir du moment où votre code commence à s’exécuter jusqu’à son retour ou sa fin, arrondie à la milliseconde la plus proche.

Les frais de durée s’appliquent au code qui s’exécute dans le gestionnaire de fonction, au code d’initialisation déclaré en dehors du gestionnaire, au temps nécessaire au chargement de l’environnement d’exécution (JVM) et à tout code exécuté dans un hook d’exécution. Pour plus d’informations sur la façon dont Lambda calcule la durée, consultez Surveillance pour Lambda SnapStart.

Pour les fonctions configurées avec SnapStart, Lambda recycle régulièrement les environnements d'exécution et réexécute votre code d'initialisation. Pour la résilience, Lambda crée des instantanés dans plusieurs zones de disponibilité. Des frais s’appliquent chaque fois que Lambda réexécute votre code d’initialisation dans une autre zone de disponibilité. Pour plus d’informations sur la façon dont Lambda calcule les frais, consultez Tarification AWS Lambda.

Comparaison entre Lambda SnapStart et la simultanéité provisionnée

La Lambda SnapStart et la simultanéité provisionnée peuvent réduire les démarrages à froid et les latences exceptionnelles lorsqu'une fonction prend de l'ampleur. SnapStart vous aide à améliorer les performances de démarrage jusqu'à 10 fois sans frais supplémentaires. La simultanéité provisionnée permet aux fonctions d’être initialisées et prêtes à répondre en un nombre de millisecondes à deux chiffres. La configuration de la simultanéité provisionnée entraîne des frais pour votre. Compte AWS Utilisez la simultanéité provisionnée si votre application a des exigences strictes en matière de latence de démarrage à froid. Vous ne pouvez pas utiliser les deux SnapStart et la simultanéité provisionnée sur la même version de fonction.

Note

SnapStart fonctionne mieux lorsqu'il est utilisé avec des invocations de fonctions à grande échelle. Les fonctions qui sont rarement invoquées peuvent ne pas bénéficier des mêmes améliorations de performance.

Ressources supplémentaires

En plus de lire les autres rubriques de ce chapitre, nous vous recommandons également d'essayer l' AWS Lambda SnapStartatelier Starting up faster with with et de regarder la session Fast cold starts for your Java functions dans AWS re:Invent 2022.