Dimensionnement d’une fonction AWS Lambda - AWS Lambda

Dimensionnement d’une fonction AWS Lambda

La première fois que vous appelez votre fonction, AWS Lambda crée une instance de cette dernière et exécute sa méthode de gestionnaire pour traiter l'événement. Lorsque la fonction renvoie une réponse, elle reste active et attend de traiter des événements supplémentaires. Si vous appelez à nouveau la fonction pendant le traitement du premier événement, Lambda initialise une autre instance, et les deux événements sont traités simultanément. Avec l’entrée de plusieurs événements, Lambda les acheminent vers des instances disponibles et crée de nouvelles instances en fonction des besoins. Lorsque le nombre de demandes diminue, Lambda arrête les instances non utilisées, afin de libérer la capacité de dimensionnement pour d'autres fonctions.

La simultanéité de votre fonction est le nombre d'instances répondant à des demandes à un moment donné. Pour un premier pic de trafic, la simultanéité cumulative de votre fonction dans une même région peut atteindre un niveau initial de 500 à 3 000, en fonction de la région.

Limites de simultanéité en rafale

  • 3 000 – USA Ouest (Oregon), USA Est (Virginie du Nord), Europe (Irlande)

  • 1 000 – Asie-Pacifique (Tokyo), Europe (Francfort)

  • 500 – Autres régions.

Après le lancement initial en mode rafale, la simultanéité de votre fonction peut évoluer chaque minute avec jusqu’à 500 instances supplémentaires. Cela se poursuit jusqu'à ce que le nombre d'instances soit suffisant pour répondre à toutes les demandes ou lorsqu'une limite de simultanéité soit atteinte. Lorsque l’entrée des demandes est plus rapide que la capacité de dimensionnement de votre fonction ou lorsque votre fonction atteint la simultanéité maximale, des demandes supplémentaires échouent avec un code de blocage (code d’état 429).

L'exemple suivant montre une fonction qui traite un pic de trafic. Le dimensionnement de la fonction évolue à mesure que les appels augmentent de façon exponentielle. Elle lance une nouvelle instance pour toute demande qui ne peut pas être acheminée vers une instance disponible. Lorsque la limite de simultanéité en rafale est atteinte, la fonction commence une mise à l'échelle linéaire. Si cette simultanéité n'est pas suffisante pour répondre à toutes les demandes, les demandes supplémentaires sont soumises à une limitation et doivent faire l'objet d'une nouvelle tentative.


      Une fois la limite en mode rafale atteinte, la simultanéité évolue de façon linéaire. Les autres demandes sont bloquées.

Légende

  • Instances de la fonction

  • Demandes ouvertes

  • Limitation possible

La fonction continue à évoluer jusqu'à ce que la limite de simultanéité du compte pour la région de la fonction soit atteinte. La fonction parvient à absorber la demande, les demandes diminuent et les instances inutilisées de la fonction sont arrêtées après un délai d'inactivité. Les instances inutilisées sont gelées en attente de demandes et n'entraînent aucun frais.

La limite de concurrence régionale commence à 1,000. Vous pouvez augmenter la limite en envoyant une demande dans la console du Centre de support. Pour allouer la capacité par fonction, vous pouvez configurer les fonctions avec la simultanéité réservée. La simultanéité réservée crée un pool qui ne peut être utilisé que par sa fonction et empêche sa fonction d'utiliser la simultanéité non réservée.

Lorsque votre fonction évolue, la première demande à laquelle chaque instance répond est affectée par le temps nécessaire pour charger et initialiser votre code. Si votre code d'initialisation prend beaucoup de temps, l'impact sur la moyenne et les centiles de la latence peut être significatif. Pour permettre à votre fonction d'évoluer sans fluctuations de latence, utilisez la simultanéité allouée. L'exemple suivant montre une fonction avec simultanéité allouée qui traite un pic de trafic.


      Mise à l'échelle avec la simultanéité allouée.

Légende

  • Instances de la fonction

  • Demandes ouvertes

  • Simultanéité allouée

  • Simultanéité standard

Lorsque vous allouez la simultanéité provisionnée, votre fonction est prête à servir une rafale de demandes entrantes avec une très faible latence. Lorsque l'ensemble de la simultanéité allouée est utilisée, la fonction évolue normalement pour traiter les demandes supplémentaires.

Application Auto Scaling va encore plus loin en assurant le dimensionnement automatique pour la simultanéité provisionnée. Avec Application Auto Scaling, vous pouvez créer une stratégie de dimensionnement de suivi cible qui ajuste automatiquement les niveaux de simultanéité provisionnés, en fonction de la métrique d'utilisation émise par Lambda. Utilisez l'API Application Auto Scaling pour enregistrer un alias en tant que cible évolutive et créer une stratégie de dimensionnement.

Dans l'exemple suivant, une fonction évolue entre une valeur minimale et une valeur maximale de simultanéité allouée en fonction du niveau d'utilisation. Lorsque le nombre de demandes ouvertes augmente, Application Auto Scaling augmente la simultanéité allouée par paliers importants jusqu'à ce qu'elle atteinte la valeur maximale configurée. La fonction continue d'évoluer selon une simultanéité standard jusqu'à ce que l'utilisation commencer à baisser. Lorsque l'utilisation est faible dans la durée, Application Auto Scaling diminue régulièrement la simultanéité allouée par paliers plus petits.


      Dimensionnement automatique de la simultanéité allouée avec le suivi de la cible Application Auto Scaling.

Légende

  • Instances de la fonction

  • Demandes ouvertes

  • Simultanéité allouée

  • Simultanéité standard

Lorsque vous appelez votre fonction de façon asynchrone, avec un mappage de source d'événement ou avec un autre service AWS, le comportement du dimensionnement varie. Par exemple, les mappages de source d'événement qui lisent à partir d'un flux sont limitées au nombre de partitions dans le flux. La capacité de dimensionnement inutilisée par une source d'événement peut être utilisée par d'autres clients et sources d'événements. Pour plus d'informations, consultez les rubriques suivantes.

Vous pouvez surveiller les niveaux de simultanéité dans votre compte avec les métriques suivantes :

Métriques de simultanéité

  • ConcurrentExecutions

  • UnreservedConcurrentExecutions

  • ProvisionedConcurrentExecutions

  • ProvisionedConcurrencyInvocations

  • ProvisionedConcurrencySpilloverInvocations

  • ProvisionedConcurrencyUtilization

Pour de plus amples informations, veuillez consulter Utilisation des métriques de fonction AWS Lambda.