AWS Lambda
Manuel du développeur

Gestion de la simultanéité

L'unité de dimensionnement pour AWS Lambda est une exécution simultanée (consultez Présentation du comportement de dimensionnement pour plus de détails). Cependant, le dimensionnement à l'infini n'est pas souhaitable dans tous les cas. Vous pouvez, par exemple, vouloir contrôler la simultanéité pour des raisons de coûts ou afin de réguler le temps nécessaire au traitement d'un lot d'événements, ou simplement pour la faire correspondre à une ressource en aval. Dans cette optique, Lambda permet de contrôler la limite des exécutions simultanées aux niveaux du compte et de la fonction.

Limite des exécutions simultanées au niveau du compte

Par défaut, AWS Lambda limite à 1000 le nombre total d'exécutions simultanées de toutes les fonctions au sein d'une région donnée. Vous pouvez consulter les paramètres au niveau du compte à l'aide de l'API GetAccountSettings et de l'affichage de l'objet AccountLimit. Cette limite peut être augmentée comme décrit ci-dessous :

Pour demander une augmentation de limite pour les exécutions simultanées

  1. Ouvrez la page AWS Support Center, connectez-vous (si nécessaire), puis choisissez Create case (Créer une demande de support).

  2. Pour Regarding, sélectionnez Service Limit Increase.

  3. Pour Limit Type (Type de limite), choisissez Lambda, remplissez les champs nécessaires du formulaire, puis choisissez le bouton correspondant à votre mode de contact préféré en bas de la page.

Limite des exécutions simultanées au niveau de la fonction

Par défaut, la limite des exécutions simultanées est appliquée par rapport à la somme des exécutions simultanées de toutes les fonctions. Le groupe d'exécutions simultanées partagé est désigné sous le terme d'allocation de simultanéité non réservée. Si vous n'avez pas défini de limite de simultanéité au niveau de la fonction, la limite de simultanéité non réservée est identique à celle définie au niveau du compte. À toute augmentation de la limite au niveau du compte correspond une augmentation de la limite de simultanéité non réservée. Vous pouvez afficher l'allocation de simultanéité non réservée pour une fonction à l'aide de l'API GetAccountSettings ou en utilisant la console AWS Lambda. Les fonctions prises en compte par rapport au groupe d'exécutions simultanées partagé ne présentent aucune valeur de simultanéité lorsqu'elles sont interrogées à l'aide de l'API GetFunctionConfiguration.

Vous pouvez éventuellement définir la limite des exécutions simultanées pour une fonction, pour plusieurs raisons :

  • Le comportement par défaut implique qu'une hausse des exécutions simultanées dans une fonction empêche la fonction que vous avez isolée avec une limite d'exécutions d'être limitée. En paramétrant une limite des exécutions simultanées au niveau d'une fonction, vous réservez pour cette fonction la valeur d'exécution simultanée spécifiée.

  • Les fonctions se mettent automatiquement à l'échelle en fonction du taux de demandes entrantes, mais il se peut que certaines ressources de votre architecture ne puissent pas le faire. Par exemple, pour les bases de données relationnelles, il existe des limites quant au nombre de connexions simultanées pouvant être gérées. Vous pouvez définir la limite des exécutions simultanées pour une fonction d'après les valeurs prises en charge par ses ressources en aval.

  • Si la fonction se connecte aux ressources VPC, vous devez vous assurer que vos sous-réseaux disposent d'une capacité d'adresse adéquate pour prendre en charge les exigences de mise à l'échelle de l'interface réseau Elastic (ENI) de votre fonction. Vous pouvez estimer la capacité approximative de l'interface réseau Elastic avec la formule suivante :

    Concurrent executions * (Memory in GB / 3 GB)

    Où :

    • Concurrent execution – Il s'agit de la simultanéité projetée de votre charge de travail. Utilisez les informations de Présentation du comportement de dimensionnement pour déterminer cette valeur.

    • Memory in GB (Mémoire en Go) – Quantité de mémoire que vous avez configurée pour la fonction Lambda.

Vous pouvez définir la limite des exécutions simultanées pour une fonction d'après les limites de la taille du sous-réseau.

Note

Pour qu'une fonction arrête de traiter les appels, vous pouvez définir à 0 la simultanéité et restreindre toutes les exécutions entrantes.

En définissant une limite de simultanéité au niveau d'une fonction, Lambda garantit que cette allocation s'appliquera spécifiquement à ladite fonction, quelle que soit l'importance du trafic pour le traitement des fonctions restantes. Si cette limite est dépassée, la fonction sera restreinte. Le comportement de cette fonction, lorsqu'elle est restreinte, dépend de la source d'événements. Pour plus d'informations, consultez Comportement de limitation.

Note

Les limites de simultanéité peuvent être définies uniquement au niveau de la fonction, et non pour des versions individuelles. Tous les appels à toutes les versions et à tous les alias d'une fonction donnée sont comptabilisés dans la limite de fonction.

Limites de simultanéité réservée ou non réservée

Si vous définissez la limite des exécutions simultanées pour une fonction, cette valeur est déduite du groupe de simultanéité non réservée. Si, par exemple, votre compte est limité à 1 000 exécutions simultanées et que vous avez 10 fonctions, vous pouvez définir la limite d'une fonction à 200 et celle d'une autre à 100. Les 700 autres exécutions seront partagées entre les 8 dernières fonctions.

Note

AWS Lambda maintiendra à 100 exécutions simultanées minimum le groupe de simultanéité non réservée, de sorte que les fonctions qui n'ont pas de limites spécifiques puissent continuer à traiter les demandes. Ainsi, concrètement, si votre compte est limité à 1 000 exécutions, vous pouvez allouer seulement 900 exécutions à des fonctions individuelles.

Définition de limites de simultanéité par fonction (console)

Pour définir une limite de simultanéité pour la fonction Lambda à l'aide de la console Lambda, procédez comme suit :

  1. Ouvrez la page Fonctions de la console Lambda.

  2. Choisissez une fonction.

  3. Sous l'onglet Configuration, choisissez Concurrency. Sous Reserve concurrency, définissez le nombre maximum d'exécutions simultanées à réserver pour la fonction. Remarque : Lorsque vous définissez cette valeur, la valeur Unreserved account concurrency est automatiquement mise à jour afin d'afficher le nombre restant d'exécutions simultanées disponibles pour toutes les autres fonctions du compte. Si, par ailleurs, vous souhaitez bloquer l'appel de cette fonction, définissez la valeur sur 0. Pour supprimer une valeur d'allocation dédiée pour ce compte, sélectionnez Use unreserved account concurrency.

Définition de limites de simultanéité par fonction (interface de ligne de commande)

Pour définir une limite de simultanéité pour la fonction Lambda à l'aide de l'AWS CLI, procédez comme suit :

  • Utilisez l'opération PutFunctionConcurrency et transmettez le nom de la fonction et la limite de simultanéité à allouer à cette fonction :

    $ aws lambda put-function-concurrency --function-name my-function --reserved-concurrent-executions 100

Pour supprimer une limite de simultanéité pour la fonction Lambda à l'aide de l'AWS CLI, procédez comme suit :

  • Utilisez l'opération DeleteFunctionConcurrency et transmettez le nom de la fonction :

    $ aws lambda delete-function-concurrency --function-name my-function

Pour afficher une limite de simultanéité pour la fonction Lambda à l'aide de l'AWS CLI, procédez comme suit :

  • Utilisez l'opération GetFunction et transmettez le nom de la fonction :

    $ aws lambda get-function --function-name my-function

Le fait de définir la simultanéité par fonction peut avoir des conséquences sur le groupe de simultanéité disponible pour d'autres fonctions. Il est recommandé de restreindre les autorisations d'accès aux API PutFunctionConcurrency et DeleteFunctionConcurrency aux seuls administrateurs, afin de limiter le nombre d'utilisateurs pouvant apporter ces modifications.

Comportement de limitation

Lorsque la limite de simultanéité associée à une fonction est atteinte, toute nouvelle demande d'appel à cette fonction est restreinte, c'est-à-dire que l'appel n'exécute pas la fonction. Chaque appel restreint entraîne une augmentation de la métrique Throttles dans Amazon CloudWatch pour cette fonction. AWS Lambda gère différemment les demandes d'appel restreintes, en fonction de leur source :

  • Sources d'événements non basées sur les flux : certaines de ces sources d'événements appellent une fonction Lambda de manière synchrone, d'autres de façon asynchrone. Le traitement diffère selon la méthode employée :

    • Appel synchrone : si la fonction est appelée de façon synchrone et qu'elle est restreinte, Lambda renvoie une erreur 429 et le service à l'origine de l'appel est chargé de réessayer. Le code d'erreur ThrottledReason indique s'il s'agit d'une restriction au niveau de la fonction (si spécifiée) ou au niveau du compte (voir la remarque ci-dessous). À chaque service peut correspondre sa propre stratégie de nouvelle tentative. Pour obtenir une liste des sources d'événements et leur type d'appel, consultez Utilisation de AWS Lambda avec d'autres services.

    • Appel asynchrone : si la fonction Lambda est appelée de façon asynchrone et qu'elle est restreinte, AWS Lambda réessaie automatiquement de lancer l'événement pendant une durée pouvant aller jusqu'à six heures, avec des temps d'attente entre les tentatives.

  • Sources d'événements basées sur les interrogations qui sont aussi basées sur les flux : par exemple Amazon Kinesis ou Amazon DynamoDB, AWS Lambda interroge votre flux et appelle votre fonction Lambda. Si votre fonction Lambda est restreinte, Lambda tente de traiter le lot d'enregistrements correspondant tant que les données n'expirent pas. Cela peut aller jusqu'à sept jours pour Amazon Kinesis. La demande restreinte est considérée comme un blocage de partition. Dès lors, Lambda cesse de lire les enregistrements de cette partition jusqu'à ce que le lot d'enregistrements restreint aboutisse ou expire. Si le flux comporte plusieurs partitions, Lambda continue les appels sur les partitions non restreintes jusqu'à ce que l'un d'eux fonctionne.

  • Sources d'événements basées sur les interrogations qui ne sont pas basées sur les flux : par exemple Amazon Simple Queue Service, AWS Lambda interroge votre file d'attente et appelle votre fonction Lambda. Lorsque votre fonction Lambda est limitée, Lambda essaie de traiter le lot d'enregistrement limité jusqu'être invoqué avec succès (auquel cas le message est automatiquement supprimé de la file d'attente) ou jusqu'à ce que la valeur MessageRetentionPeriod (durée de rétention du message) définie expire.

Surveillance de votre utilisation de la simultanéité

AWS Lambda fournit les métriques suivantes, qui vous aideront à comprendre l'usage que vous faites des exécutions simultanées :

  • ConcurrentExecutions : cette métrique présente les exécutions simultanées au niveau d'un compte, pour n'importe quelle fonction avec une limite de simultanéité personnalisée.

  • UnreservedConcurrentExecutions : cette métrique présente le nombre total d'exécutions simultanées pour les fonctions attribuées au groupe de simultanéité non réservée par défaut.

Pour en savoir plus sur ces métriques et sur la façon d'y accéder, consultez Surveillance et dépannage des applications Lambda.