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.
Dimensionnement 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. Il évolue plutôt de manière asynchrone en utilisant des 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 en multisimultanéité.
Principales différences :
-
Lambda (par défaut) : évolue lorsqu'il n'existe aucun environnement d'exécution libre pour gérer un appel entrant (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 multiconcurrentielle des environnements d'exécution
Si votre trafic double plus que dans les 5 minutes, vous risquez de rencontrer des difficultés à mesure que Lambda augmente le volume des instances et des 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 le dimensionnement :
Composants :
-
Instances gérées - Exécutez-les dans votre compte dans les sous-réseaux que vous fournissez
-
Routeur et scaleur : composants Lambda partagés qui acheminent les appels et gèrent le dimensionnement
-
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 de ressources
Comment cela fonctionne :
-
Lorsque vous publiez une version de fonction auprès d'un fournisseur de capacité, Lambda lance Managed Instances 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 ACTIVE de votre fonction.
-
Chaque instance gérée peut exécuter des environnements d'exécution pour plusieurs fonctions mappées vers le même fournisseur de capacité.
-
À 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.
-
Si Router tente d'envoyer un appel à un environnement d'exécution consommant beaucoup de ressources, l'agent Lambda de cette instance l'invite à réessayer sur une autre instance.
-
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 dimensionner 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 commandes :
Contrôles du niveau de fonction
1. Mémoire fonctionnelle et vCPU
Choisissez la taille de mémoire et l'allocation de vCPU 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 vCPU qui prendra en charge les exécutions simultanées de votre fonction
-
Vous ne pouvez pas configurer une fonction avec moins d'un vCPU, car les fonctions exécutées sur des instances gérées doivent prendre en charge des charges de travail simultanées
-
Vous ne pouvez pas choisir moins de 2 Go car cela correspond au ratio mémoire/vCPU de 2 pour 1 des instances C, qui ont le ratio le plus faible
-
Pour les applications Python, vous devrez peut-être choisir un ratio mémoire/vCPU plus élevé, 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 CPU-intensive des opérations ou effectuez peu d'E/S, vous devez choisir plusieurs vCPU
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 et conviennent à une grande variété d'applications.
Directives de réglage :
-
Augmenter la simultanéité : si vos invocations de fonctions utilisent très peu de CPU, vous pouvez augmenter la simultanéité maximale jusqu'à 64 par vCPU
-
Diminuez 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 multiconcurrentes, les environnements d'exécution présentant une très faible simultanéité peuvent être confrontés à des limitations lors de la mise à l'échelle.
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 : Lambda maintient un minimum de 3 environnements d'exécution par défaut pour garantir une haute disponibilité dans toutes les zones de disponibilité.
Directives de réglage :
-
Définissez le minimum : fournissez de la capacité pour le trafic de base et réduisez les ralentissements en cas de rafales soudaines.
-
Définissez le maximum : limitez le nombre d'environnements d'exécution pour contrôler le scale-out et éviter les problèmes de voisinage bruyants lorsque plusieurs fonctions partagent un fournisseur de capacité.
-
Désactiver la fonction : définissez 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 :
-
Champ d'application 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 futures$LATEST.PUBLISHEDversions. Lorsqu'elles sont définies sur une version spécifique, les versions récemment publiées reprennent les 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 valides pour les deux sont
MaxExecutionEnvironmentscomprises entre 0MinExecutionEnvironmentset 15 000.
Contrôles au niveau du fournisseur de capacité
4. Utilisation des ressources cibles
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 limitation.
Options d'optimisation :
-
Si votre charge de travail est très stable ou si votre application n'est pas sensible aux limitations, vous pouvez définir l'objectif à un niveau élevé pour augmenter le taux d'utilisation et réduire les coûts
-
Si vous souhaitez conserver une marge de manœuvre pour faire face à des pics de trafic, vous pouvez définir des objectifs de ressources à un niveau faible, ce qui nécessitera une capacité accrue
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'instances, car la restriction du nombre de types d'instances possibles peut entraîner une baisse de disponibilité.
Configuration personnalisée :
-
Exigences matérielles spécifiques : définissez les types d'instances autorisés dans 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 l'augmentation 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:PutFunctionScalingConfigfonction cible. -
Créez un planning à l'aide d'une expression cron ou rate, en ciblant l'
PutFunctionScalingConfigAPI en tant que cible universelle. Spécifiez les nouvellesMaxExecutionEnvironmentsvaleursMinExecutionEnvironmentset dans la charge utile d'entrée.
Exemple 1 : mise à l'échelle pour gérer les pics de trafic planifiés
Créez deux horaires à augmenter avant les heures de pointe et à réduire par la suite. Chaque calendrier cible l'PutFunctionScalingConfigAPI avec des MaxExecutionEnvironments valeurs MinExecutionEnvironments et des 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 à 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ésactivation en dehors des heures de pointe et réactivation
Le réglage à la fois MinExecutionEnvironments et MaxExecutionEnvironments à 0 désactive la version de la fonction sans la supprimer. Une fonction désactivée n'augmente pas automatiquement en fonction du trafic. Vous devez le réactiver explicitement en définissant des valeurs différentes de zéro par le biais d'une autre action planifiée.
Désactiver à 22 h 00 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 de réglage :
-
Pour les charges de travail présentant des pics prévisibles, créez plusieurs plannings adaptés à votre schéma de trafic : un pour développer votre fonction avant les heures de pointe, et un autre pour réduire les horaires après les heures de pointe. Chaque calendrier suit le même schéma avec des mises à jour
MinExecutionEnvironmentsetMaxExecutionEnvironmentsdes valeurs. -
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 le minimum et le maximum répond toujours à l'utilisation du processeur et à la saturation de la simultanéité.
-
Si votre trafic a plus que doublé dans les 5 minutes suivant une mise à l'échelle planifiée, il se peut que vous subissiez encore des difficultés au fur et à mesure que la capacité est mise en service.
-
Lorsque vous passez à zéro pour désactiver une fonction, n'oubliez pas que la réactivation nécessite un
PutFunctionScalingConfigappel explicite avec des valeurs différentes de zéro.
Étapes suivantes
-
En savoir plus sur les fournisseurs de capacité pour les instances gérées Lambda
-
Consultez les guides spécifiques à l'exécution pour gérer la multisimultanéité
-
Configurez la connectivité VPC pour vos fournisseurs de capacité
-
Surveillez les métriques de dimensionnement pour optimiser le comportement de dimensionnement