View a markdown version of this page

Mise à l'échelle des instances gérées Lambda - 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.

Mise à l'échelle des instances gérées Lambda

Les instances gérées Lambda ne sont pas évolutives lorsque les appels arrivent et ne prennent pas en charge les démarrages à froid. Au lieu de cela, il évolue de manière asynchrone à l'aide de signaux de consommation de ressources. Les instances gérées évoluent actuellement en fonction de l'utilisation des ressources du processeur et de la saturation multisimultanéité.

Principales différences :

  • Lambda (par défaut) : évolue lorsqu'il n'existe pas d'environnement d'exécution libre pour gérer une invocation entrante (démarrage à froid)

  • Instances gérées Lambda : évolue de manière asynchrone en fonction de l'utilisation des ressources du processeur et de la saturation multisimultanée des environnements d'exécution

Si votre trafic fait plus que doubler en 5 minutes, vous risquez de rencontrer des problèmes à mesure que Lambda fait évoluer les instances et les environnements d'exécution pour répondre à la demande.

Le cycle de vie du dimensionnement

Les instances gérées Lambda utilisent une architecture distribuée pour gérer la mise à l'échelle :

Composantes :

  • Instances gérées  : exécutées sur votre compte dans les sous-réseaux que vous fournissez

  • Routeur et scaler  : composants Lambda partagés qui acheminent les appels et gèrent la mise à l'échelle

  • Agent Lambda  : s'exécute sur chaque instance gérée pour gérer le cycle de vie de l'environnement d'exécution et surveiller la consommation des ressources

Comment ça fonctionne :

  1. Lorsque vous publiez une version de fonction avec un fournisseur de capacité, Lambda lance des instances gérées dans votre compte. Il en lance trois par défaut pour la résilience AZ et démarre trois environnements d'exécution avant de marquer la version de votre fonction comme ACTIVE.

  2. Chaque instance gérée peut exécuter des environnements d'exécution pour plusieurs fonctions mappées au même fournisseur de capacité.

  3. Au fur et à mesure que le trafic entre dans votre application, les environnements d'exécution consomment des ressources. L'agent Lambda informe le Scaler, qui décide s'il convient de dimensionner de nouveaux environnements d'exécution ou des instances gérées.

  4. Si Router tente d'envoyer une invocation à un environnement d'exécution consommant beaucoup de ressources, l'agent Lambda de cette instance lui demande de réessayer sur une autre.

  5. Lorsque le trafic diminue, l'agent Lambda en informe Scaler, qui prend la décision de réduire les environnements d'exécution et de déployer les instances gérées.

Ajustement du comportement de dimensionnement

Vous pouvez personnaliser le comportement de dimensionnement des instances gérées à l'aide de cinq contrôles :

Contrôles au niveau des fonctions

1. Mémoire de fonctions et processeurs virtuels

Choisissez la taille de la mémoire et l'allocation du processeur virtuel pour votre fonction. La plus petite taille de fonction prise en charge est de 2 Go et 1 vCPU.

Considérations :

  • Choisissez un paramètre de mémoire et de processeur virtuel qui prend en charge les exécutions multisimultanées de votre fonction

  • Vous ne pouvez pas configurer une fonction avec moins d'un processeur virtuel car les fonctions exécutées sur des instances gérées doivent prendre en charge des charges de travail multisimultanées

  • Vous ne pouvez pas choisir moins de 2 Go car cela correspond au ratio mémoire/processeur virtuel de 2 pour 1 des instances c, qui présentent le ratio le plus faible

  • Pour les applications Python, vous devrez peut-être choisir un ratio plus élevé entre la mémoire et les processeurs virtuels, par exemple 4 pour 1 ou 8 pour 1, en raison de la façon dont Python gère la multisimultanéité

  • Si vous exécutez des CPU-intensive opérations ou si vous effectuez peu d'E/S, vous devez choisir plusieurs processeurs virtuels

2. Simultanéité maximum

Définissez la simultanéité maximale par environnement d'exécution.

Comportement par défaut : Lambda choisit des valeurs par défaut judicieuses qui équilibrent la consommation de ressources et le débit, ce qui convient à une grande variété d'applications.

Directives d'ajustement :

  • Augmenter la simultanéité : si vos appels de fonctions utilisent très peu de processeur, vous pouvez augmenter la simultanéité maximale jusqu'à un maximum de 64 par processeur virtuel

  • Diminuer la simultanéité : si votre application consomme une grande quantité de mémoire et très peu de processeur, vous pouvez réduire votre simultanéité maximale

Important : étant donné que les instances gérées Lambda sont destinées à des applications multisimultanées, les environnements d'exécution présentant une très faible simultanéité peuvent rencontrer des contraintes lors de la mise à l'échelle. Lorsque les appels arrivent dans un environnement d'exécution qui a atteint sa limite de simultanéité, Lambda achemine ces appels ailleurs et développe de nouveaux environnements d'exécution pour gérer la charge. Pour identifier la contrainte de ressources à l'origine des ralentissements, surveillez les métriques des raisons de l'étranglement (ConcurrencyThrottles, CPUThrottlesMemoryThrottles, etDiskThrottles) décrites dans. Types de métriques pour les fonctions Lambda

3. Environnements d'exécution par fonction

Définissez le nombre minimum et maximum d'environnements d'exécution pour votre fonction.

Comportement par défaut : le minimum par défaut est de 3 environnements d'exécution répartis dans les zones de disponibilité, sans maximum par défaut. Vous pouvez remplacer les deux valeurs une fois la fonction créée.

Directives d'ajustement :

  • Définissez le minimum : prévoyez de la capacité pour le trafic de base et réduisez les gaz en cas de rafales soudaines. Les valeurs inférieures à 3 réduisent la redondance de la zone de disponibilité.

  • Définissez le maximum : plafonnez le nombre d'environnements d'exécution pour contrôler la scale-out et éviter les problèmes de voisinage bruyants lorsque plusieurs fonctions partagent un fournisseur de capacité.

  • Désactiver la fonction : réglez à la fois le minimum et le maximum sur 0 pour désactiver une fonction sans la supprimer.

Exemple :

aws lambda put-function-scaling-config \ --function-name my-lmi-function \ --qualifier '$LATEST.PUBLISHED' \ --function-scaling-config MinExecutionEnvironments=5,MaxExecutionEnvironments=20 \ --region us-east-1

Remarques importantes :

  • Portée du qualificatif : ces configurations s'appliquent au niveau de la fonction pour chaque ARN qualifié. Lorsque cette option est activée$LATEST.PUBLISHED, la configuration se propage aux $LATEST.PUBLISHED versions futures. Lorsqu'elles sont définies sur une version spécifique, les nouvelles versions publiées reviennent aux valeurs par défaut.

  • Configuration couplée : vous devez définir les valeurs minimale et maximale ensemble. Tout paramètre non spécifié revient à sa valeur par défaut. Les valeurs sont valides pour les deux MinExecutionEnvironments et sont MaxExecutionEnvironments comprises entre 0 et 15 000. Un minimum de 0 n'est valide que si le maximum est également égal à 0.

  • Incidence financière : la désactivation de la fonction prend effet au niveau de la version de la fonction. Lambda met fin à une instance EC2 sous-jacente lorsqu'aucun environnement d'exécution n'est actif, et les frais d'instance se poursuivent jusqu'à la fin de la résiliation (généralement en quelques minutes).

Contrôles au niveau des fournisseurs de capacité

4. Utilisation des ressources cible

Choisissez votre propre objectif en matière de consommation d'utilisation du processeur.

Comportement par défaut : Lambda conserve une marge de manœuvre suffisante pour que votre trafic double en 5 minutes sans ralentissement.

Options d'optimisation :

  • Si votre charge de travail est très stable ou si votre application n'est pas sensible aux contraintes, vous pouvez fixer l'objectif à un niveau élevé afin d'augmenter le taux d'utilisation et de réduire les coûts

  • Si vous souhaitez conserver une marge de manœuvre en cas de rafales de trafic, vous pouvez définir des objectifs de ressources à un niveau bas, ce qui nécessite davantage de capacité

5. Sélection du type d'instance

Définissez les types d'instances autorisés ou exclus.

Comportement par défaut : Lambda choisit les types d'instances les mieux adaptés à votre charge de travail. Il est recommandé de laisser les instances gérées Lambda choisir les types d'instance, car la limitation du nombre de types d'instances possibles peut entraîner une baisse de la disponibilité.

Configuration personnalisée :

  • Configuration matérielle spécifique : définissez les types d'instances autorisés sur une liste d'instances compatibles. Par exemple, si votre application nécessite une bande passante réseau élevée, vous pouvez sélectionner plusieurs types d'instances n

  • Optimisation des coûts : pour les environnements de test ou de développement, vous pouvez choisir des types d'instances plus petits, tels que les types d'instance m7a.large

Mise à l’échelle planifiée

Utilisez Amazon EventBridge Scheduler pour ajuster les environnements d'exécution minimum et maximum de votre fonction selon un calendrier récurrent ou ponctuel. Cela est utile pour des modèles de trafic prévisibles, tels que la mise à l'échelle avant les heures de pointe et la réduction pendant les heures creuses.

Configuration du planificateur :

  • Créez un rôle d'exécution du EventBridge planificateur ou utilisez un rôle existant qui autorise l'appel à votre lambda:PutFunctionScalingConfig fonction cible.

  • Créez un calendrier à l'aide d'une expression cron ou rate, en ciblant l'PutFunctionScalingConfigAPI en tant que cible universelle. Spécifiez les nouvelles MaxExecutionEnvironments valeurs MinExecutionEnvironments et dans la charge utile d'entrée.

Exemple 1 : évolutivité pour gérer les pics de trafic planifiés

Créez deux horaires pour augmenter l'échelle avant les heures de pointe et la réduire par la suite. Chaque calendrier cible l'PutFunctionScalingConfigAPI avec des MaxExecutionEnvironments valeurs MinExecutionEnvironments et mises à jour.

Passez à la vitesse supérieure à 8 h 00 UTC (min = 100, max = 1000) :

aws scheduler create-schedule \ --name "ScaleUpLambdaManagedInstances" \ --schedule-expression "cron(0 8 * * ? *)" \ --flexible-time-window '{"Mode": "OFF"}' \ --target '{ "Arn": "arn:aws:scheduler:::aws-sdk:lambda:PutFunctionScalingConfig", "RoleArn": "arn:aws:iam::<account-id>:role/eventbridge-scheduler-role", "Input": "{\"FunctionName\": \"my-lmi-function\", \"Qualifier\": \"$LATEST.PUBLISHED\", \"FunctionScalingConfig\": {\"MinExecutionEnvironments\": 100, \"MaxExecutionEnvironments\": 1000}}" }'

Réduisez la taille à 18 h 00 UTC (min = 5, max = 20) :

aws scheduler create-schedule \ --name "ScaleDownLambdaManagedInstances" \ --schedule-expression "cron(0 18 * * ? *)" \ --flexible-time-window '{"Mode": "OFF"}' \ --target '{ "Arn": "arn:aws:scheduler:::aws-sdk:lambda:PutFunctionScalingConfig", "RoleArn": "arn:aws:iam::<account-id>:role/eventbridge-scheduler-role", "Input": "{\"FunctionName\": \"my-lmi-function\", \"Qualifier\": \"$LATEST.PUBLISHED\", \"FunctionScalingConfig\": {\"MinExecutionEnvironments\": 5, \"MaxExecutionEnvironments\": 20}}" }'

Exemple 2 : désactiver en dehors des heures de pointe et réactiver

Le réglage des deux MinExecutionEnvironments et MaxExecutionEnvironments sur 0 désactive la version de la fonction sans la supprimer. Une fonction désactivée n'est pas automatiquement redimensionnée en fonction du trafic. Vous devez le réactiver explicitement en définissant des valeurs non nulles par le biais d'une autre action planifiée.

Désactiver à 22 h UTC (min = 0, max = 0) :

aws scheduler create-schedule \ --name "DeactivateLambdaManagedInstances" \ --schedule-expression "cron(0 22 * * ? *)" \ --flexible-time-window '{"Mode": "OFF"}' \ --target '{ "Arn": "arn:aws:scheduler:::aws-sdk:lambda:PutFunctionScalingConfig", "RoleArn": "arn:aws:iam::<account-id>:role/eventbridge-scheduler-role", "Input": "{\"FunctionName\": \"my-lmi-function\", \"Qualifier\": \"$LATEST.PUBLISHED\", \"FunctionScalingConfig\": {\"MinExecutionEnvironments\": 0, \"MaxExecutionEnvironments\": 0}}" }'

Réactivez à 7 h 00 UTC (min = 10, max = 20) :

aws scheduler create-schedule \ --name "ReactivateLambdaManagedInstances" \ --schedule-expression "cron(0 7 * * ? *)" \ --flexible-time-window '{"Mode": "OFF"}' \ --target '{ "Arn": "arn:aws:scheduler:::aws-sdk:lambda:PutFunctionScalingConfig", "RoleArn": "arn:aws:iam::<account-id>:role/eventbridge-scheduler-role", "Input": "{\"FunctionName\": \"my-lmi-function\", \"Qualifier\": \"$LATEST.PUBLISHED\", \"FunctionScalingConfig\": {\"MinExecutionEnvironments\": 10, \"MaxExecutionEnvironments\": 20}}" }'

Directives d'ajustement :

  • Pour les charges de travail dont les pics sont prévisibles, créez plusieurs programmes en fonction de votre trafic : un pour augmenter votre fonction avant les heures de pointe, et un autre pour le réduire après les heures de pointe. Chaque calendrier suit le même schéma avec des MaxExecutionEnvironments valeurs MinExecutionEnvironments et mises à jour.

  • La mise à l'échelle planifiée ajuste le plancher et le plafond prévus pour les environnements d'exécution, mais la mise à l'échelle réelle entre min et max dépend toujours de l'utilisation du processeur et de la saturation de la simultanéité.

  • Si votre trafic fait plus que doubler dans les 5 minutes suivant une augmentation planifiée, il se peut que vous rencontriez encore des difficultés lors de l'approvisionnement de la capacité.

  • Lorsque vous passez à zéro pour désactiver une fonction, n'oubliez pas que la réactivation nécessite un PutFunctionScalingConfig appel explicite avec des valeurs différentes de zéro.

Étapes suivantes