Utilisez Function Compute pour créer une politique de réduction d'échelle personnalisée qui contrôle les instances à supprimer lors d'un événement de réduction, par exemple en priorisant les instances présentant la charge CPU la plus faible.
Contexte
Auto Scaling fournit des politiques intégrées pour supprimer des instances lors d'une activité de réduction d'échelle, selon des critères tels que l'heure de création de l'instance ou la version de la configuration de mise à l'échelle. Pour plus d'informations, consultez la rubrique Configurer une politique de terminaison d'instance pour un groupe de mise à l'échelle.
Pour répondre à des exigences plus spécifiques, utilisez Function Compute afin de créer une politique de réduction d'échelle personnalisée. Voici quelques cas d'utilisation courants :
Scénario 1 : Supprimez les instances ayant la charge CPU la plus faible afin de minimiser l'impact sur l'application.
Scénario 2 : Intégrez votre propre système de planification pour supprimer en priorité les instances inactives, réduisant ainsi les coûts tout en maintenant la disponibilité du service.
Prérequis
Function Compute est activé et vous disposez des autorisations requises. Pour plus d'informations, consultez la section Étape 1 : Activer Function Compute.
Simple Log Service est activé et vous disposez des autorisations nécessaires. Pour plus d'informations, consultez la rubrique Collecter et analyser les journaux texte ECS à l'aide de LoongCollector.
Procédure
Étape 1 : Créer une fonction
La console Alibaba Cloud Function Compute est disponible en deux versions : Function Compute 2.0 et Function Compute 3.0. Ce guide utilise Function Compute 2.0.
-
Connectez-vous à la console Function Compute.
Si vous utilisez la console Function Compute 3.0, cliquez sur Back to Function Compute 2.0.
Dans le volet de navigation de gauche, cliquez sur Services & Functions.
Dans la barre de navigation supérieure, sélectionnez une région.
-
Créez un service.
Sur la page Services, cliquez sur Create Service.
-
Dans le panneau qui s'affiche, configurez les paramètres du service et cliquez sur OK.
Cette rubrique utilise les paramètres suivants à titre d'exemple. Conservez les valeurs par défaut pour les autres paramètres. Pour plus d'informations, consultez la section Créer un service.
Parameter
Example
Description
Service
test-service
Nom du service Function Compute. Respectez les conventions de nommage indiquées dans la console.
Description
test
Description du service Function Compute.
Logging
Enable
Activez la journalisation pour envoyer automatiquement les journaux d'exécution des fonctions vers Simple Log Service. Cela permet de déboguer le code, de diagnostiquer les échecs et d'analyser les données.
-
Créez une fonction.
Cliquez sur le nom du service, puis sur Function Management dans le volet de navigation de gauche.
Cliquez sur Create Function.
-
Sur la page Create Function, configurez les paramètres de la fonction et cliquez sur Create.
Cette rubrique utilise la méthode Use Built-in Runtime pour créer la fonction. Les paramètres suivants sont utilisés à titre d'exemple. Conservez les valeurs par défaut pour les autres paramètres. Pour plus d'informations, consultez la section Créer une fonction.
Parameter
Example
Description
Basic Settings
Function Name
test-fc
Saisissez un nom pour la fonction. Respectez les conventions de nommage indiquées dans la console.
Handler Type
Event Handler
Les types de gestionnaires suivants sont pris en charge :
-
Event Handler : La fonction traite les requêtes pilotées par les événements.
-
HTTP Handler : La fonction traite les requêtes HTTP ou WebSocket.
Code
Runtime Environment
Python 3.9
Environnement d'exécution de votre code.
Code Upload Method
Use Sample Code
Hello, world! sample
Méthode de téléchargement du code de la fonction vers Function Compute.
-
-
Rédigez et déployez le code de la fonction.
Cliquez sur le nom de la fonction pour accéder à la page des détails de la fonction.
-
Sous l'onglet Code, modifiez le fichier
index.pydans l'éditeur de code et cliquez sur Deploy.Implémentez la logique de filtrage en fonction de vos besoins métier, par exemple en récupérant la charge CPU de chaque instance ou en interrogeant votre système de planification.
L'exemple de code suivant sélectionne les instances à supprimer en fonction du nombre d'instances à supprimer (
Capacity) et de la liste des ID d'instance (InstanceId) transmis dans l'événement.# -*- coding: utf-8 -*- import logging import json def handler(event, context): evt = json.loads(event) logger = logging.getLogger() logger.info(evt) removeCount = 0 if "CapacityToRemove" in evt: for cp in evt["CapacityToRemove"]: logger.info(cp["Capacity"]) removeCount += int(cp["Capacity"]) instances_to_terminate = [] if "Instances" in evt: for i in evt["Instances"]: instances_to_terminate.append(i["InstanceId"]) response = { 'InstanceIds': instances_to_terminate[:removeCount] } logger.info(response) return response
-
(Facultatif) Testez la fonction.
Sous l'onglet Code, cliquez sur l'icône
située à côté de Test Function et sélectionnez Configure Test Parameters dans la liste déroulante.-
Saisissez l'objet d'événement de test et cliquez sur OK.
Le code suivant sert d'exemple de test.
ScalingGroupIdspécifie le groupe de mise à l'échelle à gérer.CapacityToRemoveindique qu'il faut supprimer une instance ECS de la zonecn-beijing-g.Instancesspécifie la liste des instances disponibles pour la suppression.{ "ScalingGroupARN": "acs:ess:cn-beijing:160998252992****.scalinggroup/asg-2zei8mzn72rb115k****", "ScalingGroupId": "asg-2zei8mzn72rb115k****", "CapacityToRemove": [{ "ZoneId": "cn-beijing-g", "Capacity": 1 }], "Instances": [{ "InstanceId": "i-2zeinb37ovdsx6l0****", "ZoneId": "cn-beijing-g", "InstanceType": "ecs.g7.xlarge", "ChargeType": "PostPaid" }, { "InstanceId": "i-2zeinb37ovdsx6l0****", "ZoneId": "cn-beijing-g", "InstanceType": "ecs.g7.xlarge", "ChargeType": "PostPaid" }, { "InstanceId": "i-2zeinb37ovdsx6l0****", "ZoneId": "cn-beijing-g", "InstanceType": "ecs.g7.xlarge", "ChargeType": "PostPaid" } ], "AdjustmentType": "SystemScaleIn" } Cliquez sur Test Function.
-
Sous l'onglet Response, consultez le résultat du test.
La réponse attendue de la fonction est présentée ci-dessous. Cette réponse indique à Auto Scaling de supprimer la première instance de la liste lors d'un événement de réduction d'échelle.
{ "InstanceIds": [ "i-2zeinb37ovdsx6l0****" ] }
En haut de la page, cliquez sur Publish Version puis sur OK.
Étape 2 : Configurer la politique de réduction d'échelle
Cette section explique comment appliquer la politique de réduction d'échelle personnalisée lors de la création d'un nouveau groupe de mise à l'échelle. Pour l'appliquer à un groupe existant, modifiez plutôt la politique de réduction d'échelle du groupe.
Connectez-vous à la console Auto Scaling.
-
Créez un groupe de mise à l'échelle.
Sur la page Scaling Groups, cliquez sur Create Scaling Group.
-
Configurez les paramètres du groupe de mise à l'échelle et cliquez sur Create.
Cette rubrique utilise les paramètres suivants à titre d'exemple. Conservez les valeurs par défaut pour les paramètres non mentionnés. Pour plus d'informations, consultez la rubrique Configurer un groupe de mise à l'échelle.
Parameter
Example
Description
Scaling Group Name
test
Saisissez un nom pour le groupe de mise à l'échelle. Respectez les conventions de nommage indiquées dans la console.
Type
ECS
Type d'instances dans le groupe de mise à l'échelle.
Cet exemple utilise ECS, ce qui signifie que le groupe de mise à l'échelle gère des instances ECS.
Instance Configuration Source
Create from Scratch
Modèle de création des instances.
Cet exemple utilise l'option Create from Scratch, ce qui signifie qu'aucun modèle n'est spécifié à cette étape. Vous devrez ensuite créer une configuration de mise à l'échelle après la création du groupe.
Instance Removing Policy
Custom Policy
-
Service : test-service
-
Version : LATEST
-
Function : test-fc
Politique de suppression des instances du groupe de mise à l'échelle lors d'une activité de réduction.
Sélectionnez Custom Policy, puis choisissez la fonction créée à l'étape 1.
Minimum Number of Instances
0
Nombre minimal d'instances dans le groupe de mise à l'échelle. Si le nombre actuel d'instances tombe en dessous de cette valeur, Auto Scaling ajoute des instances pour respecter le minimum requis.
Maximum Number of Instances
5
Nombre maximal d'instances dans le groupe de mise à l'échelle. Si le nombre actuel d'instances dépasse cette valeur, Auto Scaling supprime des instances pour respecter le maximum autorisé.
Enable Expected Number of Instances et Expected Number of Instances
Activé, 3
Activez cette fonctionnalité et définissez le nombre attendu d'instances. Auto Scaling maintient automatiquement ce nombre d'instances dans le groupe.
-
Créez une configuration de mise à l'échelle. Pour plus d'informations, consultez la rubrique Créer une configuration de mise à l'échelle pour les instances ECS.
-
Activez le groupe de mise à l'échelle. Pour plus d'informations, consultez la section Activer ou désactiver un groupe de mise à l'échelle.
Étant donné que le nombre attendu d'instances pour ce groupe de mise à l'échelle est défini sur 3, Auto Scaling crée automatiquement trois instances ECS après l'activation du groupe.
Étape 3 : Vérifier la réduction d'échelle
-
Déclenchez une activité de réduction d'échelle et vérifiez la suppression de l'instance.
-
Déclenchez une activité de réduction d'échelle en modifiant le nombre attendu d'instances pour le groupe de mise à l'échelle. Pour plus d'informations, consultez la section Afficher ou modifier un groupe de mise à l'échelle.
ImportantVous pouvez également déclencher des activités de réduction d'échelle à l'aide d'une tâche planifiée ou d'une tâche déclenchée par un événement, ou en exécutant manuellement une règle de mise à l'échelle. Toutefois, une politique de réduction d'échelle personnalisée créée avec Function Compute ne peut pas être appliquée aux activités de réduction déclenchées par la modification du nombre minimal ou maximal d'instances d'un groupe de mise à l'échelle.
Dans cet exemple, le nombre attendu d'instances est modifié pour passer à 2. Comme le groupe de mise à l'échelle contenait précédemment trois instances ECS, cela déclenche une activité de réduction d'échelle pour supprimer une instance.
-
Consultez les détails de l'activité de mise à l'échelle pour confirmer quelle instance a été supprimée. Pour plus d'informations, consultez la rubrique Afficher les détails d'une activité de mise à l'échelle.
Dans cet exemple, l'ID de l'instance supprimée est
i-2ze2qdthrkpf****tldq.Dans les détails de l'activité de mise à l'échelle, le champ Cause indique que l'utilisateur a modifié la capacité attendue de 3 à 2. Le champ Details montre que l'instance correspondante a été supprimée. Le champ Status Information indique qu'une instance ECS a été supprimée et que le statut de l'activité est Successful.
-
-
Consultez les journaux d'appel de la fonction pour confirmer que l'activité de réduction d'échelle a bien déclenché la fonction.
Dans la console Function Compute, accédez à la page Services et cliquez sur le nom de votre service.
Sur la page Function Management, cliquez sur le nom de votre fonction.
Sur la page des détails de la fonction, cliquez sur l'onglet Logs.
Sous l'onglet Requests, dans la section Requests List, recherchez la requête correspondant à l'heure de l'activité de réduction d'échelle et cliquez sur l'ID de la requête.
-
Dans le panneau des détails de la requête qui s'affiche, cliquez sur Log Details pour afficher les journaux de l'appel de la fonction.
Le journal indique qu'Auto Scaling a transmis à Function Compute le nombre d'instances à supprimer ainsi que la liste actuelle des ID d'instance. La fonction a renvoyé l'ID d'instance
i-2ze2qdthrkpf****tldqpour suppression, ce qui correspond à l'instance supprimée.FC Invoke Start RequestId: 000BFA95-CAA4-5D83-B643-BC51C42402CD 2024-06-13 11:28:22 000BFA95-CAA4-5D83-B643-BC51C42402CD [INFO] {'ScalingGroupARN': 'acs:ess:cn-beijing:16099825xxx:scalinggroup/asg-2e6ny5x9dtxxx', 'ScalingGroupId': 'asg-2e6ny5x9dtiaxxxg', 'CapacityToRemove': [{'ZoneId': 'cn-beijing-g', 'Capacity': 1}], 'Instances': [{'InstanceId': 'i-2ze2qdthrxxxxtldq', 'ZoneId': 'cn-beijing-g', 'InstanceType': 'ecs.c6e.large', 'ChargeType': 'SpotAsPriceGo'}, {'InstanceId': 'i-2ze2qdtxxxxtldr', 'ZoneId': 'cn-beijing-g', 'InstanceType': 'ecs.c6e.large', 'ChargeType': 'SpotAsPriceGo'}, {'InstanceId': 'i-2ze2qdthxxxxtlds', 'ZoneId': 'cn-beijing-g', 'InstanceType': 'ecs.c6e.large', 'ChargeType': 'SpotAsPriceGo'}], 'AdjustmentType': 'SystemScaleIn'} 2024-06-13 11:28:22 000BFA95-CAA4-5D83-B643-BC51C42402CD [INFO] 1 2024-06-13 11:28:22 000BFA95-CAA4-5D83-B643-BC51C42402CD [INFO] {'InstanceIds': ['i-2ze2qdtxxxxtldq']} FC Invoke End RequestId: 000BFA95-CAA4-5D83-B643-BC51C42402CD